计算导论与程序设计:chap4 程序控制_第1页
计算导论与程序设计:chap4 程序控制_第2页
计算导论与程序设计:chap4 程序控制_第3页
计算导论与程序设计:chap4 程序控制_第4页
计算导论与程序设计:chap4 程序控制_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 1 第四章第四章 程序控制程序控制 2 提纲提纲 4.1 switch多路选择结构多路选择结构 4.2 循环的本质循环的本质 4.3 计数器控制的循环计数器控制的循环 4.4 for循环结构循环结构 4.5 break和和continue语句语句 4.6 逻辑运算符逻辑运算符 4.7 相等测试运算符相等测试运算符=和赋值运算符和赋值运算符= 4.8 结构化程序设计小结结构化程序设计小结 3 if语句有单分支和双分支结语句有单分支和双分支结 构构 考虑下面要求:变量考虑下面要求:变量day取取 值为值为06,0代表周日、代表周日、 16代表周一到周六。输代表周一到周六。输 出要求:当出要求:当

2、day0时输时输 出出“Sunday”,day=1时输时输 出出“Monday” 这种多分支的选择结构可这种多分支的选择结构可 以使用以使用switch语句来实现。语句来实现。 4.1 switch多路选择结构多路选择结构 if (day=0) printf(“Sundayn”); else if (day=1) printf(“Mondayn”); else if (day=2) printf(“Tuesdayn”); else if (day=3) printf(“Wednesdayn”); else if (day=4) printf(“Thursdayn”); else if (day

3、=5) printf(“Fridayn”); else if (day=6) printf(“Saturdayn”); else printf(“Invalid day!n”); 4 1switch语句的一般形式语句的一般形式 switch (整数值整数值表达式表达式) case 常量常量整数值整数值表达式表达式1:语句组;:语句组;break; case 常量常量整数值整数值表达式表达式2:语句组;:语句组;break; . case 常量常量整数值整数值表达式:语句组;表达式:语句组;break; default:语句组;语句组;break; 用某个用某个表达式表达式单独测试每一个可能的整

4、数值常单独测试每一个可能的整数值常 量,然后做出相应的动作。量,然后做出相应的动作。 4.1 switch多路选择结构多路选择结构 5 (1)计算)计算switch后面后面“表达式表达式”的值,当其的值,当其 与某个与某个case后面的后面的“常量表达式常量表达式”的值相同时,就的值相同时,就 执行该执行该case后面的语句(组);当执行到后面的语句(组);当执行到break语句语句 时,跳出时,跳出switch语句,转向执行语句,转向执行switch语句后的下一语句后的下一 条语句。条语句。 (2)如果没有任何一个)如果没有任何一个case后面的后面的“常量表常量表 达式达式”的值与的值与“

