




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第4章章 c+表达式表达式与基本程序控制结构与基本程序控制结构 运算符是指用来表示在数据上执行运算符是指用来表示在数据上执行某些特定操作的符号。某些特定操作的符号。参与运算的数据称为操作数。参与运算的数据称为操作数。根据参与运算的操作数的个数是一根据参与运算的操作数的个数是一个、两个或三个,运算符分为一元运算个、两个或三个,运算符分为一元运算符、二元运算符和三元运算符。符、二元运算符和三元运算符。4 41 1 运算符与表达式运算符与表达式表达式表达式是指用运算符和圆括号把常量、变量用运算符和圆括号把常量、变量和函数等运算成分连接起来的有意义的式子和函数等运算成分连接起来的有意义的式子。单个常
2、量、变量和函数也都可以看成是一个单个常量、变量和函数也都可以看成是一个表达式。表达式。表达式经过计算后都会得到一个确定的表达式经过计算后都会得到一个确定的值,这个值就是表达式的值。值,这个值就是表达式的值。每个表达式都具有唯一确定的值每个表达式都具有唯一确定的值和唯一确定的类型。和唯一确定的类型。例如:例如:98.56 , (98.56) , x , 876-78 ,3*(2.5+5) ,sqrt(9)都是合法的表达式。都是合法的表达式。它们的值分别为它们的值分别为98.56、98.56、x的值、的值、794、22.5、3。其中其中sqrt()是一个计算平方根的标准函是一个计算平方根的标准函数
3、,包含在库数,包含在库math.h中。中。 c+中有一种表达式称为逗号表达式,指中有一种表达式称为逗号表达式,指的是用逗号分隔开的表达式序列。的是用逗号分隔开的表达式序列。比如:比如: x = 3 , y = 8 , x + y逗号表达式的求值次序是从左到右依次计逗号表达式的求值次序是从左到右依次计算各表达式的值,以最后一个表达式的值和类算各表达式的值,以最后一个表达式的值和类型作为整个逗号表达式的值和类型。比如上面型作为整个逗号表达式的值和类型。比如上面这个逗号表达式的值为这个逗号表达式的值为11。4.1.1 算术表达式算术表达式用算术运算符(用算术运算符(+、-、*、/)连接起)连接起来的
4、表达式就称为算术表达式。来的表达式就称为算术表达式。 用除法运算符进行整数除法与进行浮点用除法运算符进行整数除法与进行浮点数除法是不同的。用于整数时,表示整除,如数除法是不同的。用于整数时,表示整除,如果有余数,余数部分就被省略了。如:果有余数,余数部分就被省略了。如: 5 / 2 得到的结果为得到的结果为 2(int型)型) 8 / 5 得到的结果为得到的结果为 1(int型)型)而用于浮点数时:而用于浮点数时:5.0 / 2.0 得到的结果为得到的结果为 2.5(float型)型)8.0 / 5.0 得到的结果为得到的结果为 1.6(float型)型)取余运算符用于取整数除法的余数,是对取
5、余运算符用于取整数除法的余数,是对除法运算符的一个必要的补充。除法运算符的一个必要的补充。 如:如: 5 2 得到的结果为得到的结果为 1 8 5 得到的结果为得到的结果为 3在在/和和%运算中,注意除数不能为零,否则将运算中,注意除数不能为零,否则将产生溢出错误。产生溢出错误。在做在做+和和*运算特别是运算特别是*运算时,很容易出现运算时,很容易出现运算结果产生溢出的情况,要注意将数据定义为足运算结果产生溢出的情况,要注意将数据定义为足够长度的类型。够长度的类型。当赋值运算符的两边出现相同的变量时,当赋值运算符的两边出现相同的变量时,c+还提供了一个简洁的表达方式:还提供了一个简洁的表达方式
6、:x=。其中的。其中的x可可为为 +、-、*、/、等。、等。假定假定e1和和e2是表达式,那么是表达式,那么 e1 = (e1) x (e2)就等价于就等价于 e1 x = e2例如,表达式例如,表达式a=a+9可以用可以用+=写成如下形式:写成如下形式: a+=9 注意围绕注意围绕 e2 的括号。例如,表达式的括号。例如,表达式y-=x+1实际上是实际上是y=y-(x+1) + + 和和 - - 运算符运算符增增1运算符和减运算符和减1运算符分别对其操作数进行运算符分别对其操作数进行加加1和减和减1操作,它们既可以用在变量前,作为操作,它们既可以用在变量前,作为前缀运算符,例如:前缀运算符,
7、例如: int m, n; +m; -n; 又可用在变量后,作为后缀运算符。例如又可用在变量后,作为后缀运算符。例如: m+; n-; 前缀增(减)前缀增(减)1运算符在使用变量的值之运算符在使用变量的值之前就使变量值加前就使变量值加1或减或减1,后缀增(减)后缀增(减)1运算符在使用变量的值之运算符在使用变量的值之后才使变量值加后才使变量值加1或减或减1。例如,若例如,若n的值为的值为5,那么,那么 x = n +;先将先将n的值的值5赋给赋给x,即,即x的值为的值为5,再将,再将 n的值的值加加1,则,则n为为6。而。而 x = + n;先将先将n的值加的值加1得到得到6,再将,再将n的值
8、赋给的值赋给x,则,则x和和n的值都为的值都为6。4.1.2 关系运算关系运算c+的关系运算符都是二元的,有的关系运算符都是二元的,有、=、= 4 的值为的值为1,而表达式而表达式 67 != 67 的值为的值为0。例例4.1 关于关系运算的一个例子关于关系运算的一个例子# include void main()double x=45.3, y; couty; cout(xy)10) & (x20)例如,当例如,当 x=14 时,上述表达式为时,上述表达式为1; 当当 x=8 时,上述表达式为时,上述表达式为0。| 运算符左右两边的表达式只要有一个为运算符左右两边的表达式只要有一个为真(非真(
9、非0),整个表达式的值就为),整个表达式的值就为1。只有当其。只有当其左右两边的表达式都为左右两边的表达式都为0时,整个表达式的值时,整个表达式的值才为才为0。例如:例如: (x20)当当x=36时,此表达式的值为时,此表达式的值为1; x=8时,此表时,此表达式的值也为达式的值也为1; x=16 时,此表达式的值为时,此表达式的值为0。! 运算符用在表达式的前面,表示取表达运算符用在表达式的前面,表示取表达式的非。若表达式值为式的非。若表达式值为0,取非以后为,取非以后为1; 若表若表达式值为非达式值为非0,取非以后为,取非以后为0。例如:例如: !(32)的值为的值为0,因为,因为(32)
10、的值为的值为1。c+在计算逻辑表达式的值时,若从左到右计在计算逻辑表达式的值时,若从左到右计算到某处就已经能够确定表达式的值,则不再继续算到某处就已经能够确定表达式的值,则不再继续后面部分的求值。后面部分的求值。例如,形如例如,形如 e1 & e2 的表达式,的表达式,在已求得表在已求得表达式达式e1的值为的值为0的情况下,已经能够确定整个逻辑表的情况下,已经能够确定整个逻辑表达式的值为达式的值为0,c+就不再对就不再对e2求值。求值。同样,形如同样,形如 e1 | e2 的表达式,的表达式,如果已经求得如果已经求得e1的值为的值为1,则整个表达式的值一定为,则整个表达式的值一定为1,c+就不
11、再就不再对对e2求值。求值。4.1.4 条件运算符条件运算符条件运算符条件运算符?:是是c+中唯一的一个三元运算符。中唯一的一个三元运算符。条件运算符的表达式具有如下形式条件运算符的表达式具有如下形式: e1 ? e2 : e3 其中其中e1、e2、e3皆为表达式。皆为表达式。条件运算执行的操作是:先计算表达式条件运算执行的操作是:先计算表达式e1的值,如果为非的值,如果为非0,则计算表达式,则计算表达式 e2 的的值并把它作为整个表达式的值值并把它作为整个表达式的值; 而如果而如果e1的值为的值为0,则计算表达式,则计算表达式e3的值,并用它的值,并用它作为整个表达式的值。作为整个表达式的值
12、。例如,表达式例如,表达式 ( x y ) ? 10 : 20 如果如果x的值大于的值大于y的值,则表达式的值为的值,则表达式的值为10,否则表,否则表达式的值为达式的值为20。又如,在语句又如,在语句 max = (ab) ? a : b; 中,中,max将赋值将赋值为为a、b中较大的数。中较大的数。4.1.5 位运算位运算在计算机存储器中,所有的数据都是以二进在计算机存储器中,所有的数据都是以二进制形式存放的。位运算是对二进制机器数进行的制形式存放的。位运算是对二进制机器数进行的操作。操作。c+中的位运算符有中的位运算符有6种种: 按优先级顺序为按优先级顺序为 ,(),&,|。位运算符的运
13、算对象只能是整型(位运算符的运算对象只能是整型(int)或)或字符型(字符型(char),位运算不改变运算对象本身。),位运算不改变运算对象本身。例例4.2 下面的小程序将输出下面的小程序将输出: fedcba98 #includevoid main() int a=0 x01234567; /0000 0001 0010 0011 0100 0101 0110 0111 couthexaendl; /1111 1110 1101 1100 1011 1010 1001 1000(1)(按位求反):(按位求反):一元运算,将运算对象各位求反。一元运算,将运算对象各位求反。(2)(右移)(右移)
14、: 二元运算,左操作数为移位对象,右操作数为二元运算,左操作数为移位对象,右操作数为移动位数移动位数n。返回移位对象整体向右移动。返回移位对象整体向右移动n位,高位,高位用位用n个个0填补以后的值。(当移位对象为负数的填补以后的值。(当移位对象为负数的补码时,高位用补码时,高位用n个个1填补。)填补。)例例4.3 左移和右移左移和右移#includevoid main() int a=0 x0089abcd; /0000 0000 1000 1001 1010 1011 1100 1101int b=-100; /1111 1111 1111 1111 1111 1111 1001 1100
15、couthex(a5)endl; /0001 0001 0011 0101 0111 1001 1010 0000couthex5)endl;/0000 0000 0000 0100 0100 1101 0101 1110 couthex(b5)endl;/1111 1111 1111 1111 1111 0011 1000 0000couthex5)endl;/1111 1111 1111 1111 1111 1111 1111 1100程序输出:程序输出:113579a044d5efffff380fffffffc(4)&(按位与):(按位与):二元运算,将两个运算对象按位相与。二元运算,将
16、两个运算对象按位相与。(5)(按位异或):(按位异或):二元运算,将两个运算对象按位异或。二元运算,将两个运算对象按位异或。(6)|(按位或):(按位或):二元运算,将两个运算对象按位相或。二元运算,将两个运算对象按位相或。例例4.4 按位逻辑运算按位逻辑运算 #includevoid main() int a=0 x01234567; /0000 0001 0010 0011 0100 0101 0110 0111int b=0 x89abcdef; /1000 1001 1010 1011 1100 1101 1110 1111 couthex(a&b)endl; /0000 0001 0
17、010 0011 0100 0101 0110 0111couthex(ab)endl; /1000 1000 1000 1000 1000 1000 1000 1000 couthex(a|b)endl; /1000 1001 1010 1011 1100 1101 1110 1111程序输出:程序输出:12345678888888889abcdef4.1.6 求字节数运算求字节数运算求字节数运算为一元运算,用求字节数运算为一元运算,用sizeof()运算符。其功能是求变量或表达式的数据运算符。其功能是求变量或表达式的数据类型在内存中占据的字节数。待求字节数类型在内存中占据的字节数。待求字节
18、数的表达式放在括号中,返回值为整型。的表达式放在括号中,返回值为整型。例例4.5 求字节数运算求字节数运算#include#includevoid main() short a=-32768;float b=9.0;double c=5.7;char d=k;coutsizeof(a) ;coutsizeof(b) ;coutsizeof(c) ;coutsizeof(d) ;coutsizeof(sqrt(b) ;coutsizeof(a+b+c) . (类成员访问)(类成员访问) (数组下标)(数组下标) : : (作用域访问)(作用域访问) 左左2*(取内容取内容) &(取地址取地址)
19、! + - + (一元一元) - (一元一元) sizeof右右3*(乘乘) / %左左4+ -左左5左左6 =左左7= !=左左8& 左左9| 左左10? : (条件运算)(条件运算)右右11= += -= *= /= %= = &= |= = 右右12, 左左c+各运算符的优先级总的来说有如下规律各运算符的优先级总的来说有如下规律(按优先级从高到低):(按优先级从高到低):一元一元二元二元(除了赋值除了赋值)三元三元赋值赋值逗号逗号; 二元运算符又有如下规律:二元运算符又有如下规律:算术算术关系关系逻辑逻辑; 逻辑运算符有如下规律:逻辑运算符有如下规律:! & |。例例4.7 根据表达式的
20、求值次序,求下列表达式的值根据表达式的求值次序,求下列表达式的值假定有假定有 int x = 5 , y = 4 , z = 6 ; char a = s , b = t ; int w = 2 ; 表达式表达式 表达式的值表达式的值 z / y z / 4.0 z / y % z / x a b | y z a != b & z 6 a = b & ! ( y z ) a = b & ! y z x + 1 +z x + 1 z+ -x -y | x + y z & z % 3 = 0 ( x+ , x += y , x + y )11.50100110114按照结构化程序设计的思想,程序按
21、照结构化程序设计的思想,程序由三种单入口、单出口的基本结构组成:由三种单入口、单出口的基本结构组成:顺序结构、选择结构、循环结构。顺序结构、选择结构、循环结构。c+的控制流就是由这三种基本结的控制流就是由这三种基本结构组成的。构组成的。4 42 2 基本程序控制结构基本程序控制结构4.2.1 顺序结构顺序结构 顺序结构的程序是指程序中的所有语句都是顺序结构的程序是指程序中的所有语句都是按书写顺序逐一执行的,只有顺序结构的程序功能按书写顺序逐一执行的,只有顺序结构的程序功能有限。有限。例例4.8 计算球的体积计算球的体积 。已知球的体积公式为:已知球的体积公式为: 4r3v= 3# includ
22、e void main() float radius , bulk; cout radius ; / 输入半径输入半径 bulk = (4*3.1416* radius* radius* radius)/3; cout bulk = bulk endl; / 输出体积输出体积 选择结构也称为分支结构,用于处选择结构也称为分支结构,用于处理在程序中出现了两条或更多执行路径理在程序中出现了两条或更多执行路径可供选择的情况。选择结构可以用选择可供选择的情况。选择结构可以用选择语句来实现。选择语句包括语句来实现。选择语句包括 if 语句和语句和 switch 语句。语句。4.2.2 选择结构选择结构1
23、if 语句语句if语句有两种格式。语句有两种格式。格式格式1:if (条件表达式条件表达式) 语句语句功能:对条件表达式求值,若值为真(非功能:对条件表达式求值,若值为真(非0)则执行它后面的语句则执行它后面的语句; 否则什么也不做。否则什么也不做。若需要执行的语句用单条语句写不下,就应若需要执行的语句用单条语句写不下,就应该用复合语句。该用复合语句。例例4.9 将两个数排序输出将两个数排序输出 # include void main( ) float a , b , ls; cout ab; if (ab) ls = a; a = b; b = ls; couta b endl ; 格式格式
24、2: if (条件表达式条件表达式) 语句语句1 else 语句语句2功能:对条件表达式求值,若值为真功能:对条件表达式求值,若值为真(非(非0)执行其后的语句)执行其后的语句1; 否则执行否则执行else后后面的语句面的语句2。即根据条件表达式是否为真分。即根据条件表达式是否为真分别作不同的处理。别作不同的处理。4.10 用用if else 对例对例4.9的改写的改写 # include void main() loat a , b , ls; coutab; if (ab) couta bendl; else cout b a endl; 上一节介绍的条件运算符也可以用上一节介绍的条件运算
25、符也可以用if语语句来改写。例如:句来改写。例如: y = (ab)? a:b; 可以用下面这个可以用下面这个 if-else 语句来代替:语句来代替: if (ab) y=a; else y=b; if语句中也可以包含语句中也可以包含if 语句,这就语句,这就构成了构成了if语句的嵌套。语句的嵌套。例例4.11 某单位向职工按月发放医疗补贴的具体方案如某单位向职工按月发放医疗补贴的具体方案如下:职工工龄在下:职工工龄在10年以下的,医疗补贴为其基本工资的年以下的,医疗补贴为其基本工资的10% ; 工龄在工龄在10年以上年以上20年以下的,医疗补贴为其基本年以下的,医疗补贴为其基本工资的工资的
26、15% ; 工龄在工龄在20年以上年以上30年以下的,医疗补贴为年以下的,医疗补贴为其基本工资的其基本工资的20% ; 工龄在工龄在30年以上的,医疗补贴为其年以上的,医疗补贴为其基本工资的基本工资的30%。输入某职工的工龄及基本工资,计算。输入某职工的工龄及基本工资,计算他每月应得的医疗补贴。他每月应得的医疗补贴。# include void main() int seniority; double wages, allowance; coutseniority; /输入工龄输入工龄 coutwages; /输入基本工资输入基本工资 if (seniority10 ) /工龄在工龄在10年以
27、下年以下 allowance=wages*0.1; else if( seniority 20 ) /工龄在工龄在10年年19年年 allowance=wages*0.15; else if ( seniority 30 ) /工龄在工龄在20年年29年年 allowance=wages*0.2; else allowance=wages*0.3; /工龄在工龄在30年以上年以上 coutthe allowance is : allowanceendl ; #includevoid main() int seniority ; double wages , allowance ; cout s
28、eniority ; cout wages ; if ( seniority= 10 & seniority= 20 & seniority = 30 ) allowance = wages * 0.3 ; cout the allowance is : allowance 2 ) if ( x 4 ) x = 35 ; else x = 78 ; cout x 2 ) if ( x 2 ) if ( x 4 ) x = 35 ; else x = 78 ; 当当x2或者或者x4时,这两种理解会导致两个不同的答案。这时,这两种理解会导致两个不同的答案。这就叫产生了二义性。就叫产生了二义性。在绝
29、大多数的语言中,包括在绝大多数的语言中,包括c+,都,都采用最近匹配原则来解决这个问题。所谓采用最近匹配原则来解决这个问题。所谓最近匹配原则就是每个最近匹配原则就是每个else必须与离它最近必须与离它最近的那个没有匹配的的那个没有匹配的if相匹配。按照这个原相匹配。按照这个原则,上面的第二种理解是正确的。则,上面的第二种理解是正确的。2switch语句语句switch语句又称为开关语句,其格式如下:语句又称为开关语句,其格式如下: switch (表达式表达式) case 常量表达式常量表达式1 : 语句序列语句序列1 break ; case 常量表达式常量表达式2 : 语句序列语句序列2
30、break ; case 常量表达式常量表达式n : 语句序列语句序列n break ; default : 语句序列语句序列n+1 break ; 其中,其中,switch后后面的表达式的类型必须面的表达式的类型必须与与case后面的常量表达后面的常量表达式的类型一致,而且只式的类型一致,而且只能是字符型、整型或枚能是字符型、整型或枚举型。举型。case后面的表达后面的表达式必须是常量表达式,式必须是常量表达式,不能含有变量不能含有变量; 同一个同一个switch中不能有重复的中不能有重复的常量表达式。常量表达式。switch语句执行的过程如下:语句执行的过程如下:先计算先计算switch后
31、面的表达式的值,然后拿它后面的表达式的值,然后拿它与各与各case后面的常量表达式比较。当遇到某个后面的常量表达式比较。当遇到某个case中的常量表达式的值与它相等时,就执行那个中的常量表达式的值与它相等时,就执行那个case后的语句序列,直到遇到后的语句序列,直到遇到break语句或语句或switch语句结束时的右花括号语句结束时的右花括号“”时,才退出时,才退出switch语句,语句,去执行去执行switch后面的语句。如果没有一个常量表后面的语句。如果没有一个常量表达式与达式与switch后面的表达式值相等,就执行后面的表达式值相等,就执行default后的语句序列。后的语句序列。例例4
32、.13 根据一个代表星期的根据一个代表星期的0到到6之间的整数,在屏幕上打印之间的整数,在屏幕上打印出它代表的是星期几出它代表的是星期几# include void main( ) int w ; /代表星期的整数代表星期的整数 cout w ; switch ( w ) case 0 : cout its sunday . endl ; break ; case 1 : cout its monday . endl ; break ; case 2 : cout its tuesday . endl ; break ; case 3 : cout its wednesday . endl ;
33、 break ; case 4 : cout its thursday . endl ; break ; case 5 : cout its friday . endl ; break ; case 6 : cout its saturday . endl ; break ; default : cout invalid data ! endl ; default语句是可以缺省的。如果没有语句是可以缺省的。如果没有default,则当所有匹配都失败时,将不执行,则当所有匹配都失败时,将不执行任何操作。建议使用任何操作。建议使用default语句,除非语句,除非case语句已覆盖了所有的可能,以
34、避免由于没有语句已覆盖了所有的可能,以避免由于没有考虑到某种情况而给程序带来的不利影响。考虑到某种情况而给程序带来的不利影响。break语句在语句在switch中的作用是跳出整个中的作用是跳出整个switch语句。语句。在例在例4.13中,每个中,每个case的语句序列后都有一的语句序列后都有一个个break语句(最后一个语句(最后一个case或或default语句的语句的break可以省略)。在这种情况下,各个可以省略)。在这种情况下,各个case的排列次序的排列次序可以是任意,不会影响程序的结果。如果没有可以是任意,不会影响程序的结果。如果没有break,则执行完该,则执行完该case语句
35、的语句序列后,还将语句的语句序列后,还将接下去执行后面的接下去执行后面的case的语句序列。在这种情况下的语句序列。在这种情况下,各个,各个case排列的次序不同,就可能产生不同的结排列的次序不同,就可能产生不同的结果。果。例如,把例例如,把例4.7中的中的break都删去(假定输入的都删去(假定输入的w的值的值为为4),会出现什么情况呢?),会出现什么情况呢?如果是在有如果是在有break的情况下,的情况下,w应与第五个应与第五个case中的中的常量常量4匹配,从而在屏幕上打印出:匹配,从而在屏幕上打印出: its thursday .之后就该跳出之后就该跳出switch,到达程序末尾并结束
36、。然而,到达程序末尾并结束。然而,没有了,没有了break的的switch语句得到的结果与原来大不一样。语句得到的结果与原来大不一样。在打印了上面的字符串后,并不会跳出在打印了上面的字符串后,并不会跳出switch,而是依次,而是依次进入后面的进入后面的case及及default语句去执行打印语句,于是得到语句去执行打印语句,于是得到的输出为:的输出为: its thursday . its friday . its saturday . invalid data ! 如果多个如果多个case后的语句序列是相同的,即要做的后的语句序列是相同的,即要做的操作是一样的,可采用下面的格式以避免重复书
37、写:操作是一样的,可采用下面的格式以避免重复书写:switch (表达式表达式) case 常量表达式常量表达式1 : case 常量表达式常量表达式2 : case 常量表达式常量表达式i : 语句序列语句序列 break ; case 常量表达式常量表达式n : 语句序列语句序列n break ; default : 语句序列语句序列n+1 例例4.14 用用switch语句来实现例语句来实现例4.11 include void main( ) int seniority , s ; double wages , allowance ; cout seniority ; cout wage
38、s ; s = seniority / 10 ; /得到工龄的十位数字 switch ( s ) case 0 : /工龄在10年以下 allowance = wages * 0.1 ; break ; case 1 : / 工龄在10年19年 allowance = wages * 0.15 ; break ; case 2 : / 工龄在20年29年 allowance = wages * 0.2 ; break ; case 3 : / 工龄在30年49年 case 4 : allowance = wages * 0.3 ; break ; default : allowance = 0
39、 ; cout the allowance is : allowance endl ; c+中有三种循环语句可用来实现循中有三种循环语句可用来实现循环结构:环结构:while语句、语句、do_while语句和语句和for语语句句。这些语句各有各的特点,而且常常可。这些语句各有各的特点,而且常常可以互相替代。在编程时应根据题意选择最以互相替代。在编程时应根据题意选择最适合的循环语句。适合的循环语句。4.2.3 循环结构循环结构1while语句语句while语句的格式为:语句的格式为: while(条件表达式)(条件表达式) 语句语句 /循环体循环体while语句的执行过程:语句的执行过程:(1)
40、对条件表达式求值,如果值为真(非)对条件表达式求值,如果值为真(非0)则执)则执行步骤(行步骤(2),否则转步骤(),否则转步骤(4); (2)执行循环体中的语句)执行循环体中的语句; (3)返回()返回(1); (4)终止循环,去执行)终止循环,去执行while语句的下一语句。语句的下一语句。例例4.15 计算计算100之内的奇数之和之内的奇数之和#includevoid main() int n=1; int sum=0; while ( n 100 ) sum +=n; / 累加累加 n +=2; / 修改为下一个奇数修改为下一个奇数 cout the sum is : sum endl
41、 ;# include void main() int seniority ; double wages , allowance ; cout seniority ; /输入第一个人的工龄输入第一个人的工龄 while ( seniority != 0 ) /若工龄不为若工龄不为0则进入循环则进入循环 coutwages ; if(seniority=10 & seniority=20 & seniority=30) allowance = wages * 0.3 ; cout the allowance is : allowance endl ; cout seniority ; /输入下一
42、人的工龄输入下一人的工龄 例例4.16 将例将例4.12改进为可以重复改进为可以重复计算不同的人的医疗补贴(以计算不同的人的医疗补贴(以输入的工龄为输入的工龄为0作为结束条件)作为结束条件)break语句不仅可用于跳出语句不仅可用于跳出switch语句,语句,还可用于跳出循环(包括三种循环语句)。还可用于跳出循环(包括三种循环语句)。但它只能跳出它所在的循环语句或但它只能跳出它所在的循环语句或switch语句,不能跳出外层的循环语句或语句,不能跳出外层的循环语句或switch语句(如果有的话)。若想跳出外层语句,语句(如果有的话)。若想跳出外层语句,还要在外层中使用还要在外层中使用break。
43、例例4.17 从键盘接收从键盘接收10个整数,求它们的平方根。若遇个整数,求它们的平方根。若遇到负数就终止程序到负数就终止程序# include # include void main() int i=1, num; double root ; while ( i = 10 ) cout num ; if ( num 0 ) /若若num是负数则退出循环是负数则退出循环 break ; root = sqrt(num) ; cout root endl ; i+ ; 例例4.18 对例对例4.17的改进:遇到负数则忽略并重新输入下一个数据的改进:遇到负数则忽略并重新输入下一个数据# inclu
44、de# includevoid main() int i = 1, num; double root; while ( i = 10 ) cout num; if (num0) /若num是负数则回到循环开始处 cout valid number!; continue; root = sqrt(num); cout root endl; i+; continue语句用在循环体中,语句用在循环体中,它的作用是忽略循环体中位它的作用是忽略循环体中位于它之后的语句,重新回到于它之后的语句,重新回到条件表达式的判断。条件表达式的判断。2do_while循环语句循环语句while语句的特点是先判断条件,
45、再确定是语句的特点是先判断条件,再确定是否执行循环体,也即否执行循环体,也即“先判断,后执行先判断,后执行”;如果如果第一次对条件表达式求值时它就为假,则循环体第一次对条件表达式求值时它就为假,则循环体就一次也不被执行。就一次也不被执行。do_while语句是先执行一次循环体之后,语句是先执行一次循环体之后,再根据条件表达式的值确定是否还要继续执行循再根据条件表达式的值确定是否还要继续执行循环体,也即环体,也即“先执行,后判断先执行,后判断”,循环体至少会,循环体至少会被执行一次。被执行一次。do_while语句的格式为:语句的格式为: do 语句语句 /循环体循环体 while (条件表达式
46、条件表达式) ; 其中的条件表达式及语句的规定同其中的条件表达式及语句的规定同while 语句一样。注意语句一样。注意条件表达式后面的分号不能少,因为整个条件表达式后面的分号不能少,因为整个do_while语句实语句实际上相当于一条语句。际上相当于一条语句。do_while语句的执行过程如下:语句的执行过程如下:(1)执行一遍循环体)执行一遍循环体; (2) 对条件表达式求值,若为真(非对条件表达式求值,若为真(非0)则转步骤)则转步骤(1),否则转步骤(),否则转步骤(3); (3)终止循环,去执行)终止循环,去执行do_while语句的下一语句。语句的下一语句。 do_while和和whi
47、le语句在大多数情况下都可以相互替代语句在大多数情况下都可以相互替代(除非是有可能循环体一次也不被执行的情况)。例如,例(除非是有可能循环体一次也不被执行的情况)。例如,例4.9中是利用中是利用while语句来计算语句来计算100之内的奇数之和的,可以将之内的奇数之和的,可以将它改写为用它改写为用do_while语句来求和。语句来求和。例例4.19 用用do_while语句来改写例语句来改写例4.15 # include void main() int n=1; int sum=0; do sum+=n; / 累加累加 n +=2; / 修改为下一个奇数修改为下一个奇数 while(n100
48、); cout the sum is : sum endl ; 例例4.20 根据下面的公式求根据下面的公式求的值。计算到最后一项的绝对值小于的值。计算到最后一项的绝对值小于10-6时时停止:停止: /4 = 1 1/3 + 1/5 1/7 + # include void main( ) double pi=0, x=1; int s=1 ; do pi = pi + s / x ; x += 2 ; s = - s ; while(1/x =1e-6); pi=pi*4; coutpi= piendl; 3for语句语句当循环次数确定的时候,用当循环次数确定的时候,用 for 语句更为直语
49、句更为直观。观。for语句的格式如下:语句的格式如下:for ( 表达式表达式1; 表达式表达式2; 表达式表达式3 ) 语句语句 /循环体循环体其中的表达式其中的表达式1通常用于对循环控制变量进通常用于对循环控制变量进行初始化行初始化; 表达式表达式2用于表示循环是否结束的条件用于表示循环是否结束的条件; 表达式表达式3用于对循环控制变量作修改。用于对循环控制变量作修改。for语句执行的过程如下:语句执行的过程如下:(1)对表达式)对表达式1求值求值; (2) 对表达式对表达式2求值,若其值为真则执行步骤(求值,若其值为真则执行步骤(3),),否则转步骤(否则转步骤(6); (3) 执行循环体执行循环体; (4)对表达式)对表达式3求值求值; (5)转步骤()转步骤(2); (6)结束循环,去执行)结束循环,去执行for语句的下一语句。语句的下一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆市名校联盟2024-2025学年高二下学期4月第一次联合考试化学试卷(含答案)
- 2025赠与合同公证样本
- 2025仓储保管合同范本3
- 浙江国企招聘2025宁波大通开发有限公司招聘6人笔试参考题库附带答案详解
- 2025年股票交易授权代理合同
- 2025年初级银行从业资格之初级个人贷款通关考试题库带答案解析
- 2025年初级经济师之初级建筑与房地产经济综合检测试卷B卷含答案
- 2025年上海嘉定区初三二模语文试题及答案
- 沈阳高中生物试卷及答案
- 商丘市7年级试卷及答案
- 沪教版小学六年级数学应用题150道及答案
- 北师大版四年级下册小数乘法竖式计算练习100题及答案
- 2024年湖南省长沙市中考地理试卷真题(含答案解析)
- 《中国健康成年人身体活动能量消耗参考值》(编制说明)
- 食堂大米采购招标文件
- 医疗美容诊所规章制度上墙
- CJT 216-2013 给水排水用软密封闸阀
- CJ-T250-2018建筑排水用高密度聚乙烯(HDPE)管材及管件
- 大学遗传学期末考试题库和答案
- 2024注册信息安全专业人员CISP培训讲义全集
- DB64 1996-2024 燃煤电厂大气污染物排放标准
评论
0/150
提交评论