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

  • 格式:doc
  • 大小:47.50 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第4章选择结构程序设计

习题(P111)

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

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

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

(1)a+b>c&&b==c (2)a||b+c&&b-c (3)!(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("\ninput the value of a,b,c:"); /*提示输入*/

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

if(a>b) max=a;

else max=b;

if(max

printf("\nmax=%d\n",max);

}

法二:

main()

{ int a,b,c,max;

printf("\ninput the value of a,b,c:");

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

max=a;

if(max

if(max

printf("\nmax=%d\n",max);

}

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

分析:这是一个典型的分断函数的求解应用。运行时从键盘输入x的值,再判断其范围根据表达式计算y值并输出即可。该题的关键是如何判断x值的范围,需要用到嵌套的分支选择语句。具体方法比较多,可以先确定任意一个范围,在确定其余范围时可以用到前一条件不满足的隐含条件。注意嵌套语句中else和if 的配对关系。另外仍然要注意C语言表达式和数学表达式的区别,乘号(*)在C语言表达式中一定不能省略。

参考程序如下:

#include

{ 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\n",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("\nPlease input the score: "); /*提示输入*/

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

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

{ printf("Score input error!\nPlease input the score:"); /*若不合法则提示重新输入*/

scanf("%f",&score); /*重新输入*/

}

printf("\n");

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

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\n",score,grade); /*输出结果*/

}

法二(switch语句实现):