部分习题答案第1章C程序知识初步答案略第2章基本数据类型及其操作1.判断题√××√××××√√2.填空题(1)inta;floatb;charc;(2)3(3)double(4)a=1,b=2,c=3(5)0整型(6)2(7)若有定义:intx=3,y=2;floata=2.5,b=3.5;则表达式(x+y)%2+(int)a/(int)b的值为1。(8)f3.选择题ACDDBDBACD4.改错题(1)#includestdoi.h改成#includestdio.hintcelsius;fahr;改成floatcelsius,fahr;printf(“fahr=d,celsius=%d\n”,fahr,celsius);改成printf(“fahr=%f,celsius=%f\n”,fahr,celsius);(2)printf(%d\n,m/n+a);改成printf(%f\n,m/n+a);printf(%f\n,m%a+b);改成printf(%f\n,m%(int)a+b);(3)下面程序中有两处错误,请查找并改正。#includestdio.hvoidmain(){intm,n;floata,b;scanf(%d,%f,&m,&a);scanf(%d,%f,&b,&n);改成scanf(%f,%d,&b,&n);printf(%f\n,m/n+a);printf(%f\n,m%n+b)改成printf(%f\n,m%n+b);}5.阅读程序(1)2(2)********(3)程序的功能:从键盘任意输入两个整数,输出它们的和。(4)26.7654326.编程题(1)编程求华氏温度50°F对应的摄氏温度C。#includestdio.hvoidmain(){floatcelsius,fahr;fahr=50;celsius=5*(fahr-32)/9;printf(fahr=%f,celsius=%f\n,fahr,celsius);}(2)编程从键盘输入一个数a,求它的平方并输出。#includestdio.hvoidmain(){inta,b;scanf(%d,&a);b=a*a;printf(a=%d,b=%d\n,a,b);}(3)定义三个int型变量x、y、z,从键盘读入x、y,把x对y的余数赋给z,并输出结果。#includestdio.hvoidmain(){intx,y,z;scanf(%d%d,&x,&y);z=x%y;printf(%d对%d的余数为%d\n,x,y,z);}(4)定义两个整型变量并赋值,编程实现两个整型数的互换。#includestdio.hvoidmain(){intx,y,t;x=3;y=4;t=x;x=y;y=t;printf(x=%d,y=%d\n,x,y);}(5)当n为152时,编程分别求出n的个位数(digit1)、十位数(digit2)和百位数(digit3)。#includestdio.hvoidmain(){intn,x,y,z;n=152;x=n/100;y=n/10%10;z=n%10;printf(%d的百位、十位、个位分别为%d,%d,%d\n,n,x,y,z);}第3章选择结构程序设计1.选择题BCCCCDCADA2.填空题(1)10.500000(2)优先级结合性(3)ASCII(4)0.000000(5)01(6)((ch='a')&&(ch='z'))||((ch='A')&&(ch='Z'))||((ch='0')&&(ch='9'))(7)①c=getchar()②%c③&c④putchar(c)(8)①t/3②default③1-d/100.0}3.分析下列程序,写出程序运行结果。(1)123.456001**123.46**123.456???(2)#includestdio.hvoidmain(){inta,b,max;scanf(“%d%d”,&a,&b);if(ab)max=a;elsemax=b;printf(“max=%d\n”,max);}如果输入3和4,则输出结果为max=4(3)-1(4)5(5)a=2,b=14.改错题(1)scanf(“%c,%d,%d,%f”,c,b,a,c);改成scanf(“%c,%f,%d”,&c,&b,&a);printf(“%c,%d,%d,%f”,c,b,a,c);改成printf(“%c,%f,%d,%d”,c,b,a,c);(2)if(xy)x=y;y=x;改成if(xy){x=y;y=x;}elsex=x+1;y=y+1;改成else{x=x+1;y=y+1;}5.编程题(1)计算以下分段函数155.105.2153/4)(xxxxxfy#includestdio.hvoidmain(){floatx,y;scanf(%f,&x);if(x=15)y=4*x/3;elsey=2.5*x-10.5;printf(y=f(%f)=%f,x,y);}(2)输入一个整数,若为奇数则输出其平方根,否则输出其立方根。(提示:可以利用数学函数pow(x,1.0/3)计算x的立方根)#includestdio.h#includemath.hvoidmain(){intt;scanf(%d,&t);if(t%2==1)printf(%d的平方根为%f,t,sqrt(t));elseprintf(%d的立方根为%f,t,pow(t,1.0/3));}(3)从键盘输入一个整数,判断该整数是否能同时被3和7整除。#includestdio.hvoidmain(){intt;scanf(%d,&t);if(t%3==0&&t%7==0)printf(%d能同时被3和7整除\n,t);elseprintf(%d不能同时被3和7整除\n,t);}(4)输入一个英文字母,判断该字母是大写字母还是小写字母。#includestdio.hvoidmain(){charch;ch=getchar();if(ch='a'&&ch='z')printf(%c是小写字母\n,ch);elseprintf(%c是大写字母\n,ch);}(5)从键盘任意输入一个字符,如果它是英文字母,则以小写的形式输出,否则输出“它不是英文字母”。#includestdio.hvoidmain(){charch;ch=getchar();if(ch='a'&&ch='z')printf(%c\n,ch);elseif(ch='A'&&ch='Z')printf(%c\n,ch+32);elseprintf(%c不是英文字母\n,ch);}(6)从键盘输入3个整数a、b、c,输出其中的最大数。#includestdio.hvoidmain(){inta,b,c,max;scanf(%d%d%d,&a,&b,&c);if(ab)max=a;elsemax=b;if(maxc)max=c;printf(%d,%d,%d中的最大数是%d\n,a,b,c,max);}(7)从键盘输入x,计算下列分段函数的值。1010101001010xxxy#includestdio.hvoidmain(){floatx,y;scanf(%f,&x);if(x-10)y=10;elseif(x=-10&&x=10)y=0;elsey=-10;printf(y=f(%f)=%f,x,y);}(8)从键盘输入4个整数a、b、c、d,按照由大到小的顺序输出。#includestdio.hvoidmain(){inta,b,c,d,t;scanf(%d%d%d%d,&a,&b,&c,&d);//先找出4个数中最大数,并存放在变量a中if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(ad){t=a;a=d;d=t;}//找出除a外其余3个数中的最大数,并存放在变量b中if(bc){t=b;b=c;c=t;}if(bd){t=b;b=d;d=t;}//找出变量c、d中的最大数,并存放在变量c中if(cd){t=c;c=d;d=t;}printf(%d%d%d%d\n,a,b,c,d);}(9)从键盘输入年月,输出该月的天数(考虑当年是否闰年)。#includestdio.hvoidmain(){intyear,day,t;scanf(%d%d,&year,&day);switch(day){case1:case3:case5:case7:case8:case10:case12:t=31;break;case2:if((year%400==0)||(year%4==0&&year%100!=0))t=29;elset=28;break;default:t=30;}printf(%d年%d月有%d天\n,year,day,t);}(10)输入月薪salary,输出应交的个人所得税tax。计算公式为:tax=rate*(salary-2000)当salary≤2500时,rate=0;当2500<salary≤4000时,rate=5%;当4000<salary≤7000时,rate=10%;当7000<salary≤22000时,rate=15%;当22000<salary≤42000时,rate=20%;当42000<salary≤62000时,rate=25%;当62000<salary≤82000时,rate=30%;当82000<salary≤102000时,rate=35%;当102000<salary时,rate=40%;要求给出问题求解的算法,用流程图表示,并用程序实现。#includestdio.hvoidmain(){floatsalary,tax;intrate;scanf(%f,&salary);if(salary=2500)rate=0;elseif(salary2500&&salary=4000)rate=5;elseif(salary4000&&salary=7000)rate=10;elseif(salary7000&&salary=22000)rate=15;elseif(salary22000&&salary=42000)rate=20;elseif(salary42000&&salary=62000)rate=25;elseif(salary62000&&salary=82000)rate=30;elseif(salary82000&&salary=102000)rate=35;elserate=40;tax=rate*0.01*(salary-2000);printf(%f\n,tax);}第4章循环结构1.选择题D(CAA)AB(AD)BBCCB2.填空题(1)0(2)-264(3)354%10354/100354/10%10(4)结束整个循环结束本次循环(5)n=999ns=n/10%10ng+ns+nb==5(6)程序填空。以下程序是计算1+2/3+3/5+4/7+5/9+……前20项之和。①sum=0②sum③b+23.写出下列程序的运行结果(1)#includestdio.hvoidmain(){intx=012,n=0;while(x){x-=2;n++;}printf(“x=%d,n=%d\n”,x,n);}x=0,n=5(2)i=6,y=10(3)sum=288(4)K=4(5)1.6000004.编程题(1)输入一个整数n,并求1-1/3+1/5-…的前n项和。#includestdio.hvoidmain(){doublea,sum=0;inti,m=1,n,j;printf(输入一个数:);scanf(%d,&n);for(i=1;i=n;i++){if(i%2=