C语言程序设计第四版第四章答案谭浩强.docx

上传人:b****6 文档编号:9144378 上传时间:2023-02-03 格式:DOCX 页数:11 大小:17.89KB
下载 相关 举报
C语言程序设计第四版第四章答案谭浩强.docx_第1页
第1页 / 共11页
C语言程序设计第四版第四章答案谭浩强.docx_第2页
第2页 / 共11页
C语言程序设计第四版第四章答案谭浩强.docx_第3页
第3页 / 共11页
C语言程序设计第四版第四章答案谭浩强.docx_第4页
第4页 / 共11页
C语言程序设计第四版第四章答案谭浩强.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

C语言程序设计第四版第四章答案谭浩强.docx

《C语言程序设计第四版第四章答案谭浩强.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第四版第四章答案谭浩强.docx(11页珍藏版)》请在冰豆网上搜索。

C语言程序设计第四版第四章答案谭浩强.docx

C语言程序设计第四版第四章答案谭浩强

C语言程序设计第四版第四章答案-谭浩强

第四章

4.1什么是算术运算?

什么是关系运算?

什么是逻辑运算?

解:

略。

4.2C语言中如何表示“真”和“假”?

系统如何判断一个量的“真”和“假”?

解:

设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。

但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。

例如3&&5的值为“真”,系统给出3&&5的值为1。

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

解:

(1)0

(2)1

(3)1

(4)0

(5)1

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

解:

方法一

#include

main()

