【文档说明】C语言第4章_选择结构课件.ppt,共(25)页,282.501 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44553.html
以下为本文档部分文字说明:
第三部分C语言的结构语句第4章选择结构问题的提出:百分制成绩的等级划分问题编程实现:给出一百分制成绩,要求输出成绩等级‘A‟、‘B‟、‘C‟、‘D‟、‘E‟。90分以上为‘A‟等,89~80分为‘B‟等,79~70分为‘C‟等,69~60分为‘D‟等,60分以下为‘E‟等。假
定成绩为整型数据。这显然是一个必须用选择语句才能解决的问题。本章将围绕此问题不断地尝试不同的解法。§4.1if语句(条件选择语句)if语句的三种形式形式一:单分支格式:if(expression)statement执行过程:exprstatemen
t非0=0例:if(x>y)printf(“%d”,x);exprstatement1statement2非0=0形式二:双分支格式:if(expression)statement1elsestatement2执行过程:例:if(x>y)max=x;elsem
ax=y;形式三:多分支格式:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2
expr3statemntnstatemnt3statemnt2非0非0=0=0执行过程:例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salar
y>400)index=0.1;elseindex=0;如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(„a‟)printf(“%d”,‟a‟);说明:if后面的表达式类型任意(关键:非0为真)语句可以
是复合语句if(x)if(x!=0)if(!x)if(x==0)例考虑下面程序的输出结果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%
d,%d\n”,x,y);}CompileError!if后只能管一条语句/*ch4_1.c*/#include<stdio.h>main(){intx,y;printf("Enteraninteger:");scanf("%d",&x);y=x;if(y<0)y=-y;pr
intf("\ninteger:%d--->absolutevalue:%d\n",x,y);}例求一个数的绝对值运行:Enteraninteger:-12integer:-12--->absolutevalue:12/*ch4_2.c*/#include<
stdio.h>main(){inta,b;printf("Enterintegera:");scanf("%d",&a);printf("Enterintegerb:");scanf("%d",&b
);if(a==b)printf("a==b\n");elseprintf("a!=b\n");}例输入两个数并判断两数相等否运行:Enterintegera:12Enterintegerb:12a==b运
行:Enterintegera:12Enterintegerb:9a!=bmain(){intscore;scanf("%d",&score);if(score<60)printf(“grade=E”);if(score
>=60&&score<70)printf(“grade=D”);if(score>=70&&score<80)printf(“grade=C”);if(score>=80&&score<90)printf(“grade=B”);if(score>=90)printf(“
grade=A”);}【例】百分制成绩的等级划分问题之解法1:仅用if单分支语句实现if语句嵌套:一般形式:if(expr1)if(expr2)statement1elsestatement2elsei
f(expr3)statement3elsestatement4内嵌if内嵌ifif(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1)if(expr
2)statement1elsestatement3内嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4内嵌if例输入两数并判断其大小关系/*ch4_4.c*
/#include<stdio.h>main(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);if(x!=y)if(x>y)printf
("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");}运行:Enterintegerx,y:12,23X<YEnterintegerx,y:12,6X>YEnterintegerx,y:12,12X
==Yif~else配对原则:缺省{}时,else总是和它上面离它最近的未配对的if配对if(……)if(……)if(……)else…...else…...else…...例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修
改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);实现if~else正确配对方法:加{}例考虑下面程序输出结果:main(){intx=100,a=
10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;printf(“%d”,x);}结果:-1注意条件表达式之间的顺
序关系【例】百分制成绩的等级划分问题之解法2:if嵌套方法main(){intgrade;printf("inputthegrade:");scanf("%d",&grade);if(grade>=90)
printf("A\n");elseif(grade>=80)printf("B\n");elseif(grade>=70)printf("C\n");elseif(grade>=60)printf("D\n");elseprintf("E\
n");}§4.2switch语句(开关分支语句)一般形式:switch(表达式){caseE1:语句组1;break;caseE2:语句组2;break;…….caseEn:语句组n;break;[default:语句组;break;]}执行过程:switch表达式
语句组1语句组2语句组n语句组…...E1E2Endefaultcase说明:E1,E2,…En是常量(整型/字符型)表达式,且值必须互不相同,不能表示范围,如x>0语句标号作用,必须用break
跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句如:……case„A‟:case„B‟:case„C‟:printf(“score>60\n”);break;……..例switch(sco
re){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}运行结果
:score为5时,输出:Verygood!Good!Pass!Fail!dataerror!如果score分别为3,2,1呢?voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){
case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}运行结果:a=2,b=1【例】根据程序写出运行结果/*ch4
_5.c*/#include<stdio.h>main(){intc;printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoo
dmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':printf("\nHello!\n");break;default:printf("\n????????\n");break;}}例根据输入
字母输出字符串main(){intgrade;printf("inputthegrade:");scanf("%d",&grade);switch(grade/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");break;}}【例】百分制成绩的等级划分问题之解法3:【例】从键盘输入三个整数a、b、c,输出最大的一个。main(){inta,b,c,max;printf("inputa,b,c:");scanf("
%d,%d,%d",&a,&b,&c);if(a>b)if(a>c)max=a;elsemax=c;elseif(b>c)max=b;elsemax=c;printf("themaxis:%d\n",max);}【例】根据程序写出运行结果答案:2答案:13main
(){intx=2,y=-1,z=2;if(x<y)if(y<0)z=0;elsez+=1;printf(“%d\n“,z);}main(){inti=10;switch(i){case9:i+=1;case10:i+=1;case11:i+=1;default:i+=1
;}printf("%d\n",i);}【例】根据输入的年份和月份,计算该月有多少天?(考虑闰年和平年的情况)main(){intyear,month,day;printf(“inputtheyearandmonth:”);scanf(“%d,%d”,&year,&month);swit
ch(month){case4:case6:case9:case11:day=30;break;case2:if(year%4==0&&year%100!=0||year%400==0)day=29;elseday=28;break;
default:day=31;break;}printf(“Themonthis%dday\n”,day);}【例】判断一个输入的3位数是否为水仙花数main(){inta,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语句。在实际运用中,应根据具体的情况灵活使用这两种语句来解决问题。