c语言第4章选择结构程序设计习题答案

发布 2019-08-15 14:49:00 阅读 8842

第4章选择结构程序设计。

习题(p111)

4.2 c语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

答:c语言中用1表示真,0表示假;系统按照“非0为真,0为假”判断一个逻辑量的真假。

4.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5。

(1)a+b>c&&b==c2)a||b+c&&b-c3)!(a>b)&&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)1

4.4有3个整数a、b、c,由键盘输入,输出其中最大的数。

分析:这是一个规模较小的求最值的算法,习题1.6用函数的方法实现。

该题不用函数调用实现,但方法类似。法一:先求前两个数的最值,再用前两个数的最值和第三个数比较即得结果。

法二:先假设第一个数是最值,再依次和第。

二、第三个数比较得结果。其中都要用到单分支或双分支选择结构语句。

参考程序如下:

法一:main()

int a,b,c,max定义4个整型变量,其中a,b,c存原始数据,max存最值*/

printf("input the value of a,b,c:")提示输入*/

scanf("%d%d%d",&a,&b,&c); 格式符之间无分隔符,输入时可以以空格、回车、跳格分隔*/

if(a>b) max=a;

else max=b;

if(max printf("max=%d",max);

法二:main()

int a,b,c,max;

printf("input the value of a,b,c:")

scanf("%d%d%d",&a,&b,&c);

max=a;

if(max if(max printf("max=%d",max);

4.6有一个函数:写一段程序,输入x,输出y的值。

分析:这是一个典型的分断函数的求解应用。运行时从键盘输入x的值,再判断其范围根据表达式计算y值并输出即可。

该题的关键是如何判断x值的范围,需要用到嵌套的分支选择语句。具体方法比较多,可以先确定任意一个范围,在确定其余范围时可以用到前一条件不满足的隐含条件。注意嵌套语句中else和if 的配对关系。

另外仍然要注意c语言表达式和数学表达式的区别,乘号(*)在c语言表达式中一定不能省略。

参考程序如下:

#include<>

main()

float x,y;

printf("input x:")

scanf("%f",&x);

if(x<1)

y=x;else if(x<10) /使用了隐含条件x >=1 */

y=2*x-1;

else /*前两个条件都不满足,则隐含条件为 x>=10 */

y=3*x-11;

printf("y=%f",y);

对上述参***中加粗部分语句的改写方法:

思考:还有其他的改写方法吗?请动手写一写。

4.8给出一百分制成绩,要求输出成绩等级'a'、'b'、'c'、'd'、'e'。90以上为'a',80~89分为'b',70~79分为'c',60~69分为'd',60分以下为'e'。

分析:该题是一个多分支选择的应用。c语言中实现多分支选择的方法可以用if~else嵌套语句或用switch语句,该题这两种方法都可以实现。

在用if~else实现的时候注意else和if的配对,方法同上题;用switch语句实现的时候注意成绩处理为可以列举的值,方法是将成绩取整后整除10,这样百分制的成绩只有11种可能了。

参考程序如下:

法一(if~else语句实现):

main()

float score; /存放输入的百分制成绩*/

char grade; /存放等级*/

printf("please input the score: "提示输入*/

scanf("%f",&score完成输入*/

while(score>100 ||score < 0) /对输入的成绩进行合法性检查*/

printf("");

*以下对成绩进行判断,计算出对应的等级*/

if(score>=90) grade='a';

else if(score>=80) grade='b';

else if(score>=70) grade='c';

else if(score>=60) grade='d';

else grade='e';

printf("score=%g grade is %c",score,grade); 输出结果*/

法二(switch语句实现):

main()

float score;

char grade;

printf("please input the score: "

scanf("%f",&score);

while(score>100 ||score < 0)

printf("");

switch( (int)score/10 ) 先将成绩取整,再整除10,得商的整数部分 */

/* 以下case后为switch后表达式计算出来可能的值 */

printf("score=%g grade is %c",score,grade);

4.9 给一个不多于5位的正整数,要求:求出它是几位数;分别输出每一位数字;按逆序输出各位数字。

分析:该题的关键是将一个整数分解为各位数字,可以用整除和取余相结合的方法实现,并分别用不同的变量保存起来。由于整数的位数在1~5位之间不确定,所以适合用switch开关语句实现。

参考程序如下:

main()

long int numnum存放输入的原始数据,由于最大的5位数是99999,它超出了int型的范围(-32768 ~ 32767)所以定义为long型 */

int w,a,b,c,d,e变量w用于存放数的位数,其余存放5位数的各位数字 */

printf("please input a number(0~99999提示输入*/

scanf("%ld",&num输入长整型数据 */

while( num<0 ||num>99999 ) 检查输入数据的合法性 */

/* 一组if~else的嵌套确定输入的num是几位数 */

if(num<10) w=1;

else if(num<100) w=2;

else if(num<1000) w=3;

else if(num<10000) w=4;

else w=5;

/* 根据位数分解num的各位数字*/

switch( w )

/* 顺序、逆序输出分解后的各位数字 */

switch(w)

{ case 5: printf("shunxu:%d%d%d%d%d", e,d,c,b,a);

printf("nixu:%d%d%d%d%d", a,b,c,d,e);

break;

case 4: printf("shunxu:%d%d%d%d",a,b,c,d);

C程序设计第6章 循环结构程序设计

第6章循环结构程序设计。许多问题的求解归结为重复执行的操作,例如输入多个同学的成绩 对象遍历 迭代求根等问题。这种重复执行的操作在程序设计语言中用循环控制来实现。几乎所有实用程序都包含循环。特别是在现代多 处理程序 图像 声音 通讯 中,循环更是必不可少。根据开始循环的初始条件和结束循环的条件不同,...

第5章循环结构程序设计

通过本章实验作业应达目标 1 熟悉while for do while break continue语句的作用与使用规范,能使用while语句 for语句 do while语句实现循环结构 2 掌握循环结构和选择结构之间嵌套 多重循环间嵌套的设计方法。3 进行算法设计训练,能综合所学控制结构语句解决...

第二章选择结构程序设计

2.1 if语句基础。问题描述 如果明天天气不好,就留在家里看电视,否则出去购物。分析 我们可以通过下面图例分析。从上面实例我们可以看出通过一个判断,演变出两个分支的情况,在编程中我们可以称为选择结构。在c 中用if语句来实现选择结构。2.2 if语句。一 格式 if 布尔表达式 语句 if 布尔表...

经典C语言程序设计100例

经典c语言程序设计100例31 40 程序31 题目 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续。判断第二个字母。1.程序分析 用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。2.程序源 include void main char let...

第二章C语言程序设计的初步知识

一 选择题。1 在c 语言中,下列类型属于构造类型的是 0级 a 整型b 字符型c 实型d 数组类型。6 下列字符串属于标识符的是 0级 a intb 5 student c 2ong d df 11 c语言中不能用来表示整常数的进制是 0级 a 十进制 b 十六进制 c 八进制d 二进制。16 在...