《第6讲-分支转移课件》由会员分享,可在线阅读,更多相关《第6讲-分支转移课件(36页珍藏版)》请在金锄头文库上搜索。
1、C语言程序设计语言程序设计(B)软件工程教研室软件工程教研室*1第第7讲 分支分支转移移*2n内容内容6.1if语句回顾及语句回顾及switch引入引入6.2switch语句介绍语句介绍6.3switch语句使用要点语句使用要点6.4switch语句与嵌套的语句与嵌套的if语句比较语句比较n重点重点掌握分支转移语句掌握分支转移语句switch用法用法理解分支转移语句理解分支转移语句switch执行原理执行原理*36.1if语句回顾及语句回顾及switch引入引入n在现实生活在现实生活中中,需要进行判断和选,需要进行判断和选择的情况是很多的择的情况是很多的如果你在家,我去拜访你如果你在家,我去拜
2、访你如果考试不及格,要补考如果考试不及格,要补考如果遇到红灯,要停车等待如果遇到红灯,要停车等待周末我们去郊游周末我们去郊游70岁以上的老年人,入公园免票岁以上的老年人,入公园免票n在现实生活在现实生活中中,需要进行判断和选,需要进行判断和选择的情况是很多的择的情况是很多的n处理处理这些这些问题,关键在于进行条件问题,关键在于进行条件判断判断n由于程序处理问题的需要,在大多由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件在进行下一个操作之前先进行条件判断判断6.1if语句回顾及语句回顾及switch引入引入nC语言有两种选
3、择语句语言有两种选择语句:(1)if语句语句:实现两个分支的选择结构实现两个分支的选择结构(2)switch语句语句:实现多分支的选择结构实现多分支的选择结构if(表达式表达式)语句语句1else语句语句2关系表达式关系表达式逻辑表达式逻辑表达式数值表达式数值表达式方括号内的部分为可选的方括号内的部分为可选的6.1if语句回顾及语句回顾及switch引入引入n如果要根据一个表达式的取值决定程序如果要根据一个表达式的取值决定程序的执行流程,也就是要实现这样的结构的执行流程,也就是要实现这样的结构: 如果(表达式)的值 等于 值1:就做 等于 值2:就做 等于 值n:就做 否则: 就做6.1if语
4、句回顾及语句回顾及switch引入引入nswitch语句用来实现多分支选择结构语句用来实现多分支选择结构学生成绩分类学生成绩分类85分以上为分以上为A等等7084分为分为B等等6069分为分为C等等人口统计分类人口统计分类按年龄分为老、中、青、少、儿童按年龄分为老、中、青、少、儿童6.1if语句回顾及语句回顾及switch引入引入例例6.1要求按照考试成绩的等级输出要求按照考试成绩的等级输出百分制分数段,百分制分数段,A等为等为85分以上,分以上,B等为等为7084分,分,C等为等为6069分分,D等为等为60分以下分以下。成绩的等级由键盘。成绩的等级由键盘输入。输入。6.2switch语句介
5、绍语句介绍n解题思路:解题思路:判断出判断出这是一个多分支选择问题这是一个多分支选择问题根据百分制分数将学生成绩分为根据百分制分数将学生成绩分为4个等个等级级如果用如果用if语句语句,至少要用至少要用3层嵌套的层嵌套的if,进行进行3次检查判断次检查判断用用switch语句进行一次检查即可得到语句进行一次检查即可得到结果结果6.2switch语句介绍语句介绍#includeintmain()chargrade;scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:printf(85100n);break;caseB:printf(7084
6、n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);return0;值为值为A#includeintmain()chargrade;scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:printf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(e
7、nterdataerror!n);return0;不能少不能少#includeintmain()chargrade;scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:printf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);return0;值为值为C#includeintmain()chargrade;scanf(%c,&grade);
8、printf(Yourscore:);switch(grade)caseA:printf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);return0;程序演示程序演示值为值为Fnswitch语句的作用是根据表达式的值,语句的作用是根据表达式的值,使流程跳转到不同的语句使流程跳转到不同的语句nswitch语句的一般形式语句的一般形式:switch()case值值1:语句:语句1;break;cas
9、e值值2:语句:语句2;break; case值值n:语句:语句n;break;default:语句语句n+1;整数类型整数类型(包括字符型包括字符型)值值1值值n不能相同不能相同nswitch语句的作用是根据表达式的值,语句的作用是根据表达式的值,使流程跳转到不同的语句使流程跳转到不同的语句nswitch语句的一般形式语句的一般形式:switch()case值值1:语句语句1;break;case值值2:语句语句2;break; case值值n:语句语句n;break;default:语句语句n+1;当遇到当遇到break,程程序跳出序跳出switch语语句,勿忘句,勿忘break表达式值与
10、任何一个表达式值与任何一个case值值都不同时,则执行语句都不同时,则执行语句n+1scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:printf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);6.2switch语句介绍语句介绍scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:p
11、rintf(85100n);break;caseB:printf(7084n);break;caseC:printf(6069n);break;caseD:printf(60n);break;default:printf(enterdataerror!n);6.2switch语句介绍语句介绍scanf(%c,&grade);printf(Yourscore:);switch(grade)caseA:caseB:caseC:printf(6069n);break;caseD:printf(=90)printf(“优秀优秀n”);elseif(scores=80)printf(“良好良好n”);e
12、lseif(scores=70)printf(“中等中等n”);elseif(scores=60)printf(“及格及格n”);elseprintf(“不及格不及格n”);n解答二:解答二:switch分支分支intmain()intscores;printf(请输入百分制分数:请输入百分制分数:);scanf(%d,&scores);switch(scores/10)case9:printf(优秀优秀n);break;case8:printf(良好良好n);break;case7:printf(中等中等n);break;case6:printf(及格及格n);break;default:p
13、rintf(不及格不及格n);n思考思考1:指出以下程序错误:指出以下程序错误#includeintmain()floatscores;printf(请输入百分制分数请输入百分制分数:);scanf(%f,&scores);switch(scores/10)return0;6.3switch语句使用要点语句使用要点要点要点1:必须是必须是整型或字符型,整型或字符型,逻辑型的值为逻辑型的值为0或或1,也属整型,也属整型n思考思考2:指出以下程序输出结果:指出以下程序输出结果(输入输入78,65时时)intmain()intscores;printf(请输入百分制分数:请输入百分制分数:);sca
14、nf(%d,&scores);switch(scores/10)case9:printf(优秀优秀n);break;case8:printf(良好良好n);break;case7:printf(中等中等n);case6:printf(及格及格n);break;default:printf(不及格不及格n);return0;6.3switch语句使用要点语句使用要点要点要点2:勿忘记勿忘记在每一个在每一个case标标号后写上号后写上breakn思考思考3:指出以下程序输出结果:指出以下程序输出结果(输入输入55时时)intmain()intscores;printf(请输入百分制分数:请输入百分
15、制分数:);scanf(%d,&scores);switch(scores/10)case9:printf(优秀优秀n);break;case8:printf(良好良好n);break;case7:printf(中等中等n);break;case6:printf(及格及格n);break;case5:case4:case3:printf(不及格不及格n);break;default:printf(“要努力要努力n);return0;6.3switch语句使用要点语句使用要点要点要点3:语句标号语句标号,可可以把几个语句叠在一以把几个语句叠在一起,代表程序中同一起,代表程序中同一条语句的开始处条
16、语句的开始处n要点要点1:作为判断条件的表达式的值必须是作为判断条件的表达式的值必须是整型或字符型整型或字符型(逻辑型的值为逻辑型的值为0或或1,也属,也属整型整型),否则编译时报错;否则编译时报错;n要点要点2:break关键字表示从当前的关键字表示从当前的switch语句中断语句中断,跳到跳到switch语句的下一条语句语句的下一条语句继续执行。如果某个继续执行。如果某个case下没有下没有break语语句句,程序执行完成该程序执行完成该case后会接着执行一后会接着执行一个个case;n要点要点3:用冒号结束的行相当于语句标号用冒号结束的行相当于语句标号,代代表程序中某个语句的开始处。表
17、程序中某个语句的开始处。6.3switch语句使用要点语句使用要点n1.遇到多分支遇到多分支(两个以上两个以上)转移时,使用转移时,使用switch分支语句可以使书写简便;分支语句可以使书写简便;n2.switch语句要求分支条件值为整型语句要求分支条件值为整型,如果如果条件不满足,可使用条件不满足,可使用if解决问题;解决问题;n3.凡是凡是switch语句实现的功能语句实现的功能,if语句通过语句通过嵌套可以实现;嵌套可以实现;n4.if语句实现的功能语句实现的功能switch语句不一定能语句不一定能方便地实现;方便地实现;n5.使用使用switch语句实现代码比用语句实现代码比用if语句
18、实语句实现的相同代码执行更快。现的相同代码执行更快。(If需多次计算条需多次计算条件表达式,而件表达式,而switch只需要计算一次。只需要计算一次。)6.4switch语句与嵌套的语句与嵌套的if语句比较语句比较本次课小结本次课小结n简单的简单的if语句可实现二分支。嵌套的语句可实现二分支。嵌套的if语语句可以实现多分支转移;句可以实现多分支转移;n但但if语句书写分支转移写法较繁,且要语句书写分支转移写法较繁,且要多次比较条件多次比较条件nswitch语句为专门的分支转移,写法简语句为专门的分支转移,写法简洁,可读性好洁,可读性好ncase相当于语句标号相当于语句标号本次课小结本次课小结n
19、要注意要注意break常常被遗漏导致逻辑错误。常常被遗漏导致逻辑错误。n理解理解default的作用。的作用。n可以将用可以将用if语句实现的多分支转移改写为语句实现的多分支转移改写为switch语句。语句。课后作业课后作业n阅读本讲稿,在自己的电脑上重建讲阅读本讲稿,在自己的电脑上重建讲稿中的例题并运行;稿中的例题并运行;n阅读教材第阅读教材第8、9章;章;n完成教材完成教材P82第第(3)、(4)题;题;P90第第(2)题,为下次课实验题,为下次课实验2作准备。作准备。图图6-1单分支结构流程图单分支结构流程图图图6-2双分支结构流程图双分支结构流程图图图6-3多分支结构流程图多分支结构流
20、程图图图6-4switch和和break语句结语句结构图构图n例例1下述程序段中,正确的是下述程序段中,正确的是:_。练习练习nswitch语句执行时,先计算表达式的值,然后顺次计算表语句执行时,先计算表达式的值,然后顺次计算表达式常量达式常量1的值并与表达式的值比较。若有某个表达式常量的值并与表达式的值比较。若有某个表达式常量的值与其相等的值与其相等,则其他表达式和则其他表达式和default判定失败,程序执行判定失败,程序执行该常量表达式后面的语句组。若没有匹配的,则程序执行该常量表达式后面的语句组。若没有匹配的,则程序执行default之后语句组。之后语句组。n因为没有具体运算内容,本例
21、只能考核因为没有具体运算内容,本例只能考核switch语句的语法语句的语法现象。前现象。前3个选项中各出现了一个错误。在选项个选项中各出现了一个错误。在选项A.中,中,case后的表达式含有变量,但后的表达式含有变量,但C语言要求必须是常量或常语言要求必须是常量或常量表达式;量表达式;在选项在选项B.中,中,case之后的表达式,一方面其中之后的表达式,一方面其中含有变量,更主要的是对含有变量,更主要的是对switch结构的执行机理不理解:结构的执行机理不理解:执行该语句时,执行该语句时,C语言只是将语言只是将switch后面的表达式与后面的表达式与case后的常量的值做比较,因此,后的常量的
22、值做比较,因此,case之后一般不能使用关系、之后一般不能使用关系、逻辑等表达式;逻辑等表达式;选项选项C.中的错误是在两个中的错误是在两个case后的常量都后的常量都是是12(12和和y-8),而,而C语言要求语言要求case后的常量不能重复。后的常量不能重复。n尽管尽管选项选项D.中的中的switch语句有点怪,但从语法角度看是正语句有点怪,但从语法角度看是正确的。如果确的。如果x的值为的值为3或或-1,程序都将执行,程序都将执行y=2并结束,子并结束,子句句case2没有实际用处,可以删去。所以这是正确答案。没有实际用处,可以删去。所以这是正确答案。n为了在执行某个为了在执行某个case分支后,使流程跳出分支后,使流程跳出switch结构,结构,即终止即终止switch语句的执行,总是把语句的执行,总是把break语句与语句与switch语语句一起合用,即把句一起合用,即把break语句作为每个语句作为每个case分支的最后一分支的最后一条语句,当执行到条语句,当执行到break语句时,使流程跳出本条语句时,使流程跳出本条switch语句。语句。break语句又叫强制中止语句,它的功能是使程序语句又叫强制中止语句,它的功能是使程序的执行无条件转向本层复合结构的下一条语句。这种使用的执行无条件转向本层复合结构的下一条语句。这种使用switch语句的形式为:语句的形式为: