c语言第4章 选择结构程序设计习题答案_第1页
c语言第4章 选择结构程序设计习题答案_第2页
c语言第4章 选择结构程序设计习题答案_第3页
c语言第4章 选择结构程序设计习题答案_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章选择结构编程练习(P111)如何用4.2 C语言表达“真”和“假”?系统如何判断一个量的“真”和“假”?答:在C语言中,1表示真,0表示假;系统根据“非0为真,0为假”来判断逻辑量是真还是假。4.3写出下列逻辑表达式的值。假设a=3,b=4,c=5。(1)a bcb=c (2)a|b cb-c (3)!(ab)!c|1(4)!(x=a)(y=b)0 (5)!(a)b)c-1b c/2解决方法:在解决过程中注意这个问题:首先,优先。逻辑运算符(和| |)比算术运算符和关系运算符低,比赋值运算符高。在逻辑运算符中,逻辑不是最高的,逻辑是第二的,逻辑是最低的。第二,逻辑表达式的求值规则。(P9

2、4)因此,上述表达式的值为:(1)0 (2)1 (3)1 (4)0 (5)14.4有三个整数A、B和C,它们是通过键盘输入的,其中输出的数字最大。分析:这是一个寻找最大值的小规模算法。练习1.6是用函数的方法实现的。这个问题不是通过函数调用来实现的,但是方法是相似的。方法1:首先找出前两个数的最大值,然后将前两个数的最大值与第三个数进行比较,得到结果。方法2:首先假设第一个数字是最高值,然后依次与第二个和第三个数字比较,得到结果。其中使用单分支或双分支选择结构语句。参考程序如下:方法1:main()int a,b,c,max。/*定义4个整数变量,其中A、B和C存储原始数据,max存储最大值*

3、/printf( n输入a、b、c: 的值);/*提示*/scanf(“% d % d % d”,a,b,c);/*格式字符之间没有分隔符,可以用空格、回车和跳过分隔*/if(ab)max=a;否则max=b。if(最大值main()浮动x,y;printf(“输入x :”);scanf(“% f”,x);if(x1)y=x。否则,如果(x10) /*使用隐式条件x=1 */y=2 * x-1;否则/*如果不满足前两个条件,隐式条件是x=10 */y=3 * x-11;printf(y=%fn ,y);上述参考答案粗体部分的重写方法:if(x10)如果(x1)y=x;否则y=2 * x-1;否

4、则y=3 * x-11;if(x=10)y=3 * x-11;否则,如果(x1)y=x;否则y=2 * x-1;if(x=1 x=10)y=2 * x-1;否则,如果(X10)y=3 * x-11;否则y=x。思考:有没有别的方法可以重写它?请你自己写。4.8给出100%的等级,输出等级为甲、乙、丙、丁、戊。90以上为甲,8089为乙,7079为丙,6069为丁,60以下为戊分析:这个问题是多分支选择的一个应用。用C语言实现多分支选择的方法可以使用ifelse嵌套语句或switch语句,这两种方法都可以实现。注意else和if的配对,当使用ifelse时,方法与上述问题相同;使用switch语

5、句时,请注意将结果处理为可枚举值。方法是将结果四舍五入并除以10,因此百分比系统只有11种可能性。参考程序如下:方法1 (ifelse语句实现):main()浮动分数;/*存储输入的百分比分数*/焦炭等级;/*存储级别*/printf( n请输入score : );/*提示*/scanf(“% f”,分数);/*完成输入*/同时(分数100 |分数0) /*检查输入分数的有效性*/打印(分数输入错误! n请输入分数:;/*重新输入*/scanf(“% f”,分数);/*重新输入*/printf( n );/*判断下面的结果并计算相应的等级*/如果(得分=90)等级=A;否则,如果(得分=80)

6、等级=B;否则,如果(得分=70)等级=C;否则,如果(得分=60)等级=D;否则等级=E;打印(分数=%g等级为%cn,分数,等级);/*输出结果*/方法2(开关语句实现):main()浮动分数;焦炭等级;printf( n请输入score : );scanf(“% f”,分数);同时(得分100 |得分0)打印(分数输入错误! n请输入分数:;scanf(“% f”,分数);printf( n );切换(int)分数/10) /*首先将分数四舍五入,然后除以10,得到商的整数部分*/*以下可能的值是为case */案例10:案例9:等级=A;休息;/*两个案例值共享一组执行语句*/案例8:

7、等级=B;休息;案例7:等级=C;休息;案例6:等级=D;休息;默认:等级=E;打印(分数=%g等级为%cn,分数,等级);4.9给出一个不超过5位数的正整数,需要找出它的位数;分别输出每个数字;以相反的顺序输出每个数字。分析:这个问题的关键是把一个整数分解成几个数字,这可以通过除法和余数的结合来实现,并且用不同的变量来保存。由于整数的位数在1到5位数之间是不确定的,所以适合使用switch语句。参考程序如下:main()长整数;/* num存储输入的原始数据。由于5位数的最大值为99999,超出了int类型(-32768 32767)的范围,所以被定义为long类型*/国际w、a、b、c、d

8、、e;/*变量w用于存储数字的位数,其余用于存储5位数的位数*/printf(“请输入一个数字(0 99999):”);/*提示*/scanf(“% LD”,编号);/*输入长数据*/同时(num0 | num99999) /*检查输入数据的有效性*/ printf( n输入错误!请重新输入: );scanf(“% LD”,编号);/*一组ifelse的嵌套决定了输入数字的位数*/if(num 10)w=1;否则,如果(num 100)w=2;否则,如果(num 1000)w=3;否则,如果(num 10000)w=4;否则w=5;/*根据数字编号分解数字的每个数字*/开关(w) case 5

9、: e=num/10000;/*变量e *中存储了一万位判例4: d=num/1000;/*数千存储在变量D */判例3: c=num/100;/* 100位存储在变量c */判例2: d=num/10;/*十位存储在变量b *中判例1: a=num;/*位存储在变量a */*按顺序和逆序输出分解数字*/开关(w)案例5: printf( Sunsux :% d % d % d % d % d n ,e,d,c,b,a);printf(Nixu:%d%d%d%d%dn ,a,b,c,d,e);休息;case 4: printf( Sunsux :% d % d % d % d n ,a,b,c

10、,d);printf(Nixu:%d%d%d%dn ,d,c,b,a);休息;case : printf( Sunsux :% d % d % d n ,a,b,c);printf(Nixu:%d%d%dn ,c,b,a);休息;case 2: printf( Sunsux :% d % d n ,a,b);printf(Nixu:%d%dn ,b,a);休息;case 1: printf( Sunsux :% d % d n ,a,b);printf(Nixu:%d%dn ,b,a);休息;4.11输入4个整数,并按从小到大的顺序输出。分析:关于小规模数据的简单排序,请参考P88的示例4.3。首先,将第一个变量与随后的变量逐一比较,以相反的顺序交换它们,最后将最大值存储在第一个变量中;然后将第二个变量与随后的变量逐一比较,以相反的顺序交换它们,并将第二个最大值存储在第二个变量中;以此类推,直到两个最大的变量以相反的顺序进行比较和交换。最后,按顺序输出每个变量的值。参考程序如下:main()int a,b,c,d,t;printf( n请输入4个整数: );scanf(“% d % d % d % d”,a,b,c,d);if(ab) t=a;a=b。b=t。if(AC) t=a;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论