1、 第三部分第三部分 C语言的结构语句语言的结构语句 第第4章章 选择结构选择结构问题的提出:百分制成绩的等级划分问题编程实现:给出一百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A等,8980分为B等,7970分为C等,6960分为D等,60分以下为E等。假定成绩为整型数据。这显然是一个必须用选择语句才能解决的问题。本章将围绕此问题不断地尝试不同的解法。4.1 if语句(条件选择语句)vif语句的三种形式l形式一:单分支u格式:if(expression)statementu执行过程:exprstatement非0=0例:if(xy)printf(“%d”,x);exprstat
2、ement1statement2非0=0l形式二:双分支u格式:if(expression)statement1 else statement2u执行过程:例:if(xy)max=x;else max=y;l形式三:多分支u格式:if(expr1)statement1else if(expr2)statement2else if(expr3)statement3.else statementn expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0u执行过程:例:if(salary1000)index=0.4;else i
3、f(salary800)index=0.3;else if(salary600)index=0.2;else if(salary400)index=0.1;else index=0;如:if(a=b&x=y)printf(“a=b,x=y”);if(3)printf(“OK”);if(a)printf(“%d”,a);l说明:uif后面的表达式类型任意(关键:非0为真)u语句可以是复合语句u if(x)if(x!=0)if(!x)if(x=0)例 考虑下面程序的输出结果:#include main()int x,y;scanf(“%d,%d”,&x,&y);if(xy)x=y;y=x;else
4、 x+;y+;printf(“%d,%dn”,x,y);Compile Error!if后只能管后只能管一条语句一条语句/*ch4_1.c*/#include main()int x,y;printf(Enter an integer:);scanf(%d,&x);y=x;if(yabsolute value:%dn,x,y);例 求一个数的绝对值运行:Enter an integer:-12 integer:-12-absolute value:12/*ch4_2.c*/#include main()int a,b;printf(Enter integer a:);scanf(%d,&a);
5、printf(Enter integer b:);scanf(%d,&b);if(a=b)printf(a=bn);else printf(a!=bn);例 输入两个数并判断两数相等否运行:Enter integer a:12 Enter integer b:12 a=b 运行:Enter integer a:12 Enter integer b:9 a!=b main()int score;scanf(%d,&score);if(score=60&score=70&score=80&score=90)printf(“grade=A”);【例】百分制成绩的等级划分问题之解法1:仅用if单分支语
6、句实现vif语句嵌套:l一般形式:if(expr1)if(expr2)statement1 else statement2else if(expr3)statement3 else statement4内嵌if内嵌ifif(expr1)if(expr2)statement1 else statement2内嵌ifif(expr1)if(expr2)statement1else statement3 内嵌ifif(expr1)statement1else if(expr3)statement3 else statement4内嵌if例 输入两数并判断其大小关系/*ch4_4.c*/#includ
7、e main()int x,y;printf(Enter integer x,y:);scanf(%d,%d,&x,&y);if(x!=y)if(xy)printf(XYn);else printf(XYn);else printf(X=Yn);运行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Ylif else 配对原则:缺省 时,else总是和它上面离它最近的未配对的if配对if()if()if()else.else.else.例:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”)
8、;修改:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);实现if else 正确配对方法:加 例 考虑下面程序输出结果:main()int x=100,a=10,b=20;int v1=5,v2=0;if(a=90)printf(An);else if(grade=80)printf(Bn);else if(grade=70)printf(Cn);else if(grade=60)printf(Dn);else printf(En);4.2 switch语句(开关分支语句)v一般形式:switch(表达式)case E1:语句组 1;brea
9、k;case E2:语句组 2;break;.case En:语句组 n;break;default:语句组;break;v执行过程:switch表达式语句组1语句组2语句组n语句组.E 1E 2Endefaultcase v说明:lE1,E2,En是常量(整型/字符型)表达式,且值必须互不相同,不能表示范围,如x0 l语句标号作用,必须用break跳出lcase后可包含多个可执行语句,且不必加 lswitch可嵌套l多个case可共用一组执行语句如:case A:case B:case C:printf(“score60n”);break;.例 switch(score)case 5:pri
10、ntf(“Very good!”);case 4:printf(“Good!”);case 3:printf(“Pass!”);case 2:printf(“Fail!”);default :printf(“data error!”);运行结果:score为5时,输出:Very good!Good!Pass!Fail!data error!如果score分别为3,2,1呢?void main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case
11、3:a+;b+;printf(“na=%d,b=%d”,a,b);运行结果:a=2,b=1【例】根据程序写出运行结果/*ch4_5.c*/#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:printf(nGood night!n);break;case h:printf(nHello!n);break;default:printf(n?n);break;例 根据输入字母输出字符串main()int gr
12、ade;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;【例】百分制成绩的等级划分问题之解法3:【例】从键盘输入三个整数a、b、c,输出最大的一个。main()int a,b,c,max;printf(input a,b,c:);scanf(%d,%d,%d,&a,&b,&
13、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);【例】根据程序写出运行结果答案:答案:2答案:答案:13main()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;default:i+=1;printf(%dn,i);【例】根据输入的年份和月份,计算该月有多少天?(考虑闰年和平
14、年的情况)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%400=0)day=29;else day=28;break;default:day=31;break;printf(“The month is%d dayn”,day);【例】判断一个输入的3位数是否为水仙花数main()int
15、 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语句的嵌套中if和else的匹配关系;switch语句(按整型、配标号、添按整型、配标号、添break、可跳、可跳出出)主要用于对单条件进行测试,从其多种结果中取一种的情形,要注意在其case分支语句中使用间断语句break语句。在实际运用中,应根据具体的情况灵活使用这两种语句来解决问题。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。