计算机CC语言编程程序控制.ppt

上传人:max****ui 文档编号:2867003 上传时间:2019-12-02 格式:PPT 页数:46 大小:387.50KB
返回 下载 相关 举报
计算机CC语言编程程序控制.ppt_第1页
第1页 / 共46页
计算机CC语言编程程序控制.ppt_第2页
第2页 / 共46页
计算机CC语言编程程序控制.ppt_第3页
第3页 / 共46页
点击查看更多>>
资源描述
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代表周一到周六。输出要求:当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=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.1 switch多路选择结构,5,(1)计算switch后面“表达式”的值,当其与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);当执行到break语句时,跳出switch语句,转向执行switch语句后的下一条语句。 (2)如果没有任何一个case后面的“常量表达式”的值与“表达式”的值匹配,则执行default 后面的语句(组)。然后,再执行switch语句后的下一条语句。,4.1 switch多路选择结构,6,main() int day; scanf(“%d“, return 0; ,case后面的表达式必须是常量表达式,不能含有变量;而且应该是运算结果为整型、字符型或枚举型(以后会讲)的常量表达式;同样,switch后面的表达式结果也应该是整型、字符型或枚举型的。注意:不能是浮点型。,2. 每个case后面“常量表达式”的值,必须各不相同,否则会出现互相矛盾的现象。,3.每个case后可以有多条语句,不用大括号括起来。 4. 各case及default子句的先后次序,不影响程序执行结果。,5. default语句不是必须的,但最好提供一条default语句,用于集中处理例外情况。且放在最后。 6. break语句不是必须的,可以根据实际需要决定是否要有break语句。,7. 如果不是判断表达式等于某个值,而是判断表达式的值在某个范围内,如: if (i = -10 则不能用switch语句。,7,4.1 switch多路选择结构,main() int day; scanf(“%d“, ,当输入为6时,输出为: Saturday Invalid day! 当输入为7时,输出为: Invalid day!,case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,直到遇到break,或者到switch语句结束。,不要忘记break,除非你真的是不需要。,8,4.1 switch多路选择结构,多个case子句,可共用同一语句(组),表示这些条件有同一组操作。 当grade为A或者a时,均输出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(grade) 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():从键盘读取一个字符; 2. caseA:casea: aCount+; break; 相当于 caseA: casea: aCount+; break;,10,4.1 switch多路选择结构,练习:输入年份和月份,输出该年截至该月共有多少天。要求在判断某个月有多少天时用switch语句。 闰年的判断条件: year能被4整除但不能被100整除;或者 能被400整除。,11,#include #include 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 2: if (year % 4 =0 ,13,提纲,4.1 switch多路选择结构 4.2 循环的本质 4.3 计数器控制的循环 4.4 for循环结构 4.5 break和continue语句 (链接) 4.6 逻辑运算符 4.7 相等测试运算符=和赋值运算符= 4.8 结构化程序设计小结,14,循环:在循环条件为真时反复执行的一组指令。 循环分成两类: 1)计数器控制的循环; 2)标记控制的循环;,4.2 循环的本质,15,4.2 循环的本质,一、计数器控制的循环 事先知道循环次数,又称“定数循环”; 用控制变量来计算循环的次数。控制变量的值在每次执行完一组循环指令后递增(或递减)。当控制变量的值达到预定的循环次数时,循环终止并继续执行循环结构后面的语句。,16,4.2 循环的本质,二、标记控制的循环 事先不知道循环次数,又称“不定数循环”; 标记值表示获取数据的结束。标记值是在所有合法数据项都提供给程序后键入的值,必须不同于正常的数据项。,17,提纲,4.1 switch多路选择结构 4.2 循环的本质 4.3 计数器控制的循环 4.4 for循环结构 4.5 break和continue语句 4.6 逻辑运算符 4.7 相等测试运算符=和赋值运算符= 4.8 结构化程序设计小结,18,计数控制的循环要有: 1)控制变量(即循环计数器); 2)控制变量的初始值; 3)在每次循环中用来修改控制变量的递增(或递减)值; 4)测试控制变量最终值的条件。,4.3 计数器控制的循环,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; /*控制变量的初始化、循环条件、循环计数器*/ /*值的递增(递减)都包含在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),例外情况:当for循环体中有continue语句时,以后会讲,22,4.4 for循环结构,表达式1和表达式3可以是用逗号格开的表达式列表。 如:for(i=1,j=50;i=20;i+, j-= 5 ) 在for结构中,表达式1和表达式3部分应该只放置包含控制变量的表达式。对其他变量的操作应该放在循环体之前或循环体之后; 循环控制条件要防止“丢一错误”,尽量用=)而不用)。如counter=10,而不写成counter11; for结构中的三个表达式是可有可无的:如果在程序的其他地方初始化了控制变量,则可以省去表达式1;如果省略了表达式2,则假定条件为真,建立了一个“无限循环”;如果在for结构体中计算了递增(递减)表达式或者不需要递增(递减)表达式,则可以省去表达式3。,for (表达式1; 表达式2; 表达式3),23,4.4 for循环结构应用举例,Fibonacci数列示例: 1, 1, 2, 3, 5, 8, 13, 21, 34,24,【算法1】每循环一次,求得一个值,求Fibonacci数列,25,求Fibonacci数列,【算法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个数),换行*/ 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,为了使循环控制更加灵活,语言提供了break语句和continue语句。 1一般格式: break; continue; 2功能 (1)break:强行结束循环,转向执行循环语句的下一条语句。用于switch语句和循环语句中。 (2)continue:用于循环语句中。对于for循环,跳过循环体其余语句,转向循环变量增量表达式3的计算;对于while和do-while循环,跳过循环体其余语句,转向继续循环条件的判定。,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; ,在while结构中使用break语句,4.5 break和continue语句,强行结束循环,转向执行循环语句的下一条语句,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; ,在for结构中使用break语句,4.5 break和continue语句,31,#include #include 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 x; for(x=1; x=10; x+ ) if (x =5) continue; printf(“%d”,x); system(“pause“); return 0; ,在for结构中使用continue语句,跳过循环体其余语句,转向循环变量增量表达式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 = 10; y+ ) if (y = 5) break; printf(“x:%2d ,y:%2dn“,x,y); system(“pause“); return 0; ,循环嵌套时,break和continue只影响包含它们的最内层循环,与外层循环无关,35,与全部使用标准控制流程编写的程序相比,使用break和continue语句的结构较差。,36,提纲,4.1 switch多路选择结构 4.2 循环的本质 4.3 计数器控制的循环 4.4 for循环结构 4.5 break和continue语句 4.6 逻辑运算符 4.7 相等测试运算符=和赋值运算符= 4.8 结构化程序设计小结,37,逻辑运算符:将简单条件组合成复杂条件,包含&的表达式如果已经知道结果为假、包含|的表达式如果已经知道结果为真就会停止进一步计算。所以在包含&的表达式中,把最可能为假的条件放在最左边;在包含|的表达式中,把最可能为真的条件放在最左边,这样可以减少程序执行的时间。,4.6 逻辑运算符,38,4.6 逻辑运算符,例:假设a=1, b=2, c=3, d=4, m=1, n=1, 经过下列逻辑表达式计算后,m和n的值各是多少? (m=ab) & (n=cd) ab的结果为0,所以m的值为0; 上述逻辑与表达式的结果为0,不用计算n=cd; n的值没有发生变化,为1。,39,提纲,4.1 switch多路选择结构 4.2 循环的本质 4.3 计数器控制的循环 4.4 for循环结构 4.5 break和continue语句 4.6 逻辑运算符 4.7 相等测试运算符=和赋值运算符= 4.8 结构化程序设计小结,40,1.将相等测试运算符 错写成 赋值运算符 if (paycode=4) printf(“you get a bonus”) 错写成 if (paycode=4) printf(“you get a bonus”),C语言中,任何非0值都被解释为真。,避免方式:将常量放在运算符的左边,变量放在运算符的右边,如: 4 = paycode,4.7 相等测试运算符=和赋值运算符=,41,2、将赋值运算符 错写成 相等测试运算符 x = 1; 错写成 x=1; 后者x的值并没有改变,将导致程序的逻辑错误!,4.7 相等测试运算符=和赋值运算符=,42,提纲,4.1 switch多路选择结构 4.2 循环的本质 4.3 计数器控制的循环 4.4 for循环结构 4.5 break和continue语句 4.6 逻辑运算符 4.7 相等测试运算符=和赋值运算符= 4.8 结构化程序设计小结,43,三种基本结构 顺序结构 选择结构 if、if-else、switch 循环结构 while、do-while、for,4.8 结构化程序设计小结,44,结构化程序设计规则: 1)从最简单的流程图开始; 2)任何矩形框(动作)都可以被两个按顺序放置的矩形框(动作)取代; 3)任何矩形框(动作)都可以被任何控制结构(顺序、选择、循环)取代; 4)规则2和规则3可以按照任何顺序运行多次。,4.8 结构化程序设计小结,45,规则2:栈式控制规则,规则3:嵌套式控制规则,规则1,4.8 结构化程序设计小结,46,结构化程序设计的优点: 只使用少量的、简单的单入口/单出口程序块并且只用两种方式组装这些程序块 C语言中,简单的if结构可以实现任何选择形式,while结构可以实现任何形式的循环。 因此,C语言程序所需的任何控制结构可以用以下三种控制结构完成: 顺序结构 if结构 while结构,4.8 结构化程序设计小结,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!