5、表达式表达式”的值匹配,则执行的值匹配,则执行default 后面的语句(组)。然后,再执行后面的语句(组)。然后,再执行switch语句后的语句后的 下一条语句。下一条语句。 执行过程执行过程 4.1 switch多路选择结构多路选择结构 6 main() int day; scanf(%d, switch (day) case 0: printf(Sundayn);break; case 1: printf(Mondayn); break; case 2: printf(Tuesdayn); break; case 3: printf(Wednesdayn); break; case 4:

6、 printf(Thursdayn);break; case 5: printf(Fridayn); break; case 6: printf(Saturdayn); break; default:printf(Invalid day! n); break; system(pause); return 0; 1. case后面的表达式必须是常量表达式,后面的表达式必须是常量表达式, 不能含有变量;而且应该是运算结果不能含有变量;而且应该是运算结果 为整型、字符型或枚举型(以后会讲)为整型、字符型或枚举型(以后会讲) 的常量表达式;同样,的常量表达式;同样,switch后面的表后面的表 达式结

7、果也应该是整型、字符型或枚达式结果也应该是整型、字符型或枚 举型的。举型的。注意:不能是浮点型。注意:不能是浮点型。 2. 每个每个case后面后面“常量表达式常量表达式”的值,必的值,必 须各不相同,须各不相同,否则会出现互相矛盾的否则会出现互相矛盾的 现象。现象。 3.每个每个case后可以有多条语句,不用大括后可以有多条语句,不用大括 号括起来。号括起来。 4. 各各case及及default子句的先后次序,不影子句的先后次序,不影 响程序执行结果。响程序执行结果。 5. default语句不是必须的,但最好提供语句不是必须的,但最好提供 一条一条default语句,用于集中处理例外语句

8、,用于集中处理例外 情况。且放在最后。情况。且放在最后。 6. break语句不是必须的,可以根据实际语句不是必须的,可以根据实际 需要决定是否要有需要决定是否要有break语句。语句。 7. 如果不是判断表达式等于某个值,而是如果不是判断表达式等于某个值,而是 判断表达式的值在某个范围内,如:判断表达式的值在某个范围内,如: if (i = -10 else printf(D); 则不能用则不能用switch语句。语句。 7 4.1 switch多路选择结构多路选择结构 main() int day; scanf(%d, switch(day) case 0: printf(Sundayn)

9、; case 1: printf(Mondayn); case 2: printf(Tuesdayn); case 3: printf(Wednesdayn); case 4: printf(Thursdayn); case 5: printf(Fridayn); case 6: printf(Saturdayn); default:printf(Invalid day! n); system(pause); 当输入为当输入为6时,输出为:时,输出为: Saturday Invalid day! 当输入为当输入为7时,输出为:时,输出为: Invalid day! case后面的常量表达式仅起

10、语句后面的常量表达式仅起语句 标号作用,并不进行条件判断标号作用,并不进行条件判断。 系统一旦找到入口标号,就从此系统一旦找到入口标号,就从此 标号开始执行,不再进行标号判标号开始执行,不再进行标号判 断,直到遇到断,直到遇到break,或者到,或者到 switch语句结束。语句结束。 不要忘记不要忘记breakbreak,除,除 非你真的是不需要。非你真的是不需要。 8 4.1 switch多路选择结构多路选择结构 多个多个case子句,可子句,可 共用同一语句共用同一语句 (组),表示这些(组),表示这些 条件有同一组操作。条件有同一组操作。 当当grade为为A或或 者者a时,均输时,均

11、输 出出85-100 switch (grade) case A: case a: printf(“85-100n”); break; case B: case b: printf(“70-84n”); break; case C: case c: printf(“60-69n”); break; case D: case d: printf(“below 60n”); break; default: printf(“input error!n”); 9 while(grade=getchar()!= EOF) /*CTRL+Z组合键表示组合键表示EOF,值为,值为1*/ switch(gra

12、de) caseA:casea:/*成绩为成绩为A或或a*/ aCount+; break; caseB:caseb:/*成绩为成绩为B或或b*/ bCount+; break; caseC:casec:/*成绩为成绩为C或或c*/ cCount+; break; casen:case :/*输入为空格或换行输入为空格或换行*/ break; default: printf(Incorrect letter grade entered.); printf(Entere a new grade.n); /*switch*/ /*while*/ 节选教材节选教材86页例题页例题 1.getchar

13、():从键盘读从键盘读 取一个字符;取一个字符; 2. caseA:casea: aCount+; break; 相当于相当于 caseA: casea: aCount+; break; 10 4.1 switch多路选择结构多路选择结构 练习:输入年、月、日,输出该年截至该日共练习:输入年、月、日,输出该年截至该日共 有多少天。要求在判断某个月有多少天时用有多少天。要求在判断某个月有多少天时用 switch语句。语句。 闰年的判断条件:闰年的判断条件: year能被能被4整除但不能被整除但不能被100整除;或者整除;或者 能被能被 400整除。整除。 11 #include #include

14、 main() int year, month,day; int yearDays,i; printf(input year-month-day:n); scanf(%d-%d-%d, 12 yearDays = 0; for(i = 1; i = month-1; i+) /求第求第i月的天数月的天数 switch(i) case 1:case 3: case 5:case 7: case 8:case 10: case 12: yearDays += 31; break; case 4:case 6: case 9:case 11: yearDays += 30; break; case

15、2: if (year % 4 =0 else yearDays += 28; break; default: printf(invalid month!); printf(the days are %d,yearDays + day); system(pause); 13 提纲提纲 4.1 switch多路选择结构多路选择结构 4.2 循环的本质循环的本质 4.3 计数器控制的循环计数器控制的循环 4.4 for循环结构循环结构 4.5 break和和continue语句语句 (链接链接) 4.6 逻辑运算符逻辑运算符 4.7 相等测试运算符相等测试运算符=和赋值运算符和赋值运算符= 4.8

16、 结构化程序设计小结结构化程序设计小结 14 循环:在循环条件为真时反复执行的一组指令。循环:在循环条件为真时反复执行的一组指令。 循环分成两类:循环分成两类: 1)计数器控制的循环;)计数器控制的循环; 2)标记控制的循环;)标记控制的循环; 4.2 循环的本质循环的本质 15 4.2 循环的本质循环的本质 一、计数器控制的循环一、计数器控制的循环 事先知道循环次数,又称事先知道循环次数,又称“定数循环定数循环”; 用控制变量来计算循环的次数。控制变量的值用控制变量来计算循环的次数。控制变量的值 在每次执行完一组循环指令后递增(或递减)。在每次执行完一组循环指令后递增(或递减)。 当控制变量

17、的值达到预定的循环次数时,循环当控制变量的值达到预定的循环次数时,循环 终止并继续执行循环结构后面的语句。终止并继续执行循环结构后面的语句。 16 4.2 循环的本质循环的本质 二、标记控制的循环二、标记控制的循环 事先不知道循环次数,又称事先不知道循环次数,又称“不定数循环不定数循环”; 标记值表示获取数据的结束。标记值是在所有标记值表示获取数据的结束。标记值是在所有 合法数据项都提供给程序后键入的值,必须不合法数据项都提供给程序后键入的值,必须不 同于正常的数据项。同于正常的数据项。 17 提纲提纲 4.1 switch多路选择结构多路选择结构 4.2 循环的本质循环的本质 4.3 计数器

18、控制的循环计数器控制的循环 4.4 for循环结构循环结构 4.5 break和和continue语句语句 4.6 逻辑运算符逻辑运算符 4.7 相等测试运算符相等测试运算符=和赋值运算符和赋值运算符= 4.8 结构化程序设计小结结构化程序设计小结 18 计数控制的循环要有:计数控制的循环要有: 1)控制变量(即循环计数器);)控制变量(即循环计数器); 2)控制变量的初始值;)控制变量的初始值; 3)在每次循环中用来修改控制变量的递增(或)在每次循环中用来修改控制变量的递增(或 递减)值;递减)值; 4)测试控制变量最终值的条件。)测试控制变量最终值的条件。 4.3 计数器控制的循环计数器控

