




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第4 4章章 选择结构选择结构( (重点重点) )本章提纲4.1 if语句语句4.2 switch语句语句4.3 实例解析实例解析4.1 if 语句l4.1.1 单分支单分支if语句语句l一般格式如下:l if(表达式)l 语句;l说明:对条件表达式进行判断,若其值为“真(非0)”时执行语句,若其值为“假(0)”时则跳过语句。其执行过程见右图。4.1.1 单分支if语句l例如:设定学生成绩60分为及格分数线,用单分支if语句描述为: if ( grade = 60 ) printf ( “passedn ” ) ;又如:x大于y就输出x,用单分支if语句描述为:if ( x y ) prin
2、tf ( “%d ”, x ) ; 4.1.2 双分支if语句l一般格式如下: if (表达式) 语句1; else 语句2;l说明:与单分支if语句不同的是在条件为“真(非0)”或“假(0)”时执行指定的不同的操作。对条件表达式进行判断,若其值为“真(非0)”时,就执行语句1;若其值为“假(0)”时,就执行语句2。其执行过程见流程图4.2。l例如:给学生成绩划分:成绩大于或等于60分时输出“passed”,成绩小于60分时输出“failed”。用双分支if语句描述为:4.1.2 双分支if语句if ( grade = 60 ) printf ( “passedn ” ) ;elseprint
3、f ( “failedn ” ) ;l用条件运算符改写上两例:4.1.2 双分支if语句 (1)grade = 60 ?printf ( “passedn ” ) :printf ( “failedn ” ) ; (2)x y ?printf ( “%d ”, x ) :printf ( “%d ”, y ) ;由此说明适当的语句修改条件运算符可以完成if else结构相同的功能。注意:注意:l对于单分支和双分支if后面的“表达式”,一般为逻辑表达式或关系表达式,事实上表达式的类型不限于此,可以是任意的数值类型(包括整型、实型、字符型、指针型数据)。只要表达式的值为非0,就认为它为真;只要表达
4、式的值为0,就认为它为假。 例如: if ( 6 ) printf ( “passedn ” ) ; if ( A ) printf ( “%d ”, A ) ; 这些都是合法的if语句。l对于双分支if语句,else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。 4.1.2 双分支if语句lif语句后面的表达式之后不能增加分号表达式之后不能增加分号,同时注意语句后语句后面的分号不能遗漏面的分号不能遗漏。l在if和else后面可以只包括一个内嵌一个内嵌的操作语句,也可以包括多个操作语句多个操作语句,此时务必用“”将几个语句括起来成为一个复合语句。 例如:if ( x 10
5、0 ) x- ; s=+x ; else x+ ; s=+x ; 此时又要注意:在“”后面不能再添加分号,因为“”内是一个完整的复合语句,不需要再添加分号。4.1.2 双分支if语句4.1.3 多分支if语句l对于解决判断多个条件的问题,可以使用if语句的嵌套,即在if语句中又包括一个或多个if语句。它的一般格式如下:if (表达式1) 语句1;else if (表达式2) 语句2;else if (表达式3) 语句3; else if (表达式m) 语句m;else 语句n; 说明:l依次去对多个条件进行判断测试,符合某一条件,则转去执行该条件下的操作,其它部分将被跳过;如果无一条件为“真(
6、非0)”,就执行最后一个else所指定的操作。4.1.3 多分支if语句l【例4-1】编程实现给一百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A等,8980分为B等,7970分为C等,6960分为D等,60分以下为E等。4.1.3 多分支if语句4.1.3 多分支if语句l【源程序】#includemain( )int grade;printf ( input the grade:);scanf (%d,&grade);if (grade=90)printf(An);else if(grade=80)printf(Bn);else if(grade=70)printf(
7、Cn);else if(grade=60)printf(Dn);elseprintf(En);思考:思考:若输入大于100或小于0的数会出现什么结果?改进程序:#includemain( )int grade;printf ( input the grade:);scanf (%d,&grade);if (grade100|grade=90)printf(An);else if(grade=80)printf(Bn);else if(grade=70)printf(Cn);else if(grade=60)printf(Dn);elseprintf(En);4.2 switch语句4.
8、2.1 switch语句简介语句简介l对于解决实际生活中例如人口统计分类、工资统计分类、银行存款分类等等的多分支选择问题,采用多分支if语句(即if语句的嵌套)来处理固然可以l但是如果分支较多,则嵌套的if语句层数多,程序冗长而且会导致可读性降低。lC语言提供了直接处理多分支选择的switch语句l它的一般格式如下:switch ( 表达式 )case 常量表达式1:语句1;case 常量表达式2:语句2; case 常量表达式n:语句n; default : 语句m;l说明:其执行过程为进入switch结构后,根据表达式的值从上到下去找与其相匹配的case,以此作为入口,执行其后面的各语句。
9、4.2.1 switch语句简介4.2.1 switch语句简介【例4-1】用switch语句改写如下:【源程序】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(Cn);case 6: printf(Dn);default : printf(En);对比main( )int grade;printf ( input the grade:);scanf (%d,&am
10、p;grade);if (grade=90)printf(An);else if(grade=80)printf(Bn);else if(grade=70)printf(Cn);else if(grade=60)printf(Dn);elseprintf(En); 说明:l根据switch后面表达式的值找到了相匹配的找到了相匹配的casecase分支后分支后,就以此为入口执行后面的所有语句执行后面的所有语句,而不再进行判断了。其流程图如下页图。4.2.1 switch语句简介l【运行结果】input the grade:98ABCDE4.2.2 break语句在switch结构中的运用l为了正
11、确使用switch结构从多种结果中选择一种结果的功能,我们可以运用前面学过的break语句来达到此目的。对上页流程图修改如下页图:l【源程序】main( )int grade;printf(input the grade:);scanf(%d,&grade);switch(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; l说明:1. switch结
12、构的执行部分是一个由一些case子句和一个可缺省的default子句组成的复合语句,特别注意要用一对“”括起来。2. switch后面的表达式一般是整型表达式或字符型表达式,与之相对应的case后面的常量表达式也应是一个整型表达式或字符型表达式,但要注意case与常量表达式之间要有空格。 例如: case 6+9 : printf( “ok” ) ; 是合法的。4.2.2 break语句在switch结构中的运用3.在执行switch语句时,根据其后表达式的值找相匹配的case子句,要注意“case 常量表达式”只是起语句标号的作用,并不是在该处进行条件判断。当找到相匹配的case子句即入口标
13、号时,就从此标号开始执行后面的语句。因此,应该在执行一个case子句后必须增加一条间断语句break来使流程跳出switch结构。如果未找到相匹配的case子句就执行default子句,若default子句放在最后其后可以不加break语句。4.各个case子句出现的次序对执行结果没任何影响,即顺序可以任意布局。4.2.2 break语句在switch结构中的运用5.每一个case能够拥有一条或多条语句,其最大的不同之处在于使用多条语句时不需要用“”括起来。6.多个case可以共用一组执行语句。例如: case A: case a: +count ; break ; 成绩为大写字母A或小写字母
14、a都进行累加求和。7. switch结构中的case子句中的常量表达式的值不允许相同。8. switch结构允许嵌套。 4.2.2 break语句在switch结构中的运用4.3 实例解析【例4-2】从键盘输入三个整数a、b、c,输出最大的一个。【编程思路】分析:可以先找出a与b之间的较大者,然后再将这个较大者与c比较找出较大者,则此数即为三个数中的最大数。 【源程序】解法1:main()int a,b,c;printf(input a,b,c:);scanf(%d,%d,%d,&a,&b,&c);printf(the max is :%d n,c(ab)?a:b)?c:(ab)?a:b);4.3 实例解析解法2: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; elsemax=c; printf(the max is :%d n,max);4.3 实例解析【例4-3】有一个函数 x (x1) y= 2x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论