《C语言程序设计》--第4章选择结构程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第4章选择结构程序设计目前我们已经讲了顺序结构程序设计,实际生活中,若需要处理事情,往往会根据不同的情况,采取相应不同的处理措施。在程序设计中,这种算法表现为根据不同的判定条件,控制执行不同的程序流程。选择结构是程序结构中很重要的一种控制结构。在程序设计时,当需要进行选择、判断和处理的时候,就要用到选择结构。2要设计选择结构程序,要考虑两个方面的问题:一、在C语言中如何来表示选择的条件?二、在C语言中实现选择结构用什么语句?在C语言中表示条件,一般用关系表达式或逻辑表达式,实现选择结构用if语句或switch语句。我们今天要讲的主要内容如下:4.1if语句4.2switch语句4.3程序举例34.1.1if语句的形式1.单if语句2.if-else语句3.if-elseif-else语句4.1if语句4.1.2if语句的嵌套41.单if语句(1)语句格式:if(表达式)语句(3)执行过程:表达式语句if语句的下一语句真假(2)注意:①表达式即条件,一定要有括号,可以是任意类型的表达式,值为真或假;②语句可以是单语句也可以是语句块。5【例4.1】求两个整数a,b中较大者。(1)算法分析:设三个变量a,b,max。首先假设max=a,然后判断a,b,若a=b则max=b,最后输出max。1.单if语句6(2)流程图描述:开始输入a,b结束输出maxmaxbmax=b真假max=a1.单if语句#includestdio.hvoidmain(){inta,b,max;printf(a,b=);scanf(%d,%d,&a,&b);max=a;if(maxb)max=b;printf(max=%d,max);}72.if-else语句(1)语句格式:if(表达式)语句1else语句2(2)注意:①if和else同属于一个if语句;②语句1和语句2可以是单语句也可以是语句块。(3)执行过程:语句1表达式语句2if语句的下一语句真假8(1)算法分析:设3个变量a,b,max。首先输入a,b,然后判断a,b,较大者放在max中,最后输出max。【例4.2】用if-else语句改写例4.1。2.if-else语句9(2)流程图描述:开始输入a,b结束输出maxabmax=b真假max=a2.if-else语句#includestdio.hvoidmain(){inta,b,max;printf(a,b=);scanf(%d,%d,&a,&b);if(ab)max=a;elsemax=b;printf(max=%d\n,max);}103.if-elseif-else语句(1)语句格式:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3……else语句n(2)执行过程:if-elseif-else语句的下一语句表达式1语句1真假表达式2语句2真假表达式n-1语句n-1真假语句n…………11【例4.3】根据成绩打印出等级。(0-59:E60-69:D70-79:C80-89:B90-100:A)算法分析:设成绩为score,假设取值在0-100之间,没有错误的输入。60score≥0E70score≥60D80score≥70C90score≥80B100≥score≥90A3.if-elseif-else语句121#includestdio.h2voidmain()3{/*E:0-59D:60-69C:70-79B:80-89A:90-100*/4intscore;5printf(score=);6scanf(%d,&score);7if(score=0&&score60)8printf(gradeisE);9elseif(score=60&&score70)10printf(gradeisD);11elseif(score=70&&score80)12printf(gradeisC);13elseif(score=80&&score90)14printf(gradeisB);15else16printf(gradeisA);17}问题1:条件表达式可否采用更简洁的形式?3.if-elseif-else语句13问题2:条件表达式的先后可否任意?3.if-elseif-else语句1#includestdio.h2voidmain()3{/*E:0-59D:60-69C:70-79B:80-89A:90-100*/4intscore;5printf(score=);6scanf(%d,&score);7if(score=0&&score60)8printf(gradeisE);9elseif(score=79)10printf(gradeisC);11elseif(score=89)12printf(gradeisB);13elseif(score=69)14printf(gradeisD);15else16printf(gradeisA);17}14注意条件的表示形式和顺序3.if-elseif-else语句1#includestdio.h2voidmain()3{/*E:0-59D:60-69C:70-79B:80-89A:90-100*/4intscore;5printf(score=);6scanf(%d,&score);7if(score=90)8printf(gradeisA);9elseif(score=80)10printf(gradeisB);11elseif(score=70)12printf(gradeisC);13elseif(score=60)14printf(gradeisD);15else16printf(gradeisE);17}154.1.2if语句的嵌套1.嵌套的概念:在if语句中又包含一个或多个if语句。内嵌if内嵌if2.嵌套的形式:if语句可以内嵌在if子句中,又可以内嵌在else子句中。例如:if()if()语句1else语句2elseif()语句3else语句416一个完整的if语句【例4.4】猜数程序,和预定的数比较,并给出相应的提示。4.1.2if语句的嵌套1#includestdio.h2voidmain()3{intnumber=200;4inti;5scanf(%d,&i);6if(inumber)7printf(It'slarge!);8else9if(inumber)10printf(It’ssmall!);11else12printf(It’sright!);13}171#includestdio.h2voidmain()3{inta,b,c,max;4printf(a,b,c=);5scanf(%d,%d,%d,&a,&b,&c);6max=c;7if(ab)8{if(bc)9max=a;}10else11if(ac)12max=b;13printf(max=%d\n,max);14}一个完整的if语句说明:内嵌的if语句既可以嵌套在if部分,也可以嵌套在else部分。4.1.2if语句的嵌套【例4.5】求三个整数a,b,c中的最大数。183.if与else的配对规则:else总是与它上面最近的if配对。特别注意:(1)要采用正确的缩进格式;(2)不易弄清的地方要加上{}。例4.5:7if(ab)8{if(bc)9max=a;}10else11if(ac)12max=b;4.1.2if语句的嵌套例4.4:6if(inumber)7printf(It’slarge!);8else9if(inumber)10printf(It’ssmall!);11else12printf(It’sright!);19问题实现多分支结构的方法有哪些?方法一:if-elseif-else语句方法二:if语句的嵌套201#includestdio.h2voidmain()3{inta,b,c,max;4printf(a,b,c=);5scanf(%d,%d,%d,&a,&b,&c);7if(ab&&bc)8max=a;9elseif(bc&&ba)10max=b;11else12max=c;13printf(max=%d\n,max);14}用if-elseif-else语句改写例4.5。21比较方法一:if…elseif语句不仅要对多个条件进行并列测试,而且程序描述不够简洁。方法二:if语句的嵌套当分支较多时,嵌套的if语句层数多,程序冗长而且可读性降低。初学者要尽量避免使用if语句的嵌套来解决多分支问题。224.2switch语句1.语句格式:switch(表达式){case常量表达式1:语句1case常量表达式2:语句2……case常量表达式n:语句n[default:语句n+1]}2.执行过程:计算表达式从上至下寻找与表达式的值相匹配的case执行相应的case语句不再判断,顺序执行下面的语句23switch(表达式){case常量表达式1:语句1case常量表达式2:语句2……case常量表达式n:语句n[default:语句n+1]}注意:1.表达式可以是整型或字符型表达式;2.case后面必须是常量表达式,不能包含变量;3.每个常量表达式的值应互不相同;4.case语句先后顺序随意;5.若从上至下没有找到与表达式的值相匹配的case,含有default子句时,执行语句n+1。4.2switch语句24【例4.6】输入一个星期数字,输出其对应的英文单词。4.2switch语句1#includestdio.h2voidmain()3{inta;4printf(pleaseinputaweeknumber:);5scanf(%d,&a);6switch(a)7{case1:printf(Monday\n);8case2:printf(Tuesday\n);9case3:printf(Wednesday\n);10case4:printf(Thursday\n);11case5:printf(Friday\n);12case6:printf(Saturday\n);13case7:printf(Sunday\n);14default:printf(Error!\n);15}16}25注意使用break语句。程序修改如下:4.2switch语句1#includestdio.h2voidmain()3{inta;4printf(pleaseinputaweeknumber:);5scanf(%d,&a);6switch(a)7{case1:printf(Monday\n);break;8case2:printf(Tuesday\n);break;9case3:printf(Wednesday\n);break;10case4:printf(Thursday\n);break;11case5:printf(Friday\n);break;12case6:printf(Saturday\n);break;13case7:printf(Sunday\n);break;14default:printf(Error!\n);15}16}26【例4.7】输入任一平年的月份,输出该月份对应的天数。算法分析:设月份为month,天数为daymonth=1,3,5,7,8,10,12day=31month=4,6,9,11day=30month=2day=28注意:当多个常量表达式都执行同一组语句时,可将它们集中写在一起。问题:怎样使得case语句数目较少?4.2switch语句#includestdio.hvoidmain(){intmonth,day;printf(pleaseinputmonth:);scanf(%d,&month);switch(month){case4:case6:case9:case11:

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功