19、制的循环 19 提纲提纲 4.1 switch多路选择结构多路选择结构 4.2 循环的本质循环的本质 4.3 计数器控制的循环计数器控制的循环 4.4 for循环结构循环结构 4.5 break和和continue语句语句 4.6 逻辑运算符逻辑运算符 4.7 相等测试运算符相等测试运算符=和赋值运算符和赋值运算符= 4.8 结构化程序设计小结结构化程序设计小结 20 /*使用使用for结构的计数器控制的循环结构的计数器控制的循环*/ main()() int counter; /*控制变量的初始化、循环条件、循环计数器控制变量的初始化、循环条件、循环计数器*/ /*值的递增(递减)都包含在值

20、的递增(递减)都包含在for结构的头部结构的头部*/ for (counter = 1; counter=10; counter+) printf(“%dn”,counter) 4.4 for循环结构循环结构 for循环指定了计数循环所需的每一方面的内容循环指定了计数循环所需的每一方面的内容 21 for语句的一般格式:语句的一般格式: 表达式表达式1:初始化循环控制变量:初始化循环控制变量 表达式表达式2:循环条件:循环条件 表达式表达式3:递增(递减)循环控制变量的值:递增(递减)循环控制变量的值 4.4 for循环结构循环结构 for (表达式表达式1; 表达式表达式2; 表达式表达式3

21、) 表达式表达式1; while(表达式表达式2) 语句组语句组; 表达式表达式3; 大多数情况下大多数情况下for语句等价于以下的语句等价于以下的while语句:语句: 例外情况:当例外情况:当for循循 环体中有环体中有continue语语 句时,以后会讲句时,以后会讲 22 4.4 for循环结构循环结构 表达式表达式1和表达式和表达式3可以是用逗号格开的表达式列表。可以是用逗号格开的表达式列表。 如:如:for(i=1,j=50;i=20;i+, j-= 5 ) 在在for结构中,表达式结构中,表达式1和表达式和表达式3部分应该只放置包含部分应该只放置包含 控制变量的表达式。对其他变量

22、的操作应该放在循环控制变量的表达式。对其他变量的操作应该放在循环 体之前或循环体之后;体之前或循环体之后; 循环控制条件要防止循环控制条件要防止“丢一错误丢一错误”,尽量用,尽量用=) 而不用而不用)。如。如counter=10,而不写成而不写成counter=3),), 即从第即从第3个数开始,每个数等于前个数开始,每个数等于前2个数之和。个数之和。 Fibonacci数列示例:数列示例: 1, 1, 2, 3, 5, 8, 13, 21, 34 24 【算法【算法1】每循环一次,求得一个值】每循环一次,求得一个值 求求Fibonacci数列数列 25 求求Fibonacci数列数列 【算法

