您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 65第4章 选择结构程序设计
C语言程序设计主讲:计算机应用系4.1if语句4.2switch语句4.3程序举例•习题第四章选择结构程序设计C语言的选择语句ifswitch单分支if语句双分支if语句多分支if语句选择结构又叫分支结构,是三种基本结构(顺序、选择、循环)之一,其对给定的条件进行判断,再根据判断的结果决定执行哪一个分支。4.1.1if语句的三种形式说明:1)表达式用于描述选择结构的条件,一般是关系表达式或逻辑表达式,也可以是任意的数值型表达式。2)表达式的值为真(非0)或假(0)。3)若有多条语句时,用大括号{}将几个语句括起来,构成一个复合语句。if(表达式)语句;if(表达式){语句;语句;……}4.1if语句表达式语句假(0)真(非0)图4.1单分支if语句流程图1.单分支if语句例4.1:输入两个整数,按从小到大的顺序进行输出。iNum1iNum2{it=iNum1;iNum1=iNum2;iNum2=it}假真开始输入iNum1,iNum2输出结束图4.2例4.1流程图程序如下:#includestdio.hmain(){intiNum1,iNum2,it;scanf(%d,%d,&iNum1,&iNum2);if(iNum1iNum2){it=iNum1;iNum1=iNum2;iNum2=it;}printf(%d,%d\n,iNum1,iNum2);}2.双分支if语句if(表达式)语句1;else语句2;首先先判断表达式的值若为非0则执行语句1若为0则执行语句2执行过程:if语句的双分支形式,在语法上视为一条语句。表达式语句1真语句2假图4.3双分支if语句流程图程序如下:#includestdio.hmain(){intiNum1,iNum2;scanf(%d,%d,&iNum1,&iNum2);if(iNum1iNum2)printf(%d,%d\n,iNum1,iNum2);elseprintf(%d,%d\n,iNum2,iNum1);}例4.2:使用双分支if语句实现例4.1--输入两个整数,按从小到大的顺序进行输出。iNum1iNum2原序输出真反序输出假开始输入iNum1,iNum2结束图4.5例4.2流程图练习:编程实现,从键盘输入一个字符,如果是字母,则输出对应的ASCII码,否则,输出“%”。main(){chara;scanf(%c,&a);if()printf(“\n,a);elseprintf(“\n);}a='A'&&a='Z'||a='a'&&a='z'%d%%单分支和双分支if语句一般都用于两个分支的选择结构。对于多个分支选择,可采用多分支if语句来实现。例:计算分段函数3.多分支选择语句-1(x0)y=0(x=0)1(x0)语句形式:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;…elseif(表达式n)语句n;else语句n+1;多分支if语句表达式1语句1语句2语句3...语句n语句n+1表达式2表达式3...表达式n真真真真真假假假假假图4.7多分支if语句流程图这种用if语句作为上一层if语句的语句2的结构,称为if语句的多分支选择结构。程序如下:#includestdio.hmain(){intx,y;scanf(%d,&x);if(x==0)y=0;elseif(x0)y=1;elsey=-1;printf(x=%d,y=%d\n,x,y);}-1(x0)y=0(x=0)1(x0)例4.3:计算分段函数4.1.2if语句的嵌套使用处理多重分支选择结构问题,除了使用多分支if语句外,还可以利用嵌套的if语句来实现。在if语句中又包含一个或多个if语句称为if语句的嵌套。表达式1语句3语句4表达式3真假假语句1语句2表达式2假真真图4.10If语句的嵌套使用流程图语句形式:if(表达式1)if(表达式2)语句1;else语句2;elseif(表达式3)语句3;else语句4;•说明:(1)内嵌的if语句可以嵌套在if子句中,也可以嵌套在else子句中。(2)if语句的其它嵌套形式如表4.2所示。(3)当出现多个if和多个else重叠的情况时,要特别注意if和else的配对问题。C语言规定,else总是与它前面最近的if配对,推荐使用花括号将内嵌的语句括起来。例4.4:某单位马上要加工资,增加金额取决于工龄和现工资两个因素:•对于工龄大于等于20年的,如果现工资高于2000,加200元,否则加180元;•对于工龄小于20年的,如果现工资高于1500,加150元,否则加120元。工龄和现工资从键盘输入,编程求加工资后的员工工资。程序如下:#includestdio.hmain(){floats0,s;intyear;printf(Inputs0,year:);scanf(%f,%d,&s0,&year);if(year=20){if(s0=2000)s=s0+200;elses=s0+180;}else{if(s0=1500)s=s0+150;elses=s0+120;}printf(s=%f\n,s);}year=20s=s0+150s=s0+120s0=1500真假假s=s0+200s=s0+180s0=2000真假真开始输入工龄year和现工资s0结束输出s图4.11例4.4流程图4.2Switch语句if语句是根据表达式的值来判断执行哪一分支,某些情况下,要根据表达式的不同值来判断执行某一分支。虽然也可以用多条if语句来完成这一工作,但当分支较多时,if语句的嵌套层次也会更深,程序变得复杂冗长,可读性降低,也不便于修改和扩充。c语言中提供了switch语句专门处理多分支选择的情形,更加清晰和方便有效。语句形式:switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;}执行过程说明:(1)switch后面括号内表达式的值只能是整形、字符型或枚举类型,表达式的类型和常量表达式的类型必须一致。(2)每一个case的常量表达式的值必须互不相同。(3)case常量表达式只起语句标号作用,必须用break语句终止多个case连续执行,否则只要有一个case满足后,以下的语句全部无条件执行。如:switch(inum){case1:printf(“1”);case2:printf(“2”);default:printf(“3”);}说明:(4)多个case可共用一组执行语句。switch(inum){case1:case2:case3:printf(“3”);break;}(5)default和语句n+1可以同时省略。例4.5:根据用户输入的1-7之间的任意数字,输出相应的星期值。#includestdio.hmain(){intinum;printf(inputintegernumber(1-7):);scanf(%d,&inum);switch(inum){case1:printf(Monday\n);break;case2:printf(Tuesday\n);break;case3:printf(Wednesday\n);break;case4:printf(Thursday\n);break;case5:printf(Friday\n);break;case6:printf(Saturday\n);break;case7:printf(Sunday\n);break;default:printf(InputError!\n);}}4.3程序举例例4.6:根据输入的三角形的三边判断能否组成三角形,若能则输出三角形面积。分析:(1)输入三角形的三条边a,b,c,判断是否能组成三角形。(2)如果能够组成三角形,则根据三角形面积公式,输出面积。否则,输出出错信息。a+bc&&a+cb&&b+ca求面积并输出真输出出错信息假开始输入三角形三条边a,b,c结束图4.16例4.6流程图程序如下:#includemath.h#includestdio.hvoidmain(){floata,b,c,p,s;scanf(%f,%f,%f,&a,&b,&c);if(a+bc&&a+cb&&b+ca){p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(s=%.2f\n,s);}elseprintf(Notatriangle!\n);}4.3程序举例例4.7:输入年份,判断是否为闰年。分析:(1)闰年的条件是:1)能被4整除,但不能被100整除的年份是闰年,如1996,2004。2)能被400整除的年份是闰年,如1600,2000。(2)定义整形变量year表示年份,整形变量leap纪录判断结果,若为闰年,令leap=1;反之则令leap=0。(3)最后根据leap是否为1,判断是否为“闰年”。程序如下:#includestdio.hvoidmain(){intyear,leap;printf(Inputayear:);scanf(%d,&year);if(year%4==0&&year%100!=0)leap=1;elseif(year%400==0)leap=1;elseleap=0;if(leap==1)printf(%disaleapyear.\n,year);elseprintf(%disnotaleapyear.\n,year);}4.3程序举例例4.8:输入百分制的一个学生成绩,输出对应的成绩等级。分析:(1)输入学生成绩(score),当输入的分数在0-100之间时,使用switch语句处理多分支选择,分数90分以上为A,80—89分为B,70—79分为C,60—69为D,60分以下为E;当输入的分数小于0分或大于100分时,显示出错信息;(2)在使用switch语句进行多分支选择时,由于case后的表达式必须是一个常量表达式,所以必须把0-100之间的成绩分别化成相关的常量,在此我们利用两个整数相除取整的特性来构造switch语句的表达式。程序如下:#includestdio.hmain(){intscore;printf(inputastudentscore(0-100):);scanf(%d,&score);if(score=0&&score=100)switch(score/10){case10:case9:printf(A\n);break;case8:printf(B\n);break;case7:printf(C\n);break;case6:printf(D\n);break;default:printf(E\n);}elseprintf(InputScoreError!);}本章作业•一、填空题:1—16题•二、选择题:1—9题•三、程序题:2、3题
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:65第4章 选择结构程序设计
链接地址:https://www.777doc.com/doc-3177169 .html