C语言第4章分支结构ppt课件.ppt

上传人:飞****2 文档编号:32174000 上传时间:2022-08-08 格式:PPT 页数:34 大小:189.50KB
返回 下载 相关 举报
C语言第4章分支结构ppt课件.ppt_第1页
第1页 / 共34页
C语言第4章分支结构ppt课件.ppt_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《C语言第4章分支结构ppt课件.ppt》由会员分享,可在线阅读,更多相关《C语言第4章分支结构ppt课件.ppt(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 第三部分第三部分 C语言的结构语句语言的结构语句 第第4章章 选择结构选择结构问题的提出:百分制成绩的等级划分问题编程实现:给出一百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A等,8980分为B等,7970分为C等,6960分为D等,60分以下为E等。 假定成绩为整型数据。4.1 if 语句语句4.1.1 单分支单分支if语句语句 它的一般格式如下:它的一般格式如下: if(表达式)(表达式) 语句;语句; 说明:对条件表达式进行判断,若其值为说明:对条件表达式进行判断,若其值为“真(非真(非0)”时执行语句,若其值为时执行语句,若其值为“假(假(0)”时则跳过语句。其执行过

2、程时则跳过语句。其执行过程见流程图见流程图4.1。一条件:一条件:一个条件表达式可以是一个条件表达式可以是单值判断如单值判断如x=1,也可以是范围也可以是范围判断,如判断,如x0 & x = 60 ) printf ( “passedn ” ) ;又如:x大于y就输出x,用单分支if语句描述为: if ( x y ) printf ( “%d ”, x ) ; 写出程序段的运行结果:当整型变量x=55,60,78时, if ( x = 60 ) printf ( “%d ”, x ) ; printf ( “passedn ” ) ; 【例【例4-1】百分制成绩的等级划分问题之解法】百分制成绩

3、的等级划分问题之解法1:仅:仅用用if单分支语句实现单分支语句实现 main() int score; scanf(%d,&score); if (score=60&score=70& score=80& score=90) printf(“grade=A”);/要求掌握:数学范围与if条件范围的转换4.1.2 双分支双分支if语句语句它的一般格式如下:if (表达式表达式) 语句语句1;else 语句语句2; 说明:与单分支if语句不同的是在条件为“真(非0)”或“假(0)”时执行指定的不同的操作。对条件表达式进行判断,若其值为“真(非0)”时,就执行语句1;若其值为“假(0)”时,就执行语

4、句2。其执行过程见流程图4.2。一条件:一条件:一个条件一个条件/关系表达式关系表达式一语句:一语句: if后有且仅能有一条后有且仅能有一条语句语句,else后只能管一条语句后只能管一条语句一执行:一执行:只能执行一条语句只能执行一条语句例如:给学生成绩划分:成绩大于或等于60分时输出“passed”,成绩小于60分时输出“failed”。用双分支if语句描述为: if ( grade = 60 ) printf ( “passedn ” ) ; else printf ( “failedn ” ) ;说明:说明:1.对于单分支和双分支对于单分支和双分支if后面的后面的“表达式表达式”,一般,

5、一般为逻辑表达式或关系表达式为逻辑表达式或关系表达式,事实上表达式的类型,事实上表达式的类型不限于此,可以是任意的数值类型(包括整型、实不限于此,可以是任意的数值类型(包括整型、实型、字符型、指针型数据)。只要表达式的值为非型、字符型、指针型数据)。只要表达式的值为非0,就认为它为真;只要表达式的值为,就认为它为真;只要表达式的值为0,就认为它,就认为它为假。为假。 例如:例如: if ( 6 ) printf ( “passedn ” ) ; if ( A ) printf ( “%d ”, A ) ; 这些都是合法的这些都是合法的if语句。语句。2. else子句不能作为语句单独使用子句不

6、能作为语句单独使用,它必须是,它必须是if语语句的一部分,与句的一部分,与if配对使用。配对使用。 3.if语句后面的表达式之后不能增加分号(为何?为何?),同时注意语句后面的分号不能遗漏(为何?为何?) 。4.在if和else后面可以只包括一个内嵌的操作语句,也可以包括多个操作语句,此时务必用“”将几个语句括起来成为一个复合语句。 例如:if ( x 100 ) x- ; s=+x ; /如果去掉括号如果去掉括号呢?呢? else x+ ; s=+x ; /如果去掉括号如果去掉括号呢?呢?此时又要注意:在“”后面不能再添加分号,因为“”内是一个完整的复合语句,不需要再添加分号。在前面的章节还

7、提到过与if / else结构密切相关的条件运算符 ?:,它是C语言中唯一的三目运算符(即有三个操作数)。对上面的两例用条件运算符改写为: grade = 60 ?printf ( “passedn ” ) :printf ( “failedn ” ) ; x y ?printf ( “%d ”, x ) :printf ( “%d ”, y ) ;由此说明适当的语句修改条件运算符可以完成if / else结构相同的功能。4.1.3 多分支多分支if语句语句对于解决判断多个条件的问题,可以使用对于解决判断多个条件的问题,可以使用if语句的嵌套,即语句的嵌套,即在在if语句中又包括一个或多个语句

8、中又包括一个或多个if语句。它的一般格式如下:语句。它的一般格式如下:if (表达式表达式1) 语句语句1;else if (表达式表达式2) 语句语句2;else if (表达式表达式3) 语句语句3; else if (表达式表达式m) 语句语句m;else 语句语句n; /一般来说表达式之间具备一定的顺序关系一般来说表达式之间具备一定的顺序关系说明:1.执行顺序:执行顺序:开始执行该结构后,便依次去对多个条件进行判断测试,符合某一条件,则转去执行该条件下的操作,其它部分将被跳过;如果无一条件为“真(非0)”,就执行最后一个else所指定的操作,这个else可以看作“其它情形”。2.应当特

9、别注意应当特别注意if与与else的匹配关系的匹配关系(难点难点):规则是从最内层开始,else总是与它上面最近的(未曾配对的)if配对(而不是if与他最下面的else匹配)。例 根据程序写出运行结果main ( ) int x=2,y=-1,z=2; if(xy) if(y=90) printf(An); else if(grade=80) printf(Bn); else if(grade=70) printf(Cn); else if(grade=60) printf(Dn); else printf(En);例:关于if与else的匹配问题编程实现以下功能:编程实现以下功能:1)当当a

10、=0并且并且b=0时输出时输出“error”2)当当a=0并且并且b!=0时什么也不做时什么也不做3)当当a!=0时,进行自加时,进行自加a=0b=0输出输出”error”开始开始结束结束a+TFFTIf (a=0) if (b=0) printf(“error”); /请问他们是如何匹配的请问他们是如何匹配的?else a+;4.2 switch语句语句4.2.1 switch语句语句对于解决实际生活中例如人口统计分类、工资统计分类、银行存款分类等等的多分支选择问题,采用多分支if语句(即if语句的嵌套)来处理固然可以,但是如果分支较多,则嵌套的if语句层数多,程序冗长而且会导致可读性降低。

