谭浩强C语言程序设计习题集 下载本文

} t=a*r; b=a-t;

printf(\} 参考答案:【1】a/500 【2】r=0.08

4.116 某个自动加油站有'a','b','c'三种汽油,单价分别为1.50,1.35,1.18(元/千克),也提供了―自己加‖和―协助加‖两个服务等级。这样用户可以得到5%或10%的优惠。本程序针对用户输入加油量a,汽油品种b和服务类型c('f'--自动,'m'--自己,'e'--协助),输出应付款m。请分析程序填空。

main()

{float a,r1,r2,m; char b,c;

scanf(\swith(b)

{case 'a':r1=1.5;break; case 'b': 【1】 ;break; case 'c':r1=1.18;break; }

switch(c)

{case 'f':r2=0;break; case 'm':r2=0.05;break; case【2】:r2=0.1;break; }

m=【3】; printf(\}

参考答案:【1】r1=1.35【2】'e'【3】a*r1*(1-r2) 4.117 以下程序计算某年某月有几天。其中判别闰年的条件是:能被4整除但不能被100整除的年是闰年,能被400整除的年也是闰年。请分析程序填空。

main()

{int yy,mm,len;

printf(\

scanf(\switch(mm)

{case 1: case 3: case 5: case 7:case 8: case 10:case 12:【1】;break;

case 4: case 6: case 9: case 11:len=30;break;

case 2:if(yy%4==0&&yy0!=0||yy@0==0)【2】; else【3】; break;

default:printf(\}

printf(\}

参考答案:【1】len=31【2】len=29【3】len=28

*4.118 以下程序用以计算y年m1月d1日与同年的m2月d2日之间的天数(m2>=m1),并打印计算结果。若m1=m2且d1=d2则算一天。请分析程序填空。

main()

{int y,m1,d1,m2,d2; int i,d;

scanf(\y=(y%4==0【1】y0!=0【2】y@0==0)?1:0; d=0-d1;

for(i=m1;i

{case 1:case 3:case 5: case 7:case 8: case 10:case 12:d+=31;break; case 2:d=d+28+y; break;

case 4:case 6:case 9:case 11:【3】; }

printf(\} 参考答案:【1】&&【2】||【3】d=d+30 4.3 编程题

4.119 编制程序,要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。 参考程序:

main() {int a,b;

printf(\scanf(\

if (a*a+b*b>100) printf(\else printf(\}

4.120 试编程判断输入的正整数是否既是5又是7的整数倍,若是输出yes,否则输出no。 参考程序:

main() {int a;

printf(\scanf(\

if (a%5==0&&a%7==0) printf(\else printf(\}

4.121 请编程序,根据以下函数关系,对输入的每个x值,计算出相应的y值。 x y x≤0 0 0

参考程序:

main() {float x,y;

printf(\scanf(\y=-1;

if(x<0) y=0;

else if(x<=10) y=x;

else if(x<=20) y=10;

else if(x<40) y=0.5*x+20 else y=-1; if (y==-1) printf(\else printf(\}

4.122 输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一: (1)能同时被3,5,7整除

(2)能被其中两数整除(要指出哪两个)。 (3)能被其中一个数整除(要指出哪一个)。 (4)不能被任何一个整除。 参考程序:

main() {int m;

printf(\scanf(\

if(m%3==0&&m%5==0&&m%7==0) printf(\能同时被3,5,7整除\

else if((m%3==0&&m%5==0)||(m%3==0&&m%7==0)||(m%5==0&&m%7==0)) {printf(\能被其中两数整除\

if(m%3==0&&m%5==0) printf(\ else if(m%3==0&&m%7==0) printf(\ else printf(\ }

else if(m%3==0||m%5==0||m%7==0) {printf(\能被其中一个数整除\

if(m%3==0) printf(\else if(m%5==0) printf(\ else printf(\

}

else printf(\不能被任何一个整除\}

4.123 将以下程序段改用非嵌套的if语句实现。

int s,t,m; t=(int)(s/10); switch(t)

{case 10:m=5;break; case 9:m=4;break; case 8:m=3;break; case 7:m=2;break; case 6:m=1;break; default: m=0; }

参考程序:

m=0;

if(s>=100&&s<110) m=5; if(s>=90&&s<100) m=4; if(s>=80&&s<90) m=3; if(s>=70&&s<80) m=2; if(s>=60&&s<70) m=1; 4.124 用switch编程实现: -1 (x<0) y={0 (x=0)

1 (x>0)

参考程序:

void main() {float x; int y;

printf(\ scanf(\ switch(x<0)

{case 1:y=-1;break; case 0:switch(x==0) {case 1:y=0;break; case 0:y=1; } }

printf(\}

4.125 将以下程序段改用嵌套的if语句实现。

int s,t,m; t=(int)(s/10); switch(t)

{case:m=5;break; case 9:m=4;break; case 8:m=3;break; case 7:m=2;break; case 6:m=1;break; default: m=0; } 参考程序:

if(s>=110&&s<60) m=0 else if(s<110) m=5; else if(s<100) m=4; else if(s<90) m=3; else if(s<80) m=2; else m=1;

4.126 请将以下语句改写成为switch语句。

if(s>0&&s<=10)

if(s>=3&&s<=6) x=2; else if(s>1||s>8) x=3; else x=1; else x=0;