{inta,b,c;

printf("请输入3个整数:

");

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

if(a

if(b

elseprintf("max=%d\n",b);

elseif(a

elseprintf("max=%d\n",a);

}

方法二:

使用条件表达式,可以使程序更加简明、清晰。

程序如下:

#include

main()

{inta,b,c,temp,max;

printf("请输入3个整数:

");

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

temp=(a>b)?

a:

b;/*将a和b中的大者存人temp中*/

max=(temp>c)?

temp:

c;/*将a和b中的大者与c比较,取最大者*/

printf("3个整数的最大数是%d\n”,max);

}

4.6有一函数:

写一程序,输入x值,输出y值。

解:

#include

main()

{intx,y;

printf("输入x:

");

scanf("%d",&x);

if(x<1)/*x<1*/

{y=x;

printf("x=%3d,y=x=%d\n",x,y);

}

elseif(x<10)/*1≤x-10*/

{y=2*x-1;

printf("x=%3d,y=2*x-1=%d\n",x,y);

}

else/*x≥10*/

{y=3*x-11;

printf("x=%3d,y=3*x-11=%d\n",x,y);

}

}

4.8给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E’。

90分以上为’A’,80~90分为’B’,70~79分为’C’,60分以下为’D’。

解:

程序如下:

#include

main()

{floatscore;

chargrade;

printf("请输入学生成绩:

");

scanf("%f",&score);

while(score>100||(score<0)

{printf("\n输入有误,请重新输入:

");

scanf("%f",&score);

}

switch((int)(score/10))

{case10:

case9:

grade=’A’;break;

case8:

grade=’B’;break;

case7:

grade=’C’;break;

case6:

grade=’D’;break;

case5:

case4:

case3:

case2:

case1:

case0:

grade=’E’;

}

printf("成绩是%5.1f,相应的等级是%c。

\n",score,grade);

}

说明:

对输入的数据进行检查,如小于0或大于100,要求重新输入。

(int)(score/10)的作用是将(score/10)的值进行强制类型转换,得到一个整型值。

4.9给定一个不多于5位的正整数,要求:

①求它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字。

例如原数为321,应输出123。

解:

#include

main()

{longintnum;

intindiv,ten,hundred,thousand,ten_thousand,place;

/*分别代表个位、十位、百位、千位、万位和位数*/

printf("请输入一个整数(0~99999):

");

scanf("%ld",&num);

if(num>9999)place=5;

elseif(num>999)place=4;

elseif(num>99)place=3;

elseif(num>9)place=2;

elseplace=1;

printf("place=%d\n",place);

ten_thousand=num/10000;

thousand=num/1000%10;

hundred=num/100%10;

ten=num%100/10;

indiv=num%10;

switch(place)

{case5:

printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);

printf("\n反序数字为;");

printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);

break;

case4:

printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);

printf("\n反序数字为:

");

printf("%d%d%d%d\n",indiv,ten,hundred,thousand);

break;

case3:

printf("%d,%d,%d",hundred,ten,indiv);

printf("\n反序数字为:

");

printf("%d%d%d\n",indiv,ten,hundred);

break;

case2:

printf("%d,%d",ten,indiv);

printf("\n反序数字为:

");

printf("%d%d\n",indiv,ten);

break;

case1:

printf("%d",indiv);

printf("\n反序数字为:

");

printf("%d\n",indiv);

break;

}

}

4.10企业发放的奖金根据利润提成。

利润I低于或等于10万元时,奖金可提成10%;利润高于10万元,低于20万元(1000001000000时,超过100万元的部分按1%提成。

从键盘输入当月利润I,求应发放奖金总数。

要求:

(1)用if语句编程序;

(2)用switch语句编程序。

解:

计算利润时,要特别注意不同利润的不同提成比例。

例如,利润为15万元,其中有10万元按10%的比例提成,另外5万元则按7.5%提成。

(1)用if语句编程序。

#include

main()

{longi;

floatbonus,bon1,bon2,bon4,bon6,bon10;

bon1=100000*0.1;/*利润为10万元时的奖金*/

bon2=bon1+100000*0.075;/*利润为20万元时的奖金*/

bon4=bon2+200000*0.05;/*利润为40万元时的奖金*/

bon6=bon4+200000*0.03;/*利润为60万元时的奖金*/

bon10=bon6+400000*0.015;/*利润为100万元时的奖金*/

printf("请输入利润i:

");

scanf("%ld",&i);

if(i<=100000)

bonus=i*0.1;/*利润在10万元以内按0.1提成奖金*/

elseif(i<=200000)

bonus=bon1+(i-100000)*0.075;/*利润在10万至20万元时的奖金*/

elseif(i<=400000)

bonus=bon2+(i-200000)*0.05;/*利润在20万至40万元时的奖金*/

elseif(i<=600000)

bonus=bon4+(i-400000)*0.03;/*利润在40万至60万元时的奖金*/

elseif(i<=1000000)

bonus=bon6+(i-600000)*0.015;/*利润在60万至100万元时的奖金*/

else

bonus=bon10+(i-1000000)*0.01;/*利润在100万元以上时的奖金*/

printf(”奖金是%10.2f\n",bonus);

}

此题的关键在于正确写出每一区间的奖金计算公式。

例如利润在10万元至20万时,奖金应由两部分组成:

①利润为10万元时应得的奖金。

即100000ⅹ0.1;②10万元以上部分应得的奖金。

即(num-100000)ⅹ0.075。

同理,20万~40万这个区间的奖金也应由两部分组成:

①利润为20万元时应得的奖金,即100000ⅹ0.1ⅹ10万ⅹ0.075;②20万元以上部分应得的奖金,即(num-200000)ⅹ0.05。

程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。

(2)用switch语句编程序。

输入利润i,确定相应的提成等级branch

根据branch确定奖金值

0奖金=i*0.1

1奖金=bon1+(i-105)*0.075

2奖金=bon2+(i-2*105)*0.05

3

4奖金=bon4+(i-4*105)*0.03

5

6奖金=bon6+(i-6*105)*0.015

7

8

9

10奖金=bon10+(i-106)*0.01

输出奖金

#include

main()

{longi;

floatbonus,bon1,bon2,bon4,bon6,bon10;

intc;

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=bon6+400000*0.015;

printf("请输入利润i:

");

scanf("%ld",&i);

c=i/100000;

if(c>10)c=10;

switch(c)

{case0:

bonus=1*0.1;break;

case1:

bonus=bon1+(i-100000)*0.075;break;

case2:

case3:

bonus=bon2+(i-200000)*0.05;break;

case4:

case5:

bonus=bon4+(i-400000)*0.03;break;

case6:

case7:

case8:

case9:

bonus=bon6+(i-600000)*0.015;break;

case10:

bonus=bon10+(i-1000000)*0.01;

}

printf("奖金是%10.2f",bonus);

}

4.11输入4个整数,要求按由大到小的顺序输出。

解:

此题采用依次比较的方法排出其大小顺序。

在学习了循环和数组以后,可以有更多的排序方法。

#include

main()

{intt,a,b,c,d;

printf("请输入4个整数:

");

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

printf("\na=%d,b=%d,c=%d,d=%d\n",a,b,c,d);

if(a>b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

if(a>d){t=a;a=d;d=t;}

if(b>c){t=a;b=c;c=t;}

if(b>d){t=b;b=d;d=t;}

if(c>d){t=c;c=d;d=t;}

printf("排序结果如下:

\n");

printf("%d,%d,%d,%d\n",a,b,c,d);

}

4.12有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。

这4个塔的高度分别为10m。

塔以外无建筑物。

今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。

程序如下:

#include

main()

{inth=10;

floatx1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;

printf("请输入一个点(x,y):

");

scanf("%f,%f",&x,&y);

d1=(x-x1)*(x-x1)+(y-y1)*(y-y1);/*求该点到各中心点的距离*/

d2=(x-x2)*(x-x2)+(y+y2)*(y+y2);

d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);

d4=(x+x4)*(x-x4)*(y+y4)*(y+y4);

if(d1>1&&d2>1&&d3>1&&d4>1)h=0;/*判断该点是否在塔外*/

printf("该点高度为%d\n",h);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1