c语言程序设计第五版习题答案解析 下载本文

完美WORD格式

可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

【分析与提示】请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 参考代码: main() {

long int i;

int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf(\

bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000)

bonus=bonus1+(i-100000)*0.075; else if(i<=400000)

bonus=bonus2+(i-200000)*0.05; else if(i<=600000)

bonus=bonus4+(i-400000)*0.03; else if(i<=1000000)

bonus=bonus6+(i-600000)*0.015; else

bonus=bonus10+(i-1000000)*0.01; printf(\}

3.由键盘输入三个整数a、b、c,用条件运算符求出其中最大值和最小值。

【分析与提示】首先比较输入的a,b 的大小,并把大数装入max, 小数装入min 中,然后再与c 比较,若max 小于c,则把c 赋予max;如果c 小于min,则把c 赋予min。因此max 内总是最大数,而min 内总是最小数。最后输出max 和min 的值即可。

参考代码: main( ) {

int a,b,c,max,min;

scanf(\max=a>b?a:b ; max=max>c?max:c; min=a

printf(\最大值为:%d,最小值为:%d\\n\}

专业整理 知识分享

完美WORD格式

4.有一函数:

x (x<1) y= 2x-1 (1≤x<10)

3x-11 (x≥10)

编一程序,输入一个x值,输出y值。

【分析与提示】本题考查if语句的嵌套,应当注意if与else的配对关系。从最内层开始,else总是与它上面最近的(未曾配对的)if 配对。

参考代码:

main( ) {

float x,y;

printf(\请输入x的值 \\n\scanf(\if(x<1) y=x; else

if(x>=10) y=3*x-11; else y=2*x-1;

printf(\}

5.从键盘上输入星期号,并显示该日期的英文名字。 【分析与提示】本实例知识点:switch语句。

switch语句的控制流程是:首先计算表达式的值,然后依次与每一个case中的常量值进行比较,一旦发现了某个能够匹配的值,就执行该case后面的语句组,直到遇到break语句为止。如果表达式的值与所有case中的常量都不匹配,则执行default后面的语句组。

参考代码:

main( ) { int xqh; char ywm;

printf(\请输入星期号(1~7):\\n\scanf(\switch(xqh)

{ case 1: printf(\ case 2: printf(\ case 3: printf(\ case 4: printf(\ case 5: printf(\ case 6: printf(\case 7: printf(\ default:printf(\}

}

6.某市不同车牌的出租车3公里的起步价和计费分别为:夏利7元/公里,3公里以外

专业整理 知识分享

完美WORD格式

2.1元/公里;富康8元/公里,3公里以外2.4元/公里;桑塔纳9元,3公里以外2.7元/公里。编程:从键盘输入乘车的车型及行车公里数,输出应付车资。

【分析与提示】可设三个变量,分别表示乘车的车型、行车公里数和应付车资,根据乘车的车型和行车公里数,计算出应付的车资。

参考代码:

main( ) {

int cx; /*定义乘车的车型变量cx */

float gl, cf; /*定义行车公里数变量gl、应付车资变量cf */ printf(\夏利\\n \\t2-富康\\n \\t3-桑塔纳\\n\printf(\请输入车型(1-3): \scanf(\

printf(\请输入行车公里数: \scanf(\switch(cx)

{ case 1: if(gl<=3) cf=7.0;

else cf=7+(gl-3)*2.1 ;break;

case 2: if(gl<=3) cf=8.0;

else cf=8+(gl-3)*2.4 ;break;

case 3: if(gl<=3) cf=9.0;

else cf=9+(gl-3)*2.7 ;

}

printf(\应付车资为%.1f\\n\

}

7.给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字。如原数为12345,则逆序为54321。

【分析与提示】本题的思路是:设5个变量,分别代表个位、十位、百位、千位和万位。从个位起,依次将各个位取出来,按取出的顺序组合成新的数据,并记录当前取出的数字的个数。

参考代码:

#include \main( ) {

unsigned x,m,n=0,w=0;

unsigned ge=0,shi=0,bai=0,qian=0,wan=0; printf(\请输入一个正整数\scanf(\m=x;

ge=m; m=m/10; w=1; n=ge; if(m)

{shi=m; m=m/10; w=2; n=n*10+shi; if(m)

{bai=m; m=m/10; w=3; n=n*10+bai;

专业整理 知识分享

完美WORD格式

if(m)

{qian=m; m=m/10; w=4; n=n*10+qian; if(m)

{wan=m; w=5; n=n*10+wan;} } } }

printf(\为%u位数\printf(\正整数的原序为:%u\printf(\正整数的逆序为:%u\

}

注:当该程序输入一个较大的5位数时,输出结果就不正确了,思考为什么?动手试一下怎样修改该程序。

第5章 循环结构程序设计

一、填空题

1.下面程序的功能是用“辗转相除法”求两个正整数的最大公约数。请填空。 #include main() {

int r,m,n;

scanf(\,&m,&n); if(m

【分析与提示】辗转相除法:两数相除,若不能整除,则以除数作为被除数,余数作为除数,继续相除,直到余数为0时,当前除数就是最大公约数。 【解答】(1)r=m;m=n;n=r; (2)r=m%n;

二.运行程序写结果

1.下列程序运行的运行结果为 。 #include main() {

int y=10; do {y--;

}while(--y);

printf(\,y--);

【分析与提示】注意 y-- 与y--的运算顺序。 【解答】 0

专业整理 知识分享

完美WORD格式

2.下列程序运行的运行结果为 。 main() {

int x=3,y=6,z=2; while(x++!=(y-=1)) { z+=1; if(y

printf(“%d,%d,%d\\n”,x,y,z); } }

【解答】4,5,3

3.下列程序运行的运行结果为 。 main() {

int a=1,b=0;

for( ;a<3 ;a++) switch(a++) {

case 1:b--; case 2:b++;

case 3:b+=3;break; }

printf(“%d\\n”,b); }

【解答】3

4.下列程序运行的运行结果为 。 main() {

int x=10,y=10,i; for(i=0;i<2 ;y=i++) printf(“MM”,x--,y); }

【解答】10 10 9 0 三. 编程题

1.求s=1+2+4+8+…+64的值。

【分析与提示】本题为数学项求和问题,数学项间的关系为:第n项的值为第n-1项的值2倍。参考代码:

main( ) {

int i,s=0,t=1; while(t<=64) { s=s+t;

专业整理 知识分享