《C语言课件第5章选择结构2》由会员分享,可在线阅读,更多相关《C语言课件第5章选择结构2(42页珍藏版)》请在金锄头文库上搜索。
1、第第5 5章章 选择结构程序设计选择结构程序设计主要内容:主要内容:关系运算符和关系表达式关系运算符和关系表达式关系运算符和关系表达式关系运算符和关系表达式逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 if-elseif-else(重点、难点)(重点、难点)(重点、难点)(重点、难点)switchswitch条件运算符和条件表达式条件运算符和条件表达式条件运算符和条件表达式条件运算符和条件表达式( (了解了解了解了解) )根据选择结构的组成特点,我们在分析问题时着重根据选择结构的组成特点,我们在分析问题时着重明确以下两点:明确以下两点:1 1)条件是
2、什)条件是什 么。么。2 2)条件成立和不成立时分别执行什么操作。)条件成立和不成立时分别执行什么操作。 n n简单条件用关系表达式来表示简单条件用关系表达式来表示简单条件用关系表达式来表示简单条件用关系表达式来表示n n例例例例5.15.1判断一个整数判断一个整数判断一个整数判断一个整数n n是奇数还是偶数(设是奇数还是偶数(设是奇数还是偶数(设是奇数还是偶数(设n n由用户输入)由用户输入)由用户输入)由用户输入)分析:第一步,输入整数分析:第一步,输入整数分析:第一步,输入整数分析:第一步,输入整数n n。第二步,判断:第二步,判断:第二步,判断:第二步,判断:若条件若条件若条件若条件“
3、 “n%2n%2等于等于等于等于0“0“成立,则输出成立,则输出成立,则输出成立,则输出“ “n n为偶数为偶数为偶数为偶数“ “;否则输出;否则输出;否则输出;否则输出“ “n n为奇数为奇数为奇数为奇数“ “。5.1关系运算符和关系表达式关系运算符和关系表达式main()main()intn;intn;printf(“nenterintn:”);printf(“nenterintn:”);scanf(“%d”,&n);scanf(“%d”,&n);if(if(n%2=0n%2=0) )printf(“n%disevennumber“,n);printf(“n%disevennumber“,
4、n);elseelseprintf(“n%disoddnumber”,n);printf(“n%disoddnumber”,n);开始输入nn%2为0是偶数是奇数结束输入nn n例例例例5.25.2输入任一考生的考号及成绩,判断其是否能上大学。输入任一考生的考号及成绩,判断其是否能上大学。输入任一考生的考号及成绩,判断其是否能上大学。输入任一考生的考号及成绩,判断其是否能上大学。(设分数线为(设分数线为(设分数线为(设分数线为600600,若能上,则输出,若能上,则输出,若能上,则输出,若能上,则输出“success“success“,否则输,否则输,否则输,否则输出出出出”failure”f
5、ailure”)。)。)。)。分析:第二步是选择结构,条件是分析:第二步是选择结构,条件是分析:第二步是选择结构,条件是分析:第二步是选择结构,条件是“score“score大于等于大于等于大于等于大于等于600”600”,main()main()intno;intno;floatscore;floatscore;printf(“nenterno,score:”);printf(“nenterno,score:”);scanf(“%d%f”,&no,&score);scanf(“%d%f”,&no,&score);if(if(score=600score=600)printf(“n%d:suc
6、cess”,no);printf(“n%d:success”,no);elseelseprintf(“n%d:failure.”,no);printf(“n%d:failure.”,no); n n关系表达式的值关系表达式的值关系表达式的值关系表达式的值: :若条件满足,则关系表达式的值为若条件满足,则关系表达式的值为若条件满足,则关系表达式的值为若条件满足,则关系表达式的值为ture(1)ture(1);否则,关系表达式的值为;否则,关系表达式的值为;否则,关系表达式的值为;否则,关系表达式的值为false(0)false(0)。1. 1.关系运算符关系运算符关系运算符关系运算符: :=!=
7、!=例如下列关系表达式例如下列关系表达式例如下列关系表达式例如下列关系表达式: :abab表示条件表示条件表示条件表示条件“a“a大于大于大于大于b“b“,xx!=0=0表示条件表示条件表示条件表示条件“x“x等于等于等于等于0“0“,a+bx*ya+b关系运算符关系运算符关系运算符关系运算符赋值运算符赋值运算符赋值运算符赋值运算符且且且且=高于高于高于高于=!=!=3. 3.结合性结合性结合性结合性: : 自左向右(一般很少连用)。自左向右(一般很少连用)。自左向右(一般很少连用)。自左向右(一般很少连用)。4. 4. 如:如:如:如: abbb)b)c5. 5.f=ag+1f=ag+1表示
8、表示表示表示 f=(a(g+1)f=(adca+bdc也是合法的关系表达也是合法的关系表达也是合法的关系表达也是合法的关系表达式,但在实际应用中很少使用;因为它不能表示:式,但在实际应用中很少使用;因为它不能表示:式,但在实际应用中很少使用;因为它不能表示:式,但在实际应用中很少使用;因为它不能表示:a+ba+b大于大于大于大于c c且大于且大于且大于且大于d d。 n n问题问题问题问题: : 如何表示:如何表示:如何表示:如何表示:axbaxb0y100y=15&temperature=15&temperature1!x-1、!y-0!y-0x&y-0x|y-1x&y-0x|y-1特别提示
9、特别提示特别提示特别提示:if(!x)if(!x) 等价于等价于等价于等价于if(x=0)if(x=0) 2.2.逻辑表达式逻辑表达式逻辑表达式逻辑表达式: :由逻辑运算符将一个或多个表达式连由逻辑运算符将一个或多个表达式连由逻辑运算符将一个或多个表达式连由逻辑运算符将一个或多个表达式连接起来的式子。比如:接起来的式子。比如:接起来的式子。比如:接起来的式子。比如:1)a1)a和和和和b b中只有一个为中只有一个为中只有一个为中只有一个为00的逻辑表达式为:的逻辑表达式为:的逻辑表达式为:的逻辑表达式为:a+b!=0&a*b=0a+b!=0&a*b=02)2)某英语专业的招生条件某英语专业的招
10、生条件某英语专业的招生条件某英语专业的招生条件“ “总分总分总分总分(total)(total)超过分数线超过分数线超过分数线超过分数线(600)(600)并且英语成绩(并且英语成绩(并且英语成绩(并且英语成绩(scorescore)不低于)不低于)不低于)不低于8585分分分分“ “,该条,该条,该条,该条件的逻辑表达式为:件的逻辑表达式为:件的逻辑表达式为:件的逻辑表达式为:total600&score=85total600&score=85 3)3)判断某年是润年应满足以下两个条件之一:该年能判断某年是润年应满足以下两个条件之一:该年能判断某年是润年应满足以下两个条件之一:该年能判断某年
11、是润年应满足以下两个条件之一:该年能被被被被4 4整除但不能被整除但不能被整除但不能被整除但不能被100100整除,或该年能被整除,或该年能被整除,或该年能被整除,或该年能被400400整除。整除。整除。整除。该条件对应的逻辑表达式为:该条件对应的逻辑表达式为:该条件对应的逻辑表达式为:该条件对应的逻辑表达式为:year%4=0&year%100!=0|year%400=0year%4=0&year%100!=0|year%400=0 3 3 逻辑运算符的优先级和结合性逻辑运算符的优先级和结合性逻辑运算符的优先级和结合性逻辑运算符的优先级和结合性当条件表达式中同时出现多个运算符时,首先按优当条
12、件表达式中同时出现多个运算符时,首先按优先级计算,当同时出现多个优先级相同的运算符先级计算,当同时出现多个优先级相同的运算符时,再按结合性计算。时,再按结合性计算。优先级:优先级:! 算术运算符算术运算符算术运算符算术运算符 关系运算符关系运算符关系运算符关系运算符&|&|赋值运算符赋值运算符赋值运算符赋值运算符结合性:结合性:逻辑与逻辑与&、逻辑或、逻辑或| |的结合性的结合性: :自左向右自左向右,逻辑非逻辑非!的结合性的结合性: :自右向左自右向左 例如:例如: (下页)(下页)优先级与结合性举例n n例如:例如: 设设设设inth=3,j=3,k=3;inth=3,j=3,k=3;n
13、ndoublex=0,y=2.3;doublex=0,y=2.3;n n计算下列表达式的值:计算下列表达式的值:计算下列表达式的值:计算下列表达式的值:n nh&j&kh&j&k等价于等价于等价于等价于(h&j)&k(h&j)&kn nhj&xyhj&xy等价于等价于等价于等价于 (hjhj)&(xy)&(xy)n nhk|xyhk|xy等价于等价于等价于等价于(hk)|(xy)(hk)|(xb)&(n=cd)(m=ab)&(n=cd)后,后,后,后,n n的值为()。的值为()。的值为()。的值为()。A.1B.0A.1B.0C C.2D.3.2D.3n n2 2)当)当)当)当c c的值不
14、为的值不为的值不为的值不为0 0时,在下列选项中能正确将时,在下列选项中能正确将时,在下列选项中能正确将时,在下列选项中能正确将c c的值赋的值赋的值赋的值赋给变量给变量给变量给变量a a、b b的是()的是()的是()的是()AAc=b=a;B.(a=c)|(b=c);c=b=a;B.(a=c)|(b=c);C C.(a=c)&(b=c);D.(a=c)&(b=c);D.a=c=b;a=c=b;5.3if语句语句n nif if语句能实现所有的选择结构语句能实现所有的选择结构语句能实现所有的选择结构语句能实现所有的选择结构n n例例5.55.5将任意两个整数将任意两个整数mm、n n中的较大
15、数送给中的较大数送给x x,较小,较小数送给数送给y y,然后按大小顺序输出,然后按大小顺序输出( (设设mm、n n的值由键盘的值由键盘输入)输入)n n分析:共分三步,分析:共分三步,S1:S1:输入两个整数给输入两个整数给mm和和n n。S2:S2:判断判断mm、n n的大小并分别给的大小并分别给x x和和y y赋值。赋值。S3:S3:输出输出x x和和y y。其中第二步用选择结构其中第二步用选择结构. .main()main()intm,n,x,y;intm,n,x,y;printf(“npleaseentertwointegersprintf(“npleaseentertwointe
16、gers:”);”);scanf(“%d%d”,&m,&n);scanf(“%d%d”,&m,&n);if(mn)x=m;y=n;/*if(mn)x=m;y=n;/*复合语句复合语句复合语句复合语句*/*/elseelsex=n;y=m;x=n;y=m;printf(“nx=%d,y=%d”,x,y);printf(“nx=%d,y=%d”,x,y); 思考:若条件改为:思考:若条件改为:思考:若条件改为:思考:若条件改为:mnmn,如何实现,如何实现,如何实现,如何实现? ?n n1.If1.If语句的一般形式:语句的一般形式:n ni if(f(表达式表达式表达式表达式) )语句语句语句语
17、句1 1elseelse语句语句语句语句2 2执行过程执行过程: :(如右图(如右图)格式说明格式说明 :语句语句语句语句1 1和和和和语句语句语句语句2 2在语法上是一个语句,可以在语法上是一个语句,可以在语法上是一个语句,可以在语法上是一个语句,可以是简单语句,也可以是复合语句。在此要特别注意复是简单语句,也可以是复合语句。在此要特别注意复是简单语句,也可以是复合语句。在此要特别注意复是简单语句,也可以是复合语句。在此要特别注意复合语句中一对合语句中一对合语句中一对合语句中一对的正确使用的正确使用的正确使用的正确使用 。条件表达式语句1语句2YN2.if语句的简化形式语句的简化形式n n例
18、例5.65.6从键盘接收一个字符,若为大写字母,则将其转换成小从键盘接收一个字符,若为大写字母,则将其转换成小写字母并输出;否则输出原字符。写字母并输出;否则输出原字符。 n n 分析:共三步,其中第二步判断分析:共三步,其中第二步判断chch是大写字母的条件是:是大写字母的条件是:chch在在AZAZ之间之间#include#includemain()main()charch;charch;printf(“nenteracharacter:”);/*printf(“nenteracharacter:”);/*第一步,输入第一步,输入第一步,输入第一步,输入ch*/ch*/ch=getchar
19、();getchar();ch=getchar();getchar();if(if(ch=A&ch=A&ch=Z)/*)/*第二步,判断并处理第二步,判断并处理第二步,判断并处理第二步,判断并处理*/*/ch=ch+32;/*32:ch=ch+32;/*32:大小写字母的大小写字母的大小写字母的大小写字母的ASCIIASCII码之差为码之差为码之差为码之差为32*/32*/putchar(ch);/*putchar(ch);/*第三步,输出第三步,输出第三步,输出第三步,输出*/*/ 2.if语句的简化形式语句的简化形式n nif(expression)if(expression)statem
20、ent1statement1 n n执行过程如图:执行过程如图:例:输入任意数例:输入任意数n n,输出其绝对值。输出其绝对值。main()main()floata;floata;scanf(“%f”,&a);scanf(“%f”,&a);if(a0)a=-a;if(am”“nm”;条件成立时输出;条件成立时输出;条件成立时输出;条件成立时输出“big”“big”;否则输出;否则输出;否则输出;否则输出“small”“small”。很明显,很明显,很明显,很明显,又是一个选择结构又是一个选择结构又是一个选择结构又是一个选择结构。main()main()intm=15,n;intm=15,n;p
21、rintf(nguessanum:);printf(nguessanum:);scanf(%d,&n);/scanf(%d,&n);/if(m=n)if(m=n)printf(RIGHT);/*printf(RIGHT);/*语句语句语句语句1*/1*/elseelseprintf(nWRONG);printf(nWRONG);if(nm)if(nm)printf(BIG);/*printf(BIG);/*语句语句语句语句2*/2*/elseelseprintf(SMALL);printf(SMALL); n n例例5.85.8某幼儿园只接收某幼儿园只接收2626岁的小孩,其中岁的小孩,其中2
22、323岁编岁编入小班,入小班,4545岁编入中班,岁编入中班,6 6岁编入大班。编程实岁编入大班。编程实现,对输入的任意一个年龄,输出该编入什麽班,现,对输入的任意一个年龄,输出该编入什麽班,或者告知或者告知“ “不收不收“ “。n n分析:首先根据条件分析:首先根据条件“ “年龄在年龄在2626岁之间岁之间” ”判断判断是是“ “收收” ”还是还是“ “不收不收“ “,若条件满足,则执行的,若条件满足,则执行的操作为:(操作为:(1 1)判断该编入何班;否则,输出)判断该编入何班;否则,输出“ “不收不收” ”。其次,分析(其次,分析(1 1)如何实现。)如何实现。提示:本例可用不同的程序实
23、现。提示:本例可用不同的程序实现。如将条件改为如将条件改为“ “年龄超出年龄超出2626岁岁” ”;或者从条件;或者从条件“ “年龄小于年龄小于2”2”开始判断。试编程实现。开始判断。试编程实现。n nmain()main()intage;intage;printf(“nenterage:”);printf(“nenterage:”);scanf(“%d”,&age);scanf(“%d”,&age);if(age=2&age=2&age=6) if(age=3)/*if(age=3)/*语句语句语句语句1 1开始开始开始开始*/*/printf(“nsmallclass”);/*printf
24、(“nsmallclass”);/*语句语句语句语句1_1*/1_1*/elseelseif(age=5)/*if(age0)if(n0)if(n%2=0)if(n%2=0)printf(“positiveandeven.n”);printf(“positiveandeven.n”);elseelseprintf(“negativen”);printf(“negativen”); 画出该程序的流程图,程序结构更清楚。画出该程序的流程图,程序结构更清楚。n n例5.10程序(2):main()intn;printf(“nenterainteger:”);scanf(“%d”,&n);if(n0)
25、if(n%2=0)printf(“positiveandeven.n”);elseprintf(“negativen”);4条件运算符条件运算符n n使用使用使用使用if if语句时,有时是为了根据条件给同一个变量赋不同语句时,有时是为了根据条件给同一个变量赋不同语句时,有时是为了根据条件给同一个变量赋不同语句时,有时是为了根据条件给同一个变量赋不同的值,比如:的值,比如:的值,比如:的值,比如:main()main()intx,y;intx,y;scanf(“%d”,&x);scanf(“%d”,&x); if(x0)y=x+1;if(x0)y=x+1;elsey=x*x+1;elsey=x
26、*x+1;printf(“nx=%d,y=%d”,x,y);printf(“nx=%d,y=%d”,x,y); n n本例中,当条件满足或不满足时分别执行一个赋值语句,本例中,当条件满足或不满足时分别执行一个赋值语句,本例中,当条件满足或不满足时分别执行一个赋值语句,本例中,当条件满足或不满足时分别执行一个赋值语句,且都是给变量且都是给变量且都是给变量且都是给变量yy赋值。用赋值。用赋值。用赋值。用C C语言提供的条件运算符描述,语言提供的条件运算符描述,语言提供的条件运算符描述,语言提供的条件运算符描述,比用比用比用比用if if语句更简练。上述语句更简练。上述语句更简练。上述语句更简练。上
27、述if if语句等价于:语句等价于:语句等价于:语句等价于:n n y=x0?x+1:x*x+1y=x0?x+1:x*x+1;其中其中其中其中“x0?x+1:x*x+1”“x0?x+1:x*x+1”是一个是一个是一个是一个“ “条件表达式条件表达式条件表达式条件表达式” ”,条件运算符条件运算符条件运算符条件运算符:?:?:条件表达式的一般格式:条件表达式的一般格式:条件表达式的一般格式:条件表达式的一般格式:表达式表达式表达式表达式1 1?表达式?表达式?表达式?表达式2:2:表达式表达式表达式表达式3 3n n计算过程计算过程计算过程计算过程: : 首先计算表达式首先计算表达式首先计算表达
28、式首先计算表达式1 1;若其值为真(非;若其值为真(非;若其值为真(非;若其值为真(非0 0),则计算表达式),则计算表达式),则计算表达式),则计算表达式2 2,取表达式取表达式取表达式取表达式2 2的值作为整个条件表达式的值;否则,计算表的值作为整个条件表达式的值;否则,计算表的值作为整个条件表达式的值;否则,计算表的值作为整个条件表达式的值;否则,计算表达式达式达式达式3 3,取表达式,取表达式,取表达式,取表达式3 3的值作为整个条件表达式的值。的值作为整个条件表达式的值。的值作为整个条件表达式的值。的值作为整个条件表达式的值。n n优先级优先级优先级优先级: :条件运算符的优先级比关
29、系运算符和算术运算符条件运算符的优先级比关系运算符和算术运算符条件运算符的优先级比关系运算符和算术运算符条件运算符的优先级比关系运算符和算术运算符都低,比赋值运算符高。都低,比赋值运算符高。都低,比赋值运算符高。都低,比赋值运算符高。例如例如例如例如: :y=x0?x+1:x*x+1y=x0?x+1:x*x+1 等价于等价于等价于等价于y=(y=((x0x0)? ?(x+1x+1):(x*x+1x*x+1)) )n n说明:并不是所有的说明:并不是所有的说明:并不是所有的说明:并不是所有的if if语句都能用条件表达式实现。如语句都能用条件表达式实现。如语句都能用条件表达式实现。如语句都能用条
30、件表达式实现。如if(n0)a=6;if(n0)a=6;elseb=8;elseb=8;5.4switch语句语句n nswitchswitch语句可用来处理语句可用来处理一部分特殊的多分支选择一部分特殊的多分支选择结构结构。即根据某个表达式的值进行选择,而不。即根据某个表达式的值进行选择,而不能根据表达式的取值范围作出选择,所以使用能根据表达式的取值范围作出选择,所以使用时有很大的局限性。时有很大的局限性。. .n n如学生成绩等级分类,幼儿园分班等。如学生成绩等级分类,幼儿园分班等。若用若用if if语句实现,程序冗长,嵌套层次多,结语句实现,程序冗长,嵌套层次多,结构不够清晰。而用构不够
31、清晰。而用switchswitch语句则更清楚。语句则更清楚。n n例例5.125.12输入某个成绩等级,输出该等级对应的输入某个成绩等级,输出该等级对应的分数段。分数段。(A:90100,B:8089,C:7079,D:6070,E:60A:90100,B:8089,C:7079,D:6070,E:60以下)以下) #include/*#include/*例例例例5.12*/5.12*/main()main()chargrade;chargrade;printf(nenterscoregrade(ae):);/*printf(nenterscoregrade(ae):);/*输出提示信息输出
32、提示信息输出提示信息输出提示信息*/*/grade=getchar();getchar();/*grade=getchar();getchar();/*接收输入的一个字符接收输入的一个字符接收输入的一个字符接收输入的一个字符*/*/ switch(grade)switch(grade)casea:printf(n90100);/*casecasea:printf(n90100);/*case后是一常量后是一常量后是一常量后是一常量*/*/ break;break; /*/*多多多多个个个个语语语语句句句句组组组组成成成成的的的的语语语语句句句句段段段段1*/1*/caseb:printf(n8
33、089);break;caseb:printf(n8089);break;casec:printf(“n7079”);break;/*casecasec:printf(“n7079”);break;/*case后有空格后有空格后有空格后有空格*/*/cased:printf(n6069.);break;cased:printf(n6069.);break;casee:printf(n60);break;casee:printf(n60);break;default:printf(nerror:outofthefield(ae).);default:printf(nerror:outofthef
34、ield(ae).);/*switch/*switch语句结束语句结束语句结束语句结束*/*/ n nswitchswitch语句的一般形式为语句的一般形式为语句的一般形式为语句的一般形式为 :switch(expression)switch(expression)casecase常量表达式常量表达式常量表达式常量表达式1 1:语句段:语句段:语句段:语句段1 1break;break;casecase常量表达式常量表达式常量表达式常量表达式2 2:语句段:语句段:语句段:语句段2 2break;break; casecase常量表达式常量表达式常量表达式常量表达式NN:语句段:语句段:语句段
35、:语句段NNbreak;break;default:default:语句段语句段语句段语句段N+1N+1 ( (格式说明格式说明格式说明格式说明) )n nswitch语句的执行过程语句的执行过程:计算计算计算计算switchswitch后面括号中的表达式。后面括号中的表达式。后面括号中的表达式。后面括号中的表达式。 将表达式的值与第一个将表达式的值与第一个将表达式的值与第一个将表达式的值与第一个casecase后的常量表达式的值后的常量表达式的值后的常量表达式的值后的常量表达式的值比较,比较,比较,比较,若相等,则从语句段若相等,则从语句段若相等,则从语句段若相等,则从语句段1 1开始,执行
36、语句段开始,执行语句段开始,执行语句段开始,执行语句段1 1及其以后及其以后及其以后及其以后的所有语句,不再进行判断的所有语句,不再进行判断的所有语句,不再进行判断的所有语句,不再进行判断( (即执行完语句段即执行完语句段即执行完语句段即执行完语句段1 1后,后,后,后,接着执行后面的接着执行后面的接着执行后面的接着执行后面的casecase或或或或defaultdefault语句中的语句段语句中的语句段语句中的语句段语句中的语句段) ),直至遇到直至遇到直至遇到直至遇到breakbreak语句或执行至语句或执行至语句或执行至语句或执行至switchswitch语句的末尾;语句的末尾;语句的末
37、尾;语句的末尾;若不相等,再与第二个若不相等,再与第二个若不相等,再与第二个若不相等,再与第二个casecase后的常量表达式比较,后的常量表达式比较,后的常量表达式比较,后的常量表达式比较,依此类推;若所有的依此类推;若所有的依此类推;若所有的依此类推;若所有的casecase均不匹配,则执行均不匹配,则执行均不匹配,则执行均不匹配,则执行defaultdefault后的语句段后的语句段后的语句段后的语句段n+1n+1。main()/*main()/*幼儿园编班问题幼儿园编班问题幼儿园编班问题幼儿园编班问题*/*/intage;intage;printf(nenterchildsage:);
38、printf(nenterchildsage:);scanf(%d,&age);scanf(%d,&age);switch(age)switch(age)case2:case2:case3:printf(“nsmallclass”);/*case3:printf(“nsmallclass”);/*当当当当ageage为为为为2 2或或或或3 3时时时时*/*/break;/*break;/*跳出跳出跳出跳出switchswitch语句语句语句语句*/*/case4:case4:case5:printf(nmiddleclass.);break;case5:printf(nmiddleclass
39、.);break;case6:printf(nbigclass.);break;case6:printf(nbigclass.);break;default:printf(ncantaccept.);default:printf(ncantaccept.);/*/*实现多个实现多个实现多个实现多个casecase分支共用一个语句段分支共用一个语句段分支共用一个语句段分支共用一个语句段。*/*/n n例例5.145.14输入任一百分之成绩,输出其对应的成输入任一百分之成绩,输出其对应的成绩等级:绩等级:A(90100),B(8089),CA(90100),B(8089),C(70797079),
40、),D(6069),E(60)D(6069),E(60)。n n分析:因为分析:因为casecase后必须是一常量,所以要用后必须是一常量,所以要用switchswitch语句实现,必须先找出各个分数段对应语句实现,必须先找出各个分数段对应的常量。很容易可看出,除的常量。很容易可看出,除100100分、分、6060分以下分以下的分数外,其它分数段内的分数除以的分数外,其它分数段内的分数除以1010取整结取整结果相同。果相同。main()/*main()/*例例例例5.14*/5.14*/intscore,n;intscore,n;printf(nenterascore(0100):);prin
41、tf(nenterascore(0100):);scanf(%d,&score);scanf(%d,&score); ifif(score=100)n=score/10;(score=100)n=score/10;elseelsen=11;n=11;if(n6)n=5;/*if(n6)n=5;/*当当当当n6n6时,说明时,说明时,说明时,说明score60score60,令,令,令,令n=5*/n=5*/ switch(n)switch(n)case10:/*case10:/*当当当当scorescore为为为为100100时,时,时,时,n n的值为的值为的值为的值为10*/10*/cas
42、e9:printf(“nA”);break;/*ncase9:printf(“nA”);break;/*n为为为为9 9或或或或1010时共用该语句段时共用该语句段时共用该语句段时共用该语句段*/*/case8:printf(nB);break;case8:printf(nB);break;case7:printf(nC);break;case7:printf(nC);break;case6:printf(nD);break;case6:printf(nD);break;case5:printf(nE);break;case5:printf(nE);break;default:printf(n
43、entererror.);default:printf(nentererror.); n n思考:如果将分数段的划分改为:思考:如果将分数段的划分改为:A(10085),A(10085),B(7084),C(6069),D(60),B(7084),C(6069),D(60),用用switchswitch语句实语句实现是否合适?现是否合适?n n特别说明特别说明:并不是所有的多分支结构都可用:并不是所有的多分支结构都可用switchswitch语句实现,只有当各个分支能分别与某语句实现,只有当各个分支能分别与某个常量对应时,才适合采用个常量对应时,才适合采用switchswitch语句。语句。上
44、机调试n n一、习题一、习题 第一部分第一部分5 5、下面程序的执行结果是:、下面程序的执行结果是:main()main()intx=-1,y=3,k;intx=-1,y=3,k;k=(x+=0)&(!(y-=0);k=(x+=0)&(!(y-30)r=-1;/*if(weight30)r=-1;/*用用-1-1标记不予邮寄标记不予邮寄*/*/elseif(weight20)r=0.70;/*relseif(weight20)r=0.70;/*r保存实际邮寄费率保存实际邮寄费率*/*/elseif(weight10)r=0.75;elseif(weight10)r=0.75;elser=0.8
45、;elser=0.8;if(r!=-1)if(r!=-1)money=r*weight+0.2;money=r*weight+0.2;printf(nweight:%f,money:%f,weight,money);printf(nweight:%f,money:%f,weight,money);elseprintf(ncantpost.);elseprintf(ncantpost.); 分析该程序,共有分析该程序,共有4 4个分支,分别对应个分支,分别对应weightweight的取值为:的取值为:30,2030,20且且1010且且=20,=10;=20,=10;因此若要实的每个因此若要实
46、的每个分支都能执行一遍,分支都能执行一遍,weightweight应分别从上述每一范围中应分别从上述每一范围中至少取一个值。至少取一个值。 考虑到考虑到边界容易出错边界容易出错边界容易出错边界容易出错,所以所以weightweight应分别取应分别取10,20,3010,20,30作作为测试数据,或直接将为测试数据,或直接将30,201030,2010作为后作为后3 3个范围中的测个范围中的测试数据。试数据。测试用例:测试用例: 3535,3030,2020,1010(至少(至少4 4个测试数据)个测试数据)或者使用:或者使用:3535,2525,1515,5 5,3030,2020,1010
47、(每个范围取(每个范围取一个测试数据,在加上边界数据供一个测试数据,在加上边界数据供7 7组)。组)。5.5上机调试上机调试三、单步执行(三、单步执行(run/steprun/step或或F7F7或或F8F8)具体方法是:根据某个测试用例,若程序的运行具体方法是:根据某个测试用例,若程序的运行结果不正确,则采用单步执行方式,利用原来结果不正确,则采用单步执行方式,利用原来的测试数据,重新运行该程序,根据亮条光标的测试数据,重新运行该程序,根据亮条光标的移动,可以很清楚的看到程序的执行过程,的移动,可以很清楚的看到程序的执行过程,然后与该程序要实现的任务比较,很容易找出然后与该程序要实现的任务比较,很容易找出程序中哪儿与实际不符。程序中哪儿与实际不符。 同时使用同时使用break/watchbreak/watch可添加表达式,利用单步可添加表达式,利用单步执行观察执行观察watchwatch窗口中该表达式或变量的值,则窗口中该表达式或变量的值,则更容易找出是哪一步出错了。更容易找出是哪一步出错了。 比如:上例的执行。比如:上例的执行。作业n2.习题5,8,10,12