




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、l条件语句l循环语句第第3章章 基本控制语句和函数基本控制语句和函数完整的完整的if语句有如下的一般形式:语句有如下的一般形式: if ( 表达式表达式) 语句语句1; else 语句语句2; if (xy) coutxendl; else couty=60 开 始 n=90 n=80 Y N N Y Y N 结 束 输 出 C B A 789101112131415161718192021void main()int n;coutn; if (n=60) if (n=90) coutThe degree is A=80) coutThe degree is Bendl; else coutT
2、he degree is Cendl; else coutThe degree is D=”或“=-EPSINON) & (x=EPSINON)l 其中EPSINON是允许的误差(即精度)。 指针变量与零值比较指针变量与零值比较 l【规则3-1-4】应当将指针变量用“=”或“!=”与NULL比较。 l指针变量的零值是“空”(记为NULL)。尽管NULL的值与0相同,但是两者意义不同。l假设指针变量的名字为p,它与零值比较的标准if语句如下:lif (p = NULL)l / p与NULL显式比较,强调p是指针变量lif (p != NULL)l不要写成lif (p = 0) / 容易让人误解p
3、是整型变量lif (p != 0) 对对if语句的补充说明语句的补充说明 l有时候我们可能会看到 if (NULL = p) 这样古怪的格式。l 不是程序写错了,是程序员为了防止将 if (p = NULL) 误写成 if (p = NULL),而有意把p和NULL颠倒。l 编译器认为 if (p = NULL) 是合法的,但是会指出 if (NULL = p)是错误的,因为NULL不能被赋值。 3.2 switchcase判断式判断式 在有的问题中,要进行多次判断选择,在有的问题中,要进行多次判断选择,C+中使用中使用switch语句,其语法形式如下:语句,其语法形式如下:switch (表
4、达式表达式)case 常量表达式常量表达式1:语句块语句块1break;case 常量表达式常量表达式2:语句块语句块2break;case 常量表达式常量表达式n:语句块语句块nbreak;default: 语句块语句块n+1表达式可以是任意一个合法的表达式可以是任意一个合法的C+表达式,但其值只能是字符型或者整型。表达式,但其值只能是字符型或者整型。 常量表达式是由常量组成的表达式,其值也只能是字符型常常量表达式是由常量组成的表达式,其值也只能是字符型常量或者整型常量,各常量表达式的值不可以重复(相等)。量或者整型常量,各常量表达式的值不可以重复(相等)。符号符号 表示其中的内容可选,语句
5、块是可选的,它可以由一表示其中的内容可选,语句块是可选的,它可以由一条语句或一个复合语句组成。条语句或一个复合语句组成。 break语句、语句、default语句也是可选的。语句也是可选的。 switch (表达式表达式)case 常量表达式常量表达式1:语句块语句块1break;case 常量表达式常量表达式2:语句块语句块2break;case 常量表达式常量表达式n:语句块语句块nbreak;default: 语句块语句块n+1switch语句的执行过程:语句的执行过程:先求出表达式的值先求出表达式的值;将表达式的值依次与将表达式的值依次与case后面的常量表达式值相比较后面的常量表达式
6、值相比较,若与某一常量表达式的值相等,则转去执行该,若与某一常量表达式的值相等,则转去执行该case语句语句后边的语句序列,直到遇到后边的语句序列,直到遇到break语句或语句或switch语句的右语句的右花括号为止。花括号为止。若表达式的值与若表达式的值与case语句后的任一常量表达式的值都语句后的任一常量表达式的值都不相等,如果有不相等,如果有default语句,则执行其后边的语句序列。语句,则执行其后边的语句序列。如果没有如果没有default语句,则什么也不执行。语句,则什么也不执行。注意注意:在使用在使用switch-case语句时经常容易丢失必要的语句时经常容易丢失必要的break
7、语句,语句,这样程序会产生结果的错误,此类错误往往不易发觉。这样程序会产生结果的错误,此类错误往往不易发觉。 【例【例3-2】将百分制的成绩按的等级分输出的】将百分制的成绩按的等级分输出的switch-case语句的实现。语句的实现。7891011121314151617181920212223242526void main()int n;coutn; switch(n/10) case 9: case 10: coutThe degree is Aendl; break; case 8: coutThe degree is Bendl; break; case 7: case 6: cout
8、The degree is Cendl; break; default: coutThe degree is Dendl;if语句和语句和switch语句的语句的比较:比较: if语句和语句和switch语句语句都可以用来处理程序中都可以用来处理程序中的分支问题,在许多场的分支问题,在许多场合可以互相替代。合可以互相替代。差别表现为:差别表现为: (1)if语句常用于分语句常用于分支较少的场合支较少的场合;而而switch语句常用于分支较多的语句常用于分支较多的场合。场合。 (2)if语句可以用来语句可以用来判断一个值是否落在一判断一个值是否落在一个范围内;而个范围内;而switch语语句则要
9、求其相应分支的句则要求其相应分支的常量必须与某一值严格常量必须与某一值严格相等。相等。 例如,设例如,设i为一整为一整型变量,若型变量,若i的值的值为为1、3、7或或11时时,就执某一语句,就执某一语句,相应的,相应的if语句和语句和switch语句各是什语句各是什么?么?3.3 for循环循环 在程序中,常常需要重复地执行某些操作。在程序中,常常需要重复地执行某些操作。C+提供了提供了3种循环语句:种循环语句:for语句、语句、while语句和语句和do-whi1e语句。在循环语语句。在循环语句中,重复执行的操作叫做循环体。循环体可以是单条语句句中,重复执行的操作叫做循环体。循环体可以是单条
10、语句、块语句甚至是空语句。、块语句甚至是空语句。上述格式可理解为:上述格式可理解为:for( 循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值) 循环体循环体 for是关键字;是关键字;表达式表达式1、表达式、表达式2和表达式和表达式3是任意表达式;是任意表达式;语句为循环体,它可以是一条语句,也可以是复合语句,还可以是空语句。语句为循环体,它可以是一条语句,也可以是复合语句,还可以是空语句。3.3.1 for语句语句其中其中for语句的语法形式如下:语句的语法形式如下:for(表达式表达式1;表达式;表达式2;表达式;表达式3) 语句语句for循环语句执行过程图循
11、环语句执行过程图 : for(表达式 1;表达式 2;表达式 3) false 或 0 语句 1; true 或非 0 语句 2; 循环体 . 语句 n 循环体外语句; for 循环语句执行过程 表达式 1 语句 表达式 3 表达式 2 循环体外 【例【例3-3】百钱百鸡问题:鸡翁一、值钱五;鸡婆一、值】百钱百鸡问题:鸡翁一、值钱五;鸡婆一、值钱三;鸡雏三,值钱一;百钱买百鸡。问鸡翁、鸡婆、鸡钱三;鸡雏三,值钱一;百钱买百鸡。问鸡翁、鸡婆、鸡雏各几?雏各几? 分析:鸡翁最多有分析:鸡翁最多有20个,鸡婆最多有个,鸡婆最多有33个,鸡雏最多有个,鸡雏最多有100个。采用穷举的方式,考察每一种可能
12、,是否满足百钱个。采用穷举的方式,考察每一种可能,是否满足百钱买百鸡。买百鸡。3.3.2 用用for语句实现嵌套循环语句实现嵌套循环7891011121314151617void main() const int cock=20, hen=33, chick=100; /分别表示鸡翁、鸡婆、鸡雏的最大数int i,j,k;for(i=0; i=cock; i+) for(j=0; j=hen; j+) for(k=0; k=chick; k+) if (i+j+k)=100&(5*i+3*j+k/3)=100&k%3=0) /鸡的个数与钱数必须为整数cout鸡翁、鸡婆、鸡雏各有: titjtk
13、endl; 运行结果运行结果鸡翁、鸡婆、鸡雏各有鸡翁、鸡婆、鸡雏各有: 0 25 75鸡翁、鸡婆、鸡雏各有鸡翁、鸡婆、鸡雏各有: 4 18 78鸡翁、鸡婆、鸡雏各有鸡翁、鸡婆、鸡雏各有: 8 11 81鸡翁、鸡婆、鸡雏各有鸡翁、鸡婆、鸡雏各有: 12 4 84 保证保证k/3是整数是整数 循环优化是指通过减循环优化是指通过减少循环的层次以及每少循环的层次以及每层循环体执行的次数层循环体执行的次数,以节省系统资源,以节省系统资源(时间时间),提高程序运,提高程序运行效率。百钱百鸡问行效率。百钱百鸡问题如何进行循环优化题如何进行循环优化 ?3.4 while循环循环 在在C+中中while循环有两
14、种循环控制语句实现,循环有两种循环控制语句实现,while语句语句和和dowhile语句。语句。while是关键字;是关键字;条件表达式给出是否执行循环体的判断条件,常用关系表达条件表达式给出是否执行循环体的判断条件,常用关系表达式或逻辑表达式作为条件表达式,也可以用其他表达式或常式或逻辑表达式作为条件表达式,也可以用其他表达式或常量量; 语句是语句是while循环的循环体,它可以是一条语句,也可以是循环的循环体,它可以是一条语句,也可以是复合语句。复合语句。 3.4.1 while语句语句while语句的语法形式如下:语句的语法形式如下: while(条件表达式条件表达式) 语句语句3.4.
15、2 dowhile语句语句do和和while是关键字;是关键字;条件表达式给出是否执行循环体的判断条件,常用关系表达条件表达式给出是否执行循环体的判断条件,常用关系表达式或逻辑表达式作为条件表达式,也可以用其他表达式或常式或逻辑表达式作为条件表达式,也可以用其他表达式或常量量; dowhile语句先执行循环体后判断条件表达式的值,若表语句先执行循环体后判断条件表达式的值,若表达式的值为真则反复地执行循环体,直到表达式的值为假才达式的值为真则反复地执行循环体,直到表达式的值为假才退出循环。因此,退出循环。因此,dowhile语句也被叫做语句也被叫做“直到直到”型循环型循环。 在一定条件下,在一定
16、条件下,while循环循环可能一次都不执行,而可能一次都不执行,而dowhile循环在任何条件循环在任何条件下都至少要执行一次。这一下都至少要执行一次。这一点正是在程序设计中决定选点正是在程序设计中决定选择择while语句还是语句还是do.while语句的重要依据。语句的重要依据。 dowhile语句的语法形式如下:语句的语法形式如下: do 语句语句 while(条件表达式条件表达式);while与与dowhile语句的执语句的执行流程行流程: 注意注意:while(条件表达式条件表达式) 后面后面分号不可省去。分号不可省去。 【例【例3-4】分别用】分别用while循环循环dowhile循
17、环求循环求1+3+5+7+99注意注意:应用应用while语句与语句与dowhile语句时应注意,一般来说语句时应注意,一般来说在循环体中,应该包含改变循环条件表达式的语句,否在循环体中,应该包含改变循环条件表达式的语句,否则便会造成无限循环(死循环)。则便会造成无限循环(死循环)。378910111213141516/* 用while 语句计算1+3+.+99 */void main()int i=1,sum=0; while (i100) sum=sum+i; +i,+i; coutsum= sumendl;/* 用do.while 计算1+3+.+99 */void main()int
18、i=1,sum=0; do sum=sum+i; +i,+i; while(i100); coutsum= sumn; if(n=1) break; for(i=2;i=n ? coutn是素数n : coutnn; if(n=1) break; for(i=2;i=n ? coutn是素数n : coutnn; if(n=1) break; for(i=2;i=n ? coutn是素数n : coutn不是素数n; 加上标号goon:goto goon;运行结果运行结果与原程序相与原程序相同同注意注意:尽管尽管C+语言中提供了语言中提供了goto语句,但它语句,但它决不鼓励程序员使用决不鼓励
19、程序员使用goto语句。在早期的语句。在早期的程序设计方法中,程序设计方法中,goto语句是控制程序流语句是控制程序流程的基本手段之一而在现代程序设计方法程的基本手段之一而在现代程序设计方法中,它则变成了程序设计高手的技巧之一中,它则变成了程序设计高手的技巧之一。 循环语句的效率问题循环语句的效率问题 lC+/C循环语句中,for语句使用频率最高,while语句其次,do语句很少用。提高循环体效率的基本办法是降低循环体的复杂性。 l【建议3-2-1】在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。 示例示例 (a) 低效率:长循环在最外
20、层低效率:长循环在最外层 示例示例 (b) 高效率:长循环在最内层高效率:长循环在最内层 for (row=0; row100; row+)for ( col=0; col5; col+ ) sum = sum + arowcol; for (col=0; col5; col+ )for (row=0; row100; row+) sum = sum + arowcol; 示例示例 (a)示例示例 (b)l【建议3-2-2】如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。l如果N非常大,最好采用示例 (d)的写法,可以提高效率。如果N非常小,两者效率差别并不明显,采用示例 (c)的写法比较好,因为程序更加简洁。 表表 (c) 效率低但程序简洁效率低但程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮行业员工加班费与调休合同
- 红薯种植承包协议书范本
- 油气输送管道配套厂房土建施工及安全监测合同
- 标准化反担保合同样本跨境并购项目风险控制协议
- 茶楼茶文化体验馆合作合同
- 绿植产品摄影保密协议及电商合作合同
- 车辆购置担保与贷款发放协议
- 画廊场地租赁及水电费艺术品交易服务合同
- 【课件】重力教学课件2024-2025学年初中物理人教版(2024)八年级下册
- 综合实践活动案例设计与实施
- 精装修施工的监理细则
- 医疗质量和医疗安全培训
- 口腔解剖生理学-第八章(动脉)
- 装修施工项目投标书模板
- 人体发育学练习题(选择题)
- 梅尼埃综合征
- DB11-T 1446-2017 回弹法、超声回弹综合法检测泵送混凝土抗压强度技术规程
- Unit8Birthdays(Storytime)(教学设计)译林版英语五年级下册
- 合肥市45中2023-2024学年英语七下期末经典模拟试题含答案
- 2024年度中学阶段汉字听写大会竞赛练习题库
- 网络安全攻防演练护网工作报告
评论
0/150
提交评论