《第四章选择结构程序设计习题解答》由会员分享,可在线阅读,更多相关《第四章选择结构程序设计习题解答(15页珍藏版)》请在金锄头文库上搜索。
1、第四章第四章 选择结构程序设计习题选择结构程序设计习题解答解答 根据某个变量或表达式的值作出选择,根据某个变量或表达式的值作出选择,决定执行哪些语句而不执行哪些语句。这样决定执行哪些语句而不执行哪些语句。这样的程序结构称为选择结构或分支结构。的程序结构称为选择结构或分支结构。 实现选择结构的语句有:实现选择结构的语句有: 分支语句分支语句(if(if语句语句) )和和 多分支语句多分支语句(switch(switch语句语句) )选择结构程序设计if-else 择条件语句选择结构的一种最常用形式选择结构的一种最常用形式选择结构的一种最常用形式选择结构的一种最常用形式: : if (if (表达
2、式表达式表达式表达式) )语句语句语句语句1;1; else else语句语句语句语句2;2; 语句语句语句语句3 3执行过程:执行过程:执行过程:执行过程:当括号内表达式成立时,即表达式的值当括号内表达式成立时,即表达式的值当括号内表达式成立时,即表达式的值当括号内表达式成立时,即表达式的值是非是非是非是非0 0时,时,时,时,执行语句执行语句执行语句执行语句1 1,然后语句,然后语句,然后语句,然后语句3 3;当表达式不成立时,值当表达式不成立时,值当表达式不成立时,值当表达式不成立时,值等于等于等于等于0 0时,执行语句时,执行语句时,执行语句时,执行语句2 2,然,然,然,然后语句后语
3、句后语句后语句3 3,上面上面else部分也可以没有。部分也可以没有。if多分支选择语句 表达式1先判断表达式1的值真语句1非0就执行下面的语句假表达式2为0就执行下一个判断表达式3语句4语句3语句2真真假假一直这样做下去直到得出最后结果 if (表达式表达式1) 语句语句1;else if (表达式表达式2)语句语句2;else if (表达式表达式3)语句语句3;else语句语句4;语句语句5; 开关语句-switch功能功能功能功能格式格式格式格式开关语句就像多路开关一样,程序可根据开关语句就像多路开关一样,程序可根据开关语句就像多路开关一样,程序可根据开关语句就像多路开关一样,程序可根
4、据一个表达式可能产生的不同结果值一个表达式可能产生的不同结果值一个表达式可能产生的不同结果值一个表达式可能产生的不同结果值,选择其中选择其中选择其中选择其中一个一个一个一个独立分支结构,或几个分支独立分支结构,或几个分支独立分支结构,或几个分支独立分支结构,或几个分支的语句的语句的语句的语句非独立分支结构去执行。非独立分支结构去执行。非独立分支结构去执行。非独立分支结构去执行。switch (switch (表达式表达式表达式表达式) ) case case 常量常量常量常量1 1 : : 语句系列语句系列语句系列语句系列1 1 case case 常量常量常量常量2 2 : : 语句系列语句
5、系列语句系列语句系列2 2 case case 常量常量常量常量m : m : 语句系列语句系列语句系列语句系列mm default : default : 语句系列语句系列语句系列语句系列m+1m+1 说明说明说明说明switchswitch后括号内表达式的值只能是整形、字符型后括号内表达式的值只能是整形、字符型后括号内表达式的值只能是整形、字符型后括号内表达式的值只能是整形、字符型或枚举类型,每个常量的类型和表达式的类型应相或枚举类型,每个常量的类型和表达式的类型应相或枚举类型,每个常量的类型和表达式的类型应相或枚举类型,每个常量的类型和表达式的类型应相同,每个语句序列可以是零个或若干个语
6、句。同,每个语句序列可以是零个或若干个语句。同,每个语句序列可以是零个或若干个语句。同,每个语句序列可以是零个或若干个语句。 case 3:case 3: case 4: case 4: printf(“%dprintf(“%d”, d1); break;”, d1); break; default: default:执行时,先求表达式的值,然后自上而下依次测执行时,先求表达式的值,然后自上而下依次测执行时,先求表达式的值,然后自上而下依次测执行时,先求表达式的值,然后自上而下依次测试每一个常量,若与常量试每一个常量,若与常量试每一个常量,若与常量试每一个常量,若与常量I I相匹配,则从其后的
7、语相匹配,则从其后的语相匹配,则从其后的语相匹配,则从其后的语句序列句序列句序列句序列i i开始执行每个语句序列,若没有常量与之开始执行每个语句序列,若没有常量与之开始执行每个语句序列,若没有常量与之开始执行每个语句序列,若没有常量与之匹配,则执行匹配,则执行匹配,则执行匹配,则执行defaultdefault后面的语句序列后面的语句序列后面的语句序列后面的语句序列非独立分非独立分非独立分非独立分支结构。支结构。支结构。支结构。若只执行语句系列若只执行语句系列若只执行语句系列若只执行语句系列I I,则在语句系列则在语句系列则在语句系列则在语句系列I I后加后加后加后加breakbreak语句语
8、句语句语句独立分支结构。独立分支结构。独立分支结构。独立分支结构。 switch (switch (表达式表达式表达式表达式) ) case case 常量常量常量常量1 1 : : 语句系列语句系列语句系列语句系列1;break;1;break; case case 常量常量常量常量2 2 : : 语句系列语句系列语句系列语句系列2;break;2;break; case case 常量常量常量常量m : m : 语句系列语句系列语句系列语句系列m;break;m;break; default : default : 语句系列语句系列语句系列语句系列m+1;m+1; 由于每个由于每个由于每个
9、由于每个casecase语句后的常量只起语句标号的作用,语句后的常量只起语句标号的作用,语句后的常量只起语句标号的作用,语句后的常量只起语句标号的作用,所以它们的值必须互不相同,否则会出现互相矛盾所以它们的值必须互不相同,否则会出现互相矛盾所以它们的值必须互不相同,否则会出现互相矛盾所以它们的值必须互不相同,否则会出现互相矛盾的现象的现象的现象的现象(C(C语言系统不允许,编译出错语言系统不允许,编译出错语言系统不允许,编译出错语言系统不允许,编译出错) )。 case 1:case 1: case 1: case 1:case 3:case 3:独立分支独立分支独立分支独立分支时每个时每个时
10、每个时每个casecase语句和语句和语句和语句和defaultdefault语句的出现的语句的出现的语句的出现的语句的出现的前后次序发生改变时,不影响运行结果,但在一般前后次序发生改变时,不影响运行结果,但在一般前后次序发生改变时,不影响运行结果,但在一般前后次序发生改变时,不影响运行结果,但在一般情况下,常量出现频率较高的放在前面。情况下,常量出现频率较高的放在前面。情况下,常量出现频率较高的放在前面。情况下,常量出现频率较高的放在前面。 case 1: case 1:case 1: case 1: default: case 2: default: case 2: case 2: cas
11、e 3: case 2: case 3:case 3:case 3: deaultdeault: :7、解、解#include stdio.hvoid main()char c1,c2;scanf(%c%c,&c1,&c2);if(c1-c2)%2=0)printf(%c,%c,c1+1,c2+1);elseprintf(%c,%c,c1-1,c2-1);开始开始输入两字符输入两字符判断两字符之差判断两字符之差是否为偶数是否为偶数输出它们输出它们的后继的后继输出它们输出它们的前驱的前驱结束结束NY8、解解#include stdio.hvoid main()int a, b;scanf(%d%
12、d,&a,&b);if(a%b=0)printf(a/b=%dn,a/b);elseprintf(a/b=%d,%dn,a/b,a%b);9、解:#include stdio.hvoid main()float x, y;scanf(%f%f,&x,&y);if(x-2)*(x-2)+(y-2)*(y-2)1)printf(点A在圆外n);else if(x-2)*(x-2)+(y-2)*(y-2)=1)printf(点A在圆上n);elseprintf(点A在圆内n);10 解:解:开始开始输入年、月输入年、月判断是否为闰年判断是否为闰年用一整型变量标识,用一整型变量标识,1表示是,表示是,
13、0表示否表示否结束结束YMonth=1、 3、 5、7、8、10、12?Month=4、6、9、11?Month=2闰年闰年Month=其它值其它值输出输出31天天输出输出30天天输出数据错误输出数据错误YYY输出输出29天天N输出输出28天天NNN#include stdio.hvoid main()int year, month,leap;scanf(%d%d,&year,&month);/*判断是否为闰年判断是否为闰年*/if(year%400=0|(year%100!=0&year%4=0)leap=1;elseleap=0;switch(month)case 1: printf(Th
14、is month has 31 daysn); break;case 2: if(leap=1) printf(This month has 29 daysn);else printf(This month has 28 daysn);break;case 3: printf(This month has 31 daysn);break;case 4: printf(This month has 30 daysn);break;case 5: printf(This month has 31 daysn);break;case 6: printf(This month has 30 daysn
15、);break;case 7: printf(This month has 31 daysn);break;case 8: printf(This month has 31 daysn);break;case 9: printf(This month has 30 daysn);break;case 10: printf(This month has 31 daysn);break;case 11: printf(This month has 30 daysn);break;case 12: printf(This month has 31 daysn);break; default: pri
16、ntf(“Month is error data!); #include stdio.hvoid main()int year, month,leap;scanf(%d%d,&year,&month);/*判断是否为闰年判断是否为闰年*/if(year%400=0|(year%100!=0&year%4=0)leap=1;elseleap=0;switch(month)case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf(This month has 31 daysn);break;case 2: if(leap=1)
17、 printf(This month has 29 daysn);else printf(This month has 28 daysn);break;case 4: case 6: case 9: case 11: printf(This month has 30 daysn);break; default: printf(“Month is error data!);12、解:(、解:(1)不嵌套的)不嵌套的if语句语句#include stdio.hvoid main()float x;scanf(%f,&x);if(x-5&x0&x-5&x8)if(x0)printf(y=%f,x-1
18、);else if(x=0)printf(y=%f,x);elseprintf(y=%f,x+1);elseprintf(Data undefine! );12、解:(、解:(3)switch语句语句#include stdio.hvoid main()float x;scanf(%f,&x);switch(int(x)case -4:case -3:case -2:case -1: printf(y=%f,x-1); break;case 0: printf(y=%f,x); break;case 1:case 2:case 3:case 4:case 5:case 6:case 7: printf(y=%f,x+1); break;default: printf(Data undefine! );