资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
第4章选择结构程序设计习题(P111)4.2 C语言中如何表示“真”和“假” ?系统如何判断一个量的“真”和“假” ?答:C语言中用1表示真,。表示假;系统按照“非0为真,。为假”判断一个逻辑量的真假。4.3 写出下面各逻辑表达式的值。设 a=3,b=4,c=5。(1) a+bc&b=c(2) a|b+c&b-c(3) !(ab)&!c|1(4) !(x=a)&(y=b)&0(5) !(a+b)+c-1&b+c/2解:该题在求解过程中注意:一、优先级。逻辑运算符(&和| )低于算术运算符和关系运算符而高于赋值运算符,在逻辑运算符中,逻辑非最高,逻辑与其次,逻辑或最低;二、逻辑表达式的求值规则。(P94)所以得以上表达式的值分别为:(1) 0(2) 1(3) 1(4) 0(5) 14.4有3个整数a、b、c,由键盘输入,输出其中最大的数。分析:这是一个规模较小的 求最值的算法,习题1.6用函数的方法实现。该题不用函数调用实现,但方法 类似。法一:先求前两个数的最值,再用前两个数的最值和第三个数比较即得结果。法二:先假设第一个数 是最值,再依次和第二、第三个数比较得结果。其中都要用到单分支或双分支选择结构语句。参考程序如下: 法一:main() int a,b,c,max; /*定义4个整型变量,其中 a,b,c存原始数据,max存最值*/ipprintf(ninput the value of a,b,c:); /* 提示输入*/i;scanf(%d%d%d,&a,&b,&c);/*格式符之间无分隔符,输入时可以以空格、回车、跳格分隔Iii*/if(ab) max=a; i else max=b; iiif(maxc) max=c; iiprintf(nmax=%dn,max); ii法二: ! B1 aj Baas ghmj kh - ihimi . . laMf; Mia ( mmb-hm i.im gm .1 bhmh11 B1 ! mmbbim |bm| bimi ,事 imi mm immmm uiigbm.11 Ma.ga1*1 |main()ili int a,b,c,max; printf(ninput the value of a,b,c:);scanf(%d%d%d,&a,&b,&c); IImax=a; ;if(maxb) max=b;ii!if(maxc)max=c;printf(nmax=%dn,max); ii _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4.6有一个函数:写一段程序,输入x,输出y的值。分析:这是一个典型的分断函数的求解应用。运行时从键盘输入x的值,再判断其范围根据表达式计算y值并输出即可。该题的关键是如何判断x值的范围,需要用到嵌套的分支选择语句。具体方法比较多,可以先确定任意一个范围,在确定其余范围时可以用到前一条件不满足的隐含条件。注意嵌套语句中else和if的配对关系。另外仍然要注意C语言表达式和数学表达式的区别,乘号(*)在C语言表达式中一定不能省略。参考程序如下:#includemain() float x,y;printf(input x:);scanf(%f,&x);if(x1)y=x;else if(x=1*/x=10*/if(x=1 & x10)y=3*x-11;else y=x;y=2*x-1;else /*前两个条件都不满足,则隐含条件为 y=3*x-11;printf(y=%fn,y);对上述参考答案中加粗部分语句的改写方法:if(x=10)y=3*x-11;else if (x1) y=x;else y=2*x-1;if(x10)if(x100 | score =90) grade=A; else if(score=80) grade=B;IIIelse if(score=70) grade=C;else if(score=60) grade=D;I4else grade=E;printf(Score= %g Grade is %cn,score,grade); /* 输出结果 */ 法二(switch语句实现):编辑版wordi bumi- ihmii,hi umbim bbi n nBHu ni mbmbbu ianm b bbi ibb ia mbb b main() float score;char grade; iprintf(nPlease input the score:);scanf(%f,&score);while(score100 | score 0) printf(Score input error!nPlease input the score:); scanf(%f,&score); printf(n);i switch( (int)score/10 ) /*先将成绩取整,再整除 10,得商的整数部分*/!/*以下case后为switch后表达式计算出来可能的值*/: case 10:IIcase 9: grade=A; break; /* 两个 case值共用一组执行语句*/case 8: grade=B; break; case 7: grade=C; break; case 6: grade=D; break;IIdefault: grade=E;;lprintf(Score=%g Grade is %cn,score,grade);II4.9给一个不多于5位的正整 要求:求精它是几位感分别需加每一位薮字;按逆扃而位数字。分析:该题的关键是将一个整数分解为各位数字,可以用整除和取余相结合的方法实现,并分别用不同 的变:t而起来。由于整数的位数在 15位之间不确定,所以适合用switch开关语句实现。参考程序如下:main()! long int num;/* num 存放输入的原始数据,由于最大的5位数是99999,它!i超出了 int型的范围(-32768 +32767)所以定义为long型*/i1 int w,a,b,c,d,e;/*变量w用于存放数的位数,其余存放 5位数的各位数字 */ :! printf(Please input a number(099999):);/* 提示输入 */!i scanf(%ld,&num); /* 输入长整型数据*/ji while( num99999 )/* 检查输入数据的合法性*/iii printf(nInput Error! Please re-enter:);scanf(%ld,&num);:/* 一组ifelse的嵌套确定输入的num是几位数*/1if(num10) w=1;IIelse if(num100) w=2;else if(num1000) w=3;else if(num10000) w=4;!else w=5;!/*根据位数分解num的各位数字*/1IIswitch( w )- case 5: e=num/10000;/* 万位存于变量 e 中*/1case 4: d=num/1000%10;/* 千位存于变量 d 中*/II; case 3: c=num/100%10;/* 百位存于变量 c 中*/;编辑版wordcase 2: d=num/10%10;case 1: a=num%10;/*十位存于变量 b中*/*个位存于变量a中*/I| /*顺序、逆序输出分解后的各位数字*/IIswitch(w) case 5: printf(Shunxu:%d%d%d%d%dn, e,d,c,b,a);printf(Nixu:%d%d%d%d%dn, a,b,c,d,e); break; IIcase 4: printf(Shunxu:%d%d%d%dn,a,b,c,d);printf(Nixu:%d%d%d%dn,d,c,b,a); break;case 3: printf(Shunxu:%d%d%dn,a,b,c); printf(Nixu:%d%d%dn,c,b,a); break;case 2: printf(Shunxu:%d%dn,a,b); printf(Nixu:%d%dn,b,a); break;case 1: printf(Shunxu:%d%dn,a,b); printf(Nixu:%d%dn,b,a); break; II I J !, i
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号