11、C语言提供了直接处理多分支选择的switch语句,它的一般格式如下:switch ( 表达式表达式 ) case 常量表达式常量表达式1:语句:语句1; case 常量表达式常量表达式2:语句:语句2; case 常量表达式常量表达式n:语句:语句n; default : 语句语句m;说明:其执行过程可描述为:说明:其执行过程可描述为: 按整型、配标号、添按整型、配标号、添break、可跳出。、可跳出。1.按整型、配标号按整型、配标号: 根据整型根据整型/字符型表达式的值,从上字符型表达式的值,从上到下去找与其相匹配的到下去找与其相匹配的case标号(标号(整型常量,单值,整型常量,单值,故不

12、会进行范围判断,如故不会进行范围判断,如x0 ),以此作为入口,执行),以此作为入口,执行其后面的各语句。其后面的各语句。2.添添break、可跳出。、可跳出。见下节见下节/百分制成绩的等级划分问题之解法百分制成绩的等级划分问题之解法3(不完善不完善):main( )int grade; printf(input the grade:);scanf(%d,&grade);switch(grade/10) /按单值匹配按单值匹配,故要将范围映射为单值故要将范围映射为单值 case 10: case 9: printf(An); case 8: printf(Bn); case 7: printf

13、(Cn); case 6: printf(Dn); default : printf(En); 【例【例4-3】对【例】对【例4-2】用】用switch语句改写语句改写.如何改写呢?如何改写呢?关键:关键:不象多分支不象多分支if语句语句有范围判断有范围判断,而而switch语语句按单值匹配句按单值匹配,故要将范故要将范围映射为单值围映射为单值. 【运行结果】input the grade:98ABCDE说明:此时的结果并不是我们所希望得到的,也就是说根据switch后面表达式的值找到了相匹配的case分支后,就以此为入口执行后面的所有语句,而不再进行判断了。其流程图如图4.5。问题:问题:如

14、果分别输入如果分别输入82,77,65,52时,运行结时,运行结果会怎样呢?果会怎样呢? 4.2.2 break语句在语句在switch结构中的结构中的运用运用添添break、可跳出。、可跳出。为了正确使用switch结构从多种结果中选择一种结果的功能,我们可以运用前面学过的break语句直接跳出switch结构来达到此目的。对流程图4.5修改如下如图4.6:【例【例4-4】百分制成绩的等级划分问题之解法】百分制成绩的等级划分问题之解法3(较完善较完善):【源程序】main( )int grade;printf(input the grade:);scanf(%d,&grade);switch

