《C++简单程序设计》由会员分享,可在线阅读,更多相关《C++简单程序设计(124页珍藏版)》请在金锄头文库上搜索。
1、第二章第二章C+C+简单程序设计简单程序设计C+语言程序设计2本章主要内容本章主要内容lC+语言概述语言概述(熟悉)(熟悉)l基本数据类型和表达式基本数据类型和表达式(重点)(重点)l数据的输入与输出数据的输入与输出(熟悉)(熟悉)l算法的基本控制结构算法的基本控制结构(重点)(重点)l自定义数据类型自定义数据类型(了解)(了解)3C+语言的产生语言的产生lC+出于出于C而胜于而胜于Cl引入类机制,最初被称为引入类机制,最初被称为“带类的带类的C”l1983年正式取名为年正式取名为C+l从从1989年开始年开始C+语言的标准化工作语言的标准化工作l1994年制定了年制定了ANSI C+标准草案
2、标准草案l1998年年11月被(月被(ISO)批准为国际标准)批准为国际标准C+语言概述4C+C+的诞生的诞生 C+的创始人:的创始人:Bjarne stroustrup (AT&T Bell实验室)实验室)5C+的特点的特点l全面兼容全面兼容C它保持了它保持了C的简洁、高效和接近汇编语言的简洁、高效和接近汇编语言等特点等特点对对C的类型系统进行了改革和扩充的类型系统进行了改革和扩充C+也支持面向过程的程序设计,不是也支持面向过程的程序设计,不是一个纯正的面向对象的语言一个纯正的面向对象的语言l支持面向对象的方法支持面向对象的方法C+语言概述6C+程序实例程序实例例例2-1/2_1.cpp#i
3、nclude using namespace std;int main() coutWelcome to c+!endl; return 0;运行结果:运行结果:Welcome to c+!C+语言概述7C+程序的组成程序的组成l程序主体程序主体函数、类(数据成员、成员函数)函数、类(数据成员、成员函数)程序总是从程序总是从main函数开始执行,而不论函数开始执行,而不论main函函数在整个程序中的位置如何。数在整个程序中的位置如何。语句以英文分号结束;书写格式自由语句以英文分号结束;书写格式自由l预处理命令预处理命令以以#开头的语句开头的语句l注释注释单行单行 /多行多行 /* */ (C语
4、言原有的注释方式)语言原有的注释方式)8C+字符集字符集l大小写的英文字母:大小写的英文字母:AZ,azl数字字符:数字字符:09l特殊字符:特殊字符:空格空格!#%&*_(下划线下划线)+=-/;.,:?( ) C+语言概述9词法记号词法记号l关键字关键字C+C+预定义的单词预定义的单词l标识符标识符程序员声明的单词,它命名程序正文中程序员声明的单词,它命名程序正文中的一些实体的一些实体l文字文字在程序中直接使用符号表示的数据在程序中直接使用符号表示的数据l操作符操作符用于实现各种运算的符号用于实现各种运算的符号l分隔符分隔符 () , : ; () , : ; 用于分隔各个词法记号或程序正
5、文用于分隔各个词法记号或程序正文l空白符空白符空格、制表符(空格、制表符(TABTAB键产生的字符)、键产生的字符)、换行符(换行符(EnterEnter键所产生的字符)和注释的总称键所产生的字符)和注释的总称C+语言概述10标识符的构成规则标识符的构成规则l以大写字母、小写字母或下划线以大写字母、小写字母或下划线_开始开始l可以由以大写字母、小写字母、下划线可以由以大写字母、小写字母、下划线_或数字或数字09组成。组成。l大写字母和小写字母代表不同的标识符。大写字母和小写字母代表不同的标识符。 大小写敏感大小写敏感C+语言概述11用户自定义标识符用户自定义标识符l合法的:合法的: apple
6、、_Student、_123、No1、max_numl不合法的:不合法的: 51job、max-num、abc$ $、 float、true l良好的标识符命名习惯良好的标识符命名习惯 1、Unix常用的命名法常用的命名法 my_age、num_of_student 2、驼峰式命名法、驼峰式命名法 myAge、numOfStudent 3、匈牙利标记法、匈牙利标记法 iMyCar、bIsRight122.2 基本数据类型基本数据类型l什么是数据类型?什么是数据类型? 数据是程序处理的对象,根据其本身的特数据是程序处理的对象,根据其本身的特点进行分类,形成不同的数据类型。点进行分类,形成不同的数
7、据类型。 例:数学中有自然数、整数、实数例:数学中有自然数、整数、实数基本数据类型基本数据类型 整型:整型:int 字符型:字符型:char 实型:单精度实型:单精度float、双精度、双精度double 逻辑型:逻辑型:bool13 基本类型基本类型 有序型有序型 字符型字符型(char)整型整型(int、 short、long) 布尔型布尔型(bool)浮点型浮点型单精度型单精度型(float)双精度型双精度型(double) 构造类型构造类型枚举型枚举型(enum)数组数组结构体结构体(struct)共用体共用体(union)类类(class) 指针类型指针类型14l修饰符修饰符 在在C
8、+中描述为了更加准确的描述数据中描述为了更加准确的描述数据类型,提供了类型,提供了4个关键字用来修饰基本的数个关键字用来修饰基本的数据类型:据类型: 1、长型、长型 long 2、短型、短型 short 3、有符号、有符号 signed 4、无符号、无符号 unsigned151、short:仅仅用用来来修修饰饰int,称称为为短短整整型型,占占2字字节节内存,也可直接简写为内存,也可直接简写为short;2、long: 仅仅修修饰饰int和和double,在在不不同同的的编编译译环环境境中使用中使用long修饰的数据所占内存不同。修饰的数据所占内存不同。 3、unsigned: 用用来来修修
9、饰饰char、short和和int,表表示示该该数数据类型为无符号数。据类型为无符号数。 4、signed: 用用来来修修饰饰char、short和和int,表表示示该该数数据类型为有符号数,为缺省设置。据类型为有符号数,为缺省设置。16数据类型数据类型 整型数据及取值范围整型数据及取值范围类型类型说明符说明符 位数位数数值范围数值范围短整short16-3276832767基本 int32 -231(231-1)长整long32-231(231-1)无符号unsigned short16065535 unsigned int320(232-1)unsigned long320(232-1)基
10、本数据类型和表达式17数据类型和内存空间l不同的数据类型,加上不同的修饰符,在内存中占用不同的数据类型,加上不同的修饰符,在内存中占用的空间不同,其所能表示的数值范围也不同。的空间不同,其所能表示的数值范围也不同。l内存单元的单位是字节,因此用来表示数据类型的长内存单元的单位是字节,因此用来表示数据类型的长度的单位也是字节。度的单位也是字节。l整型整型int的长度等于机器的字长:的长度等于机器的字长: 16位机:位机:int=2字节;字节; 32位机:位机:int=4字节。字节。llong int在在32位系统中一般为位系统中一般为4字节,但在字节,但在64位系统一位系统一般位般位 8字节。字
11、节。lfloat和和double型数据的有效位数分别为型数据的有效位数分别为6位、位、15位位18unsigned int与与signed int的比较的比较l指定为指定为signed的数据以补码形式存放,存储的数据以补码形式存放,存储单元中的最高位单元中的最高位(bit)用来表示数值的符号。用来表示数值的符号。指定为指定为unsigned的数据,全部二进制位都用的数据,全部二进制位都用来表示数值本身。例:短整型数据占两个来表示数值本身。例:短整型数据占两个字节字节19lfloat 4字节字节 精度:精度:3.41038 6位有效数字位有效数字ldouble 8字节字节 精度:精度:1.710
12、308 15位有效数字位有效数字llong double 8字节字节 精度:精度:1.710308 15位有效数字位有效数字数据类型数据类型实型数据实型数据实型常量:实型常量:1.23默认为默认为double型型1.23F或或1.23f为为 float型型1.23L为为long double型型20常量常量1. 在程序运行过程中,值不能被改变的量在程序运行过程中,值不能被改变的量称为常量。称为常量。2. 文字常量是指可直接使用的常量。文字常量是指可直接使用的常量。3. 文字常量分为整形、实型、字符型和字文字常量分为整形、实型、字符型和字符串型常量。符串型常量。 21常量常量l1整型常量整型常量
13、l(1)十进制整数,如:)十进制整数,如:789, -456 l(2)八进制整数,如:)八进制整数,如:0102,-026 l(3)十六进制整数,如:)十六进制整数,如:0x789, -0xABl(4)长整型与无符号型整数)长整型与无符号型整数l 长整型整数,如:长整型整数,如:12L, 0234L,-0xABll 无符号型整数,如:无符号型整数,如:12U, 0234U,0xABU22常量常量2实型常量实型常量 在内存中以浮点形式存放,均为十进在内存中以浮点形式存放,均为十进制数,无数制区分。制数,无数制区分。(1)小数形式:)小数形式: 1.65,1.,.123(2)指数形式:)指数形式:
14、1.23e5、1.23e-5、1e323数据类型数据类型 字符型数据字符型数据l字符常量字符常量单引号括起来的一个字符,单引号括起来的一个字符,如:如:a, D, ?, $l字符变量字符变量用来存放字符用来存放字符例:例:char c1,c2; c1=a; c2=A;l字符数据在内存中的存储形式字符数据在内存中的存储形式以以ASCII码存储,占码存储,占1字节,用字节,用7个二进制位个二进制位基本数据类型和表达式24l字符串常量字符串常量例例:CHINA a a所以:所以:char c; c=a;C H I N A 0a 0a 数据类型数据类型 字符型数据字符型数据基本数据类型和表达式25转义
15、字符转义字符la 响铃(喇叭声)响铃(喇叭声)ln 回车回车lt向右跳过一个水平制表符向右跳过一个水平制表符lnnn八进制数表示八进制数表示注意注意:每一位数字每一位数字n=、=、=、=、 2、=、!=关系表达式的结果类型为关系表达式的结果类型为bool,只能为,只能为true或或false注意:不要把注意:不要把 = 当成等号用!当成等号用!例:设例:设int a=0; 则则a=0为为true ,而,而a=0为为false35int a=1, b=2, c=3;cout(a=b)endl; cout(a!=b)endl; cout=b)endl; cout(ab)endl; coutba)3
16、&2|84 true例例3: 3&0&9 false例例2、3涉及涉及表达式短路表达式短路概念:概念:如果多个表达式用如果多个表达式用& 或或 | 连接,为了提高判断效率,只要能够连接,为了提高判断效率,只要能够确定表达式的结果,运行就不再继续了。确定表达式的结果,运行就不再继续了。例例4:闰年的判别:设年份为闰年的判别:设年份为y,当下式为真时为闰,当下式为真时为闰年:年: y%4=0 & y%100 !=0 | y%400=038增增1、减、减1运算运算运算符:运算符:+和和-分别表示将操作数增分别表示将操作数增1、减、减1 操作对象:整型或字符型变量操作对象:整型或字符型变量根据操作数的
17、位置不同,分为前置和后置两种根据操作数的位置不同,分为前置和后置两种u +i 先自身加先自身加1,再将加,再将加1的值作为表达式的值的值作为表达式的值ui+ 将将i作为表达式的值,然后自身再加作为表达式的值,然后自身再加1。u -i 先自身减先自身减1,再将加,再将加1的值作为表达式的值的值作为表达式的值ui- 将将i作为表达式的值,然后自身再减作为表达式的值,然后自身再减1。结合性:从右向左结合性:从右向左39#include using namespace std;void main()int i =1; couti=iendl; couti+:i+endl; couti=iendl; c
18、out +i:+iendl; couti=iendl; 1123340试一试试一试:运行结果是什么?运行结果是什么?#includeusing namespace std;int main()int i,j,x,y;i=j=1;x=(+i)+(+i);y=(j+)+(j+);coutijxyendl;coutx+x+endl;return 0;why?1 12 241赋值运算符和赋值表达式赋值运算符和赋值表达式赋值运算符:赋值运算符:就是就是= 例如:例如:float f=3.15左值:左值:可以合法的放在可以合法的放在=左边的操作数左边的操作数右值:右值:可以合法的放在可以合法的放在=右边的
19、操作数右边的操作数常量为右值,所以不能放在常量为右值,所以不能放在=左边被赋值;左边被赋值;变量既有左值又有右值,可以放在任何位置。变量既有左值又有右值,可以放在任何位置。左值是使用其地址,右值是使用其内容。左值是使用其地址,右值是使用其内容。42a=b=c=5 (赋值表达式值为(赋值表达式值为5,a,b,c值均为值均为5)a=5+(c=6) (表达式值为(表达式值为11,a值为值为11,c值为值为6)a=(b=4)+(c=6) 表达式值为表达式值为10,a b c值为值为10,4,6)思考:思考:1)a=3,b=2; f=a=b; g=a=b; (连续赋值)(连续赋值) f=? g=?2)执
20、行执行(a=3*5)=4*3后,后,a的值是多少?的值是多少? 写成写成 a=3*5=4*3 可以吗?可以吗?43赋值表达式赋值表达式uC+将赋值表达式作为表达式的一种,使赋值将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循表达式形式出现在其他语句(如输出语句、循环语句等)中。这是环语句等)中。这是C+语言灵活性的一种表语言灵活性的一种表现。现。u注意:用注意:用cout语句输出一个赋值表达式的值时,语句输出一个赋值表达式的值时,要注意运算符与要注意运算符与的优先级,保险的办法是的优先级
21、,保险的办法是将该赋值表达式用括号括起来。将该赋值表达式用括号括起来。例:如果写成例:如果写成couta=b;将编译出错!将编译出错!44复合赋值运算复合赋值运算在在C+中中可可以以将将算算术术运运算算符符和和赋赋值值运运算算符符结结合合在在一一起起进进行行运运算算,因因此此C+还还提提供供10种种复复合合的的赋赋值运算符值运算符+=,-=,*=,/= ,%=等。等。 好处:能产生质量较高的目标代码。好处:能产生质量较高的目标代码。例如:例如: x+=y 相当于相当于 x = x+y x-=y相当于相当于 x = x-y x*=y相当于相当于 x = x*y x/=y相当于相当于 x = x/
22、y x%=y相当于相当于 x = x%y注意:注意:a*=x+2等价于等价于a=a*(x+2)而非而非a=a*x+2赋值号右端的表达式相当于带括号的赋值号右端的表达式相当于带括号的45赋值运算符和赋值表达式赋值运算符和赋值表达式 复合的赋值运算符复合的赋值运算符有有1010种复合运算符:种复合运算符:+=, -=, *=, /=, %=,+=, -=, *=, /=, %=,=,&=,=,|= =,&=,=,|= 例例a+=3 a+=3 等价于等价于 a=a+3a=a+3x*=y+8 x*=y+8 等价于等价于 x=x*(y+8)x=x*(y+8)基本数据类型和表达式46逗号运算符与逗号表达式
23、逗号运算符与逗号表达式逗号运算符,又叫逗号运算符,又叫 顺序求值运算符顺序求值运算符 优先级最低。优先级最低。 格式:格式: 表达式表达式1,表达式,表达式2,表达式,表达式n; 依依次次计计算算表表达达式式1,表表达达式式2,表表达达式式n的的值,值,并将表达式并将表达式n的结果作为逗号表达式的结果的结果作为逗号表达式的结果例例1:逗号表达式:逗号表达式a=3*5, a*4的值?的值? 60例例2: int a, b, c, x, y; a=3, b=4, c=a+b; x=b+c, a; x值为值为11,表达式值为表达式值为3 y=(b+c, a) y和整个表达式值都为和整个表达式值都为3
24、47 x=(a=3,6*3) a值为值为3, x值为值为18 x=a=3,6*a a值为值为3, x值为值为3逗号表达式其实是把若干个表达式逗号表达式其实是把若干个表达式串联串联起来。起来。使用逗号表达式是想分别得到各个表达式的值,使用逗号表达式是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于值,逗号表达式最常用于for循环语句中。循环语句中。在用在用cout输出一个逗号表达式的值时,要将该逗输出一个逗号表达式的值时,要将该逗号表达式用括号括起来,如号表达式用括号括起来,如cout(3*5, 43-6*5, 67
25、/3)b?a:b;基本数据类型和表达式49sizeof 运算符运算符作用:获取不同数据类型或表达式所占据的字节长度作用:获取不同数据类型或表达式所占据的字节长度格式:格式:sizeof (sizeof (类型名类型名) ) 或或sizeof (sizeof (表达式表达式) )结果值:结果值:“类型名类型名”所指定的类型或所指定的类型或“表达式表达式”的结果类型所占的字节的结果类型所占的字节数。数。例:例:sizeof (char) sizeof(bool) sizeof(float) sizeof(int) 、 sizeof(short)、 sizeof(long)比较比较 sizeof(1
26、0+3.14)50位运算位运算按位与(按位与(& &)运算规则运算规则将两个运算量的每一个位进行逻辑与操作将两个运算量的每一个位进行逻辑与操作举例:举例: 计算计算 3 & 53 & 5 3 3: 0 0 0 0 0 0 1 10 0 0 0 0 0 1 1 5 5:(&) 0 0 0 0 0 1 0 1(&) 0 0 0 0 0 1 0 13 & 5: 0 0 0 0 0 0 0 13 & 5: 0 0 0 0 0 0 0 1基本数据类型和表达式51位运算位运算按位或(按位或(| |)运算规则运算规则将两个运算量的每一个位进行逻辑或操作将两个运算量的每一个位进行逻辑或操作举例:举例: 计算计
27、算 3 | 53 | 5 3 3: 0 0 0 0 0 0 1 10 0 0 0 0 0 1 1 5 5:(|) 0 0 0 0 0 1 0 1(|) 0 0 0 0 0 1 0 13 | 5: 0 0 0 0 0 1 1 13 | 5: 0 0 0 0 0 1 1 1基本数据类型和表达式52按位取反运算按位取反运算按按位位取取反反是是一一个个一一元元运运算算符符,它它的的作作用用是是将将两两个个操作数对应的每一位分别进行取反操作。操作数对应的每一位分别进行取反操作。 具体运算规则:具体运算规则:1=0,0=1。 例如:计算例如:计算5 5:0 0 0 0 0 1 0 1 5:1 1 1 1
28、1 0 1 0比较:比较:!0与与0的区别:的区别:cout!0endl;cout0 = = = != !=位运算:位运算:& |& |逻辑:逻辑:& | |三目三目:?:?:赋值运算赋值运算:= += *= .:= += *= .逗号运算逗号运算低高基本数据类型和表达式5455数据类型转换数据类型转换数据类型转换数据类型转换 当当表表达达式式中中出出现现多多种种数数据据类类型型的的混混合合运运算算时时,往往往往需需要要进进行行类类型型转转换换。表表达达式式中中的的类类型型转转换换分成两种:分成两种: 1、隐式类型转换(自动转换)、隐式类型转换(自动转换) 2、强制类型转换、强制类型转换56
29、混合运算时的类型转换混合运算时的类型转换不同类型数据进行混合运算时,不同类型数据进行混合运算时,C+C+编译器会自编译器会自动进行类型转换。动进行类型转换。为了避免不同的数据类型在运算中出现类型问为了避免不同的数据类型在运算中出现类型问题,应尽量使用同种类型数据。题,应尽量使用同种类型数据。可以采用强制类型转换:可以采用强制类型转换:例如:例如:float c;int a,b;c=float(a)/float(b); 或或 c=(float)a/(float)b; 57数据类型转换数据类型转换1、隐式类型转换、隐式类型转换 各各种种二二元元运运算算符符在在进进行行运运算算时时都都要要求求两两个
30、个操操作作数数的的数数据据类类型型一一致致。如如果果类类型型不不一一致致,则则系系统自动对数据进行转换(隐式类型转换)。统自动对数据进行转换(隐式类型转换)。 转换的基本原则:转换的基本原则: 将将精精度度较较低低、范范围围较较小小的的类类型型转转换换成成精精度度较较高、范围较大的类型。高、范围较大的类型。 charshortintlongfloatdouble58赋值过程中的类型转换赋值过程中的类型转换赋值运算符要求赋值运算符要求=左右两边的操作数数据类型相同,左右两边的操作数数据类型相同,如果类型不一致,则自动将右边的操作数类型向如果类型不一致,则自动将右边的操作数类型向着左边的操作数类型
31、转换。着左边的操作数类型转换。(1) 将浮点型数据(包括单、双精度)赋给整型变量时,将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。舍弃其小数部分。(2) 将整型数据赋给浮点型变量时,数值不变,但以指数将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。形式存储到变量中。(3) 将一个将一个double型数据赋给型数据赋给float变量时,要注意数值范变量时,要注意数值范围不能溢出。围不能溢出。(4)字符型数据赋给整型变量,将字符的字符型数据赋给整型变量,将字符的ASCII码赋给整码赋给整型变量。型变量。(5)逻辑运算符要求参与运算的操作数为逻辑运算符要求参与运算的操
32、作数为bool类型,类型,如果是其他类型,则系统自动将其转换成如果是其他类型,则系统自动将其转换成bool类类型,转换规则:型,转换规则:0为为false,非,非0为为true。59例例:将一个将一个int、short或或long型数据赋给一个型数据赋给一个char型变量,只将其低型变量,只将其低8位原封不动地送到位原封不动地送到char型型变量(发生截断)。例如变量(发生截断)。例如short int i=289;char c;c=i; /将一个将一个int型数据赋给一个型数据赋给一个char型变量型变量赋值情况如图。设赋值情况如图。设short int型数据占型数据占2个字节个字节60(6
33、) 将将signed(有符号有符号)型数据赋给长度相同的型数据赋给长度相同的unsigned(无符号无符号)型变量,将存储单元内容原型变量,将存储单元内容原样照搬(连原有的符号位也作为数值一起传送)样照搬(连原有的符号位也作为数值一起传送)。例例2.5 将有符号数据传送给无符号变量。将有符号数据传送给无符号变量。#include using namespace std;void main( ) unsigned short a; short int b= -1; a=b; couta=aendl; 61运行结果为运行结果为65535赋给赋给b的值是的值是- -1,怎么会得到,怎么会得到6553
34、5呢?呢?- -1的补码形式为的补码形式为1111111111111111(即全部即全部16个二个二进制位均为进制位均为1),将它传送给,将它传送给a,而,而a是无符号型是无符号型变量,变量,16个位全个位全1是十进制的是十进制的65535。如果。如果b为为正值,且在正值,且在032767之间,则赋值后数值不变。之间,则赋值后数值不变。62数据类型转换数据类型转换2、强制类型转换、强制类型转换 通过类型说明符和括号来实现的显式转换式:通过类型说明符和括号来实现的显式转换式: 数据类型名(表达式)数据类型名(表达式) 例:例: int i=97; coutchar(i)endl; float f
35、=3.75; coutint(f)endl;63数据类型转换数据类型转换例例1:计算球的体积:计算球的体积 v=4.0/3*pi*r*r*r与与 v=4/3*pi*r*r*r 的区别的区别例例2:1.0+3/2*4.0 是多少?是多少? 5.0例例3:float a=1.6, b=2.8; /隐式转换隐式转换doublefloat int c, d; c=(int)a + b; /强制转换强制转换floatint d=(int)(a+b); /强制转换强制转换floatint coutcendl; /3 coutdendl; /4 coutaendl; /1.664例:分数例:分数小数小数强制
36、类型转换强制类型转换#include using namespace std; int main( ) cout 1 / 3 = (float)1/3 endl; cout 1 / 3 = float(1)/3 endl; cout 1 / 3 = float(1/3) 0)t=a; if(a=b;)0)t=a;返回语句返回语句 return 表达式表达式空语句空语句 只有语句结束符只有语句结束符 ;的语句的语句控制语句的种类:控制语句的种类: 分支、循环、转向分支、循环、转向67复合语句复合语句将多个语句用一对大括号包围,便构成一将多个语句用一对大括号包围,便构成一个复合语句个复合语句例如例
37、如 sum=sum+i;sum=sum+i;i+;i+; 682.3 数据的输入输出数据的输入输出向标准输出设备(显示器)输出向标准输出设备(显示器)输出例:例:int x; coutx=xx;1)从从键键盘盘输输入入时时默默认认的的分分隔隔符符为为空空格格,也也可可以以用回车、用回车、TAB键。键。2)不许在不许在cin中加变量名以外的符号,例:逗号中加变量名以外的符号,例:逗号 69顺序结构顺序结构分支结构分支结构循环结构循环结构算法的基本控制结构算法的基本控制结构70选择结构选择结构ifelse语句语句 1、没有、没有else分支分支 2、双分支、双分支 3、多分支、多分支 4、if 语
38、句的嵌套语句的嵌套71if-else 语句语句1、没有、没有else分支分支 例:比较例:比较x和和y的大小,如果的大小,如果x大大,则输出则输出x的值的值if ( xy ) coutxy ) coutxendl;else coutyendl;73例例:输入一个输入一个4位整数年份,判断是否闰年?位整数年份,判断是否闰年?#include void main() int year; cinyear; if (year % 4=0 & year %100 != 0 | year % 400=0) cout闰年闰年endl; else cout不是闰年不是闰年endl;74例:判断输入字符是否为数
39、字例:判断输入字符是否为数字#include using namespace std;void main() char ch; cout输入字符输入字符:ch; if (ch= 0& ch= 9) cout是数字是数字endl; else cout不是数字不是数字endl;75if else 语句语句3、多分支、多分支if (表达式表达式1) 语句语句1; else if (表达式表达式2) 语句语句2; else if (表达式表达式3) 语句语句3; else 语句语句n;7677例:输出学生的成绩例:输出学生的成绩#include void main() int x; cinx; if(
40、x=90) cout优秀优秀=80) cout良好良好=60) cout合格合格endl; else cout不及格不及格endl;78if else 语句的嵌套语句的嵌套if (表达式表达式1) if (表达式表达式2) 语句语句1; else 语句语句2;else if (表达式表达式3) 语句语句3; else 语句语句4;7980例例:计算计算 -1 (x0)if(x=0)if(x!=0) y=1; else y=0;else y=-1;或者或者:y= (x=0)?(x!=0)?1:0:-1;81例:输出例:输出a,b,ca,b,c中较大的数中较大的数#include void mai
41、n() int a,b,c; cinabc; if (ab) if (ac) coutaendl; else coutcc) coutbendl; else coutcendl;coutb?(ac?a:c):(bc?b:c ) );82ifelse 语句语句注意:二义性注意:二义性int a= -2, b=1, c=2;if (ab) if (b0) c=0; else c+;cout c endl;编译系统将编译系统将elseelse与与if(b0)if(bx; switch(x/10) case 10: case 9:cout优秀优秀endl; break; case 8: cout良好良
42、好endl; break; case 7: case 6: cout合格合格endl; break; default: cout不及格不及格endl;88输入一个输入一个06的整数,转换成星期输出的整数,转换成星期输出#include void main() int day; cin day;switch (day) case 0: cout Sunday endl; break; case 1: cout Monday endl; break; case 2: cout Tuesday endl; break; case 3: cout Wednesday endl; break; case
43、 4: cout Thursday endl; break; case 5: cout Friday endl; break; case 6: cout Saturday endl; break; default: cout Day out of range endl; 89输入年、月,计算该月有多少天?输入年、月,计算该月有多少天?#includevoid main() int y,m,d; cinym; switch(m) case 1:case 3:case 5:case 7:case 8: case 10:case 12: d=31;break; case 4:case 6:case
44、9:case 11: d=30;break; case 2: d=(y%4=0&y%100!=0|y%400=0)?29:28; break; default:cout输入错!输入错!; coutday=dendl;90switch语句注意的问题语句注意的问题switch 后括号内的表达式只能是整型、字符型、枚举型等有序后括号内的表达式只能是整型、字符型、枚举型等有序类型类型case 后面是后面是常量常量表达式,不能含有变量名,各个表达式,不能含有变量名,各个case后面的表后面的表达式值要互不相同达式值要互不相同为了在匹配一种情形,执行结束后跳出为了在匹配一种情形,执行结束后跳出switch
45、语句,每个语句,每个case最后都要添加最后都要添加break语句语句在每个在每个case都有都有break的情况下,的情况下,case次序对执行结果没影响次序对执行结果没影响多个多个case可以共用一组执行语句可以共用一组执行语句没有匹配项,则执行没有匹配项,则执行default语句,无语句,无default,则退出,则退出case 后面的语句不用后面的语句不用 括起来括起来91循环语句循环语句u为什么要用循环语句为什么要用循环语句?u三种循环语句三种循环语句1、 while 语句语句2、 dowhile 语句语句3、 for 语句语句92while 循环语句循环语句包括包括3个部分:个部分
46、:1、循环控制条件:、循环控制条件: 判断循环操作是否进行的条件判断循环操作是否进行的条件;2、循环体:、循环体: 重复进行的操作重复进行的操作;3、循环控制变量:、循环控制变量: 记录循环体执行的次数,或控制循环的记录循环体执行的次数,或控制循环的结束条件。结束条件。93while 循环语句循环语句whilewhile循环语句格式循环语句格式while(表达式)表达式) 循环体语句循环体语句;执行顺序执行顺序先判断表达式的值,若为先判断表达式的值,若为 true true 时,执行语句。时,执行语句。94例例: :编程循环输出编程循环输出1-9这这9个数字?个数字? #include usi
47、ng namespace std; void main() int i=1; while (i=9) coutiendl; i+; cout循环结束循环结束endl; 运行结果运行结果:123456789循环结束循环结束95例例2-5:2-5:编程计算编程计算1+2+3+1+2+3+10+10的值的值 #include using namespace std; void main() int sum=0, i=1; while(i=10) sum+=i; i+; coutsumendl; 5596例:打印可视字符例:打印可视字符#includeusing namespace std;void
48、main() unsigned char ch=32; while(ch128) cout(int)chtcht; ch+; 97例:打印可视字符例:打印可视字符98例:编程计算例:编程计算 的值的值#include void main() int k=1, sum=0, n;cout0):;cinn; while(k0) coutsum/nendl;99do while 循环语句循环语句do.while循环语句循环语句 do 循环体语句循环体语句; while(表达式表达式) ;100例:编程计算例:编程计算 的值的值#include void main()int k=1,sum=0,n;c
49、out0):;cinn; while(k0) coutsum/nendl;do sum=sum+k*k; k+;while(k=n); 101while与与do while比较比较相同点:相同点:循环体内如果有多个语句,要用循环体内如果有多个语句,要用 括起来括起来;循环体内必须有更改循环变量的语句,防止出循环体内必须有更改循环变量的语句,防止出现死循环。现死循环。不同点:不同点:while循环先判断条件为循环先判断条件为true 时才执行循环体时才执行循环体;而而do while先执行,后判断,至少执行循环体先执行,后判断,至少执行循环体一次。一次。do while语句以分号语句以分号 ;结
50、束结束通常,通常,while比比do while使用更普遍使用更普遍102对比下列程序:对比下列程序: 程序程序1:#includeusing namespace std;int main() int i,sum(0); cini; while(i=10) sum+=i; i+; coutsum=sum endl;算法的基本控制结构程序程序2:#includeusing namespace std;int main() int i, sum(0); cini; do sum+=i; i+; while(i=10); coutsum=sum endl;103forfor循环语句循环语句for循环
51、语句循环语句 循环结构循环结构 1、表达式、表达式1 循环变量初始化循环变量初始化; 2、表达式、表达式2 循环控制条件循环控制条件; 3、表达式、表达式3 循环变量的变化循环变量的变化;for (表达式表达式1; 表达式表达式2; 表达式表达式3) 循环体循环体;104例例: :编程循环输出编程循环输出1-9这这9个数字?个数字? #include using namespace std; void main() for (int i=1;i10;i+) coutiendl; cout循环结束循环结束endl; 运行结果运行结果:123456789循环结束循环结束105例例:编程计算编程计算
52、1+2+3+.+10的值的值 #include using namespce std; void main() int sum=0; for (int i=1;i=10;i+) sum+=i; coutsumendl; 运行结果:运行结果:55106forfor循环语句使用说明循环语句使用说明1、可以省略可以省略 for(int i=1 ; i=9 ; i+) 循环体循环体; int i=1; for( ; i=9 ; i+) 循环体循环体;107forfor循环语句使用说明循环语句使用说明2、可以省略可以省略 for(int i=1; i=9; i+) 循环体循环体; for(int i=1
53、; ; i+) if (i=9) 循环体循环体; else break; /跳转语句,用来跳出循环跳转语句,用来跳出循环 108forfor循环语句使用说明循环语句使用说明3、可以省略可以省略 for(int i=1; i=9; i+) 循环体循环体; for(int i=1; i=9; ) 循环体循环体; i+; 109forfor循环语句使用说明循环语句使用说明3、 同时省略同时省略 for(int i=1; i=9; i+) 循环体循环体; int i=1; for(; i=9; ) 循环体循环体; i+; 110forfor循环语句使用说明循环语句使用说明5、极端情况,可实现无限循环、
54、极端情况,可实现无限循环 for( ; ; ) /分号不能省略分号不能省略 循环体循环体; 111三种循环语句的比较三种循环语句的比较1)for 最适合循环次数固定,循环规律非常明显最适合循环次数固定,循环规律非常明显程序。程序。2)while 最常使用的循环结构。最常使用的循环结构。3)do_while 最适合至少循环一次的循环结构。最适合至少循环一次的循环结构。112例例2-8: 输入一个整数,求出它的所有因子输入一个整数,求出它的所有因子#include using namespace std;int main() int n, k;cout n;cout 正整数正整数 n 的因子:的因
55、子:;for (k=1; k = n; k+)if (n % k = 0)cout k ; cout endl;113循环结构与选择结构相互嵌套循环结构与选择结构相互嵌套/求求100200之间不能被之间不能被3整除的数整除的数#includeusing namespace std;int main() int n;for(n=100; n=200; n+) if (n%3!=0) coutn;算法的基本控制结构114例例2-102-10读入一系列整数,统计出正整数个数读入一系列整数,统计出正整数个数i i和和负整数个数负整数个数j,j,读入读入0 0则结束。则结束。分析:分析:需要读入一系列整
56、数,但是整数个数不定,需要读入一系列整数,但是整数个数不定,要在每次读入之后进行判断,因此使用要在每次读入之后进行判断,因此使用whilewhile循环最为合适。循环控制条件应该是循环最为合适。循环控制条件应该是n!=0n!=0。由于要判断数的正负并分别进行统。由于要判断数的正负并分别进行统计,所以需要在循环内部嵌入选择结构。计,所以需要在循环内部嵌入选择结构。算法的基本控制结构115#includeusing namespace std;int main() int i=0,j=0,n; coutn; while( n!=0 ) if(n0) i+; if(nn ; cout正整数个数:正整
57、数个数:i 负整数个数:负整数个数:j 100 )break;sum += i; 118例例2 2:判断输出结果?:判断输出结果?#include void main() int sum=0; for (int i=1; i10; i+) if (i % 3 !=0) continue; sum+=i; coutsumendl;分分 析析i sum1 02 03 34 35 36 97 98 99 1810 跳出跳出119循环嵌套循环嵌套编程输出国际象棋棋盘编程输出国际象棋棋盘#include void main() for (int i=0;i8;i+) for (int j=0;j8;j+
58、) if (i+j)%2=0) cout; else cout ; coutn; 程序设计应用举例程序设计应用举例 例例: 百钱买百鸡:百钱买百鸡:“今有鸡翁一,值钱伍;鸡母一,值钱三;鸡今有鸡翁一,值钱伍;鸡母一,值钱三;鸡雏三,值钱一。百钱买鸡百只,问鸡翁、母、雏各几何?雏三,值钱一。百钱买鸡百只,问鸡翁、母、雏各几何?”分析:采用分析:采用x,y和和z分别表示鸡翁、母和雏,则有:分别表示鸡翁、母和雏,则有:x + y + z = 1005x + 3y + z / 3 = 100 for( x=0; x=20; x+) for(y=0; y=33;y+) z = 100-x-y; if(
59、x*5+y*3+z/3=100 & z%3=0 ) coutx“ “y“ “z m n;r = m % n;while( 0 != r )m = n;n = r;r = m % n;cout 最大公约数:最大公约数: n endl;1211222.5自定义数据类型自定义数据类型: typedef语句语句为一个已有的数据类型另外命名为一个已有的数据类型另外命名语法格式语法格式typedef typedef 已有类型名已有类型名 新类型名表新类型名表; ;例如例如typedef double area,volume;typedef double area,volume;typedef int na
60、tural;typedef int natural;natural i1,i2;natural i1,i2;area a;area a;volume v;volume v;自定义数据类型123类型别名类型别名typedef:为为已已有有的的数数据据类类型型定定义义一一个个同同义义词词,或或者者叫做别名。例如:叫做别名。例如: 关键字关键字 数据类型数据类型 别名赋值别名赋值 typedef unsigned int COUNT; COUNT student_num;注意:注意: typedef不能创造新的数据类型;不能创造新的数据类型;typedef不能直接定义变量;不能直接定义变量;typedef定义同义词时并不分配内存空间;定义同义词时并不分配内存空间;124本章小结本章小结主要内容主要内容C+语言概述、基本数据类型和表达式、语言概述、基本数据类型和表达式、数据的输入与输出、算法的基本控制结数据的输入与输出、算法的基本控制结构、自定义数据类型构、自定义数据类型达到的目标达到的目标掌握掌握C+语言的基本概念和基本语句,语言的基本概念和基本语句,能够编写简单的程序段。能够编写简单的程序段。