23、【算法2】每循环一次,求得两个值。且比】每循环一次,求得两个值。且比 算法一少用了一个变量。算法一少用了一个变量。 26 #include main() long int f1, f2; /*定义并初始化数列的头定义并初始化数列的头2个数个数*/ int i;/*定义并初始化循环控制变量定义并初始化循环控制变量i*/ f1=1,f2=1; for(i=1 ; i=20; i+ ) /*1组组2个,个,20组组40个数个数*/ printf(“%15ld%15ld”, f1, f2); /*输出当前的输出当前的2个数个数*/ if(i%2=0) printf(“n”); /*输出输出2次(次(4

24、个数个数),换行换行*/ f1 += f2; /*计算下计算下2个数个数*/ f2 += f1; 求求Fibonacci数列数列-【算法【算法2】 的源程序的源程序 27 提纲提纲 4.1 switch多路选择结构多路选择结构 4.2 循环的本质循环的本质 4.3 计数器控制的循环计数器控制的循环 4.4 for循环结构循环结构 4.5 break和和continue语句语句 4.6 逻辑运算符逻辑运算符 4.7 相等测试运算符相等测试运算符=和赋值运算符和赋值运算符= 4.8 结构化程序设计小结结构化程序设计小结 28 为了使循环控制更加灵活,语言提供了为了使循环控制更加灵活,语言提供了br

25、eak语句和语句和 continue语句。语句。 1一般格式:一般格式: break; continue; 2功能功能 (1)break:强行结束循环,转向执行循环语句的下一强行结束循环,转向执行循环语句的下一 条语句。用于条语句。用于switch语句和循环语句中。语句和循环语句中。 (2)continue:用于循环语句中。对于用于循环语句中。对于for循环,跳过循环,跳过 循环体其余语句,转向循环变量增量表达式循环体其余语句,转向循环变量增量表达式3的计算;对于的计算;对于 while和和do-while循环,跳过循环体其余语句,转向继续循循环,跳过循环体其余语句,转向继续循 环条件的判定。

26、环条件的判定。 4.5 break和和continue语句语句 29 #include #include main() int x=1; while ( x=10 ) if (x =5) break; printf(%d,x); x+; printf(nBroke out of loop at x = = %d,x); system(pause); return 0; 输出结果:输出结果: 1 2 3 4 Broke out of loop at x = = 5 在在while结构中使用结构中使用break语句语句 4.5 break和和continue语句语句 强行结束循环,强行结束循环,

27、转向执行循环语转向执行循环语 句的下一条语句句的下一条语句 30 #include #include main() int x; for(x=1; x=10; x+ ) if (x =5) break; printf(%d,x); printf(nBroke out of loop at x = = %d,x); system(pause); return 0; 输出结果:输出结果: 1 2 3 4 Broke out of loop at x = = 5 在在for结构中使用结构中使用break语句语句 4.5 break和和continue语句语句 31 #include #include

28、 main() int x=1; while ( x=10 ) if (x =5) continue; printf(%d,x); x+; printf(nBroke out of loop at x = = %d,x); system(pause); return 0; 在在while结构中使用结构中使用continue语句语句 4.5 break和和continue语句语句 死循环!死循环! 跳过循环体其余跳过循环体其余 语句,转向继续语句,转向继续 循环条件的判定循环条件的判定 32 4.5 break和和continue语句语句 #include #include main() int

29、 x; for(x=1; x=10; x+ ) if (x =5) continue; printf(“%d”,x); system(pause); return 0; 输出结果:输出结果: 1 2 3 4 6 7 8 9 10 在在for结构中使用结构中使用continue语句语句 跳过循环体其余语跳过循环体其余语 句,转向循环变量句,转向循环变量 增量表达式增量表达式3 3的计算的计算 33 当当for循环中有循环中有continue语句时语句时 main() int x; for(x=1; x=10; x+ ) if (x =5) continue; printf(“%d”,x); system(pause); main() int x; x=1; while(x=10) if (x=5) x+; /*不可少不可少*/ continue; printf(%d,i); x+; 34 4.5 break和和continue语句语句 #include #include main() int x ,y; for(x =1; x = 2; x+ ) for(y = 1; y

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论