15、(grade/10)case 10:case 9: printf(An);break;case 8: printf(Bn);break;case 7: printf(Cn);break;case 6: printf(Dn);break;default : printf(En);break; 说明:1. switch结构的执行部分是一个由一些case子句和一个可缺省的default子句组成的复合语句,特别注意要用一对“”括起来。2. switch后面的表达式一般是整型表达式或整型表达式或字符型表达式字符型表达式,与之相对应的case后面的常量表达式也应是一个整型表达式或字符型表达式,但要注意ca

16、se与常量表达式之间要有空格。例如:case 6+9 : printf( “ok” ) ;是合法的。3.在执行switch语句时,根据其后表达式的值找相匹配的case子句,要注意“case 常量表达式”只是起语句标号的作用,并不是在该处进行条件判断。当找到相匹配的case子句即入口标号时,就从此标号开始执行后面的语句。因此,应该在执行一个case子句后必须增加一条间断语句break来使流程跳出switch结构。如果未找到相匹配的case子句就执行default子句,若default子句放在最后其后可以不加break语句。4.各个case子句出现的次序对执行结果没任何影响,即顺序可以任意布局。5

17、.每一个case能够拥有一条或多条语句,其最大的不同之处在于使用多条语句时不需要用“”括起来。6.多个case可以共用一组执行语句。例如: case A: case a: +count ; break ; 成绩为大写字母A或小写字母a都进行累加求和。7. switch结构中的case子句中的常量表达式的值不允许相同。8. switch结构允许嵌套。 4.3 实例解析实例解析【例【例4-5】从键盘输入三个整数】从键盘输入三个整数a、b、c,输出最大的一个。输出最大的一个。【编程思路】分析:可以先找出a与b之间的较大者,然后再将这个较大者与c比较找出较大者,则此数即为三个数中的最大数。 程序代码:

18、程序代码: main( ) int a,b,c,max; printf(input a,b,c:); scanf(%d,%d,%d,&a,&b,&c); if(ab) if(ac) max=a; else max=c; else if(bc) max=b; else max=c; printf(the max is :%d n,max); #include main() int c; printf(Enter m or n or h or other:); c=getchar(); switch(c) case m: printf(nGood morning!n);break; case n:

19、 printf(nGood night!n); break; case h: printf(nHello!n); break; default : printf(n?n); break; 【例【例4-6】根据输入字母输出字符串根据输入字母输出字符串【例【例4-7】根据程序写出运行结果根据程序写出运行结果main ( ) int x=2,y=-1,z=2; if(xy) if(y0) z=0; else z+=1; printf(“%dn“,z);main ( ) int i=10; switch(i) case 9:i+=1; case 10:i+=1; case 11:i+=1; defau

20、lt:i+=1; printf(%dn,i);答案:答案:2答案:答案:13【例【例4-8】根据输入的年份和月份,计算该月有多少天?】根据输入的年份和月份,计算该月有多少天?(考虑闰年和平年的情况)(考虑闰年和平年的情况) main()int year,month,day; printf(“input the year and month:”);scanf(“%d,%d”,&year,&month);switch(month) case 4: case 6: case 9: case 11: day=30;break; case 2: if (year%4=0&year%100!=0|year

21、%400=0)day=29;else day=28;break; default:day=31;break;printf(“The month is %d dayn”,day); 【例【例4-9】判断一个输入的】判断一个输入的3位数是否为水仙花数位数是否为水仙花数main()int a,a1,a2,a3;printf(请输入一个请输入一个3位数的整数:位数的整数:);scanf(%d,&a);a1=a%10;a2=a/10%10;a3=a/100%10;if(a1*a1*a1+a2*a2*a2+a3*a3*a3=a)printf(%d是水仙花数!是水仙花数!,a);elseprintf(%d不是水仙花数!不是水仙花数!,a);4.4 本章小结本章小结本章主要介绍了if语句和switch语句这两中分支语句。if语句(一个条件、一语句、一个条件、一语句、 一执行一执行)它又包括了三种类型:单分支if语句、双分支if语句和多分支if语句(即if语句的嵌套),特别注意在if语句的嵌套中if和else的匹配关系;switch语句(按按整型、配标号、添整型、配标号、添break、可跳出、可跳出)主要用于对单条件进行测试,从其多种结果中取一种的情形,要注意在其case分支语句中使用间断语句break语句。在实际运用中,应根据具体的情况灵活使用这两种语句来解决问题。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