C语言课后习题答案.docx
- 文档编号:26478223
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:90
- 大小:169.85KB
C语言课后习题答案.docx
《C语言课后习题答案.docx》由会员分享,可在线阅读,更多相关《C语言课后习题答案.docx(90页珍藏版)》请在冰豆网上搜索。
C语言课后习题答案
C语言课后习题答案-第四版-
第一章
5、请参照本章例题,编写一个C语言程序,输出以下信息:
****************************
VeryGood!
****************************
#include
intmain()
{
printf("VeryGood!
\n\n");
return0;
}
6、编写一个C语言程序,输入a,b,c三个值,输出其中最大值。
#include
intmain()
{
inta,b,c,max;
printf("pleaseinputa,b,c:
\n");scanf("%d%d%d",&a,&b,&c);
max=a;
if(max
max=b;
if(max max=c; printf("Thelargestnumberis%d\n",max); return0; } #include intmain() { inta,b,c,max; printf("pleaseinputa,b,c: \n");scanf("%d%d%d",&a,&b,&c);max=a>b? a: b; max=max>c? max: c; printf("Thelargestnumberis%d\n",max);return0; } 第3章 1、假如我国国民生产总值的年增长率为9%,计算10年后我国国民生产总值与现在相比增长多少百分比。 计算公式为 P=(1+r)八n r为年增长率,n为年数,p为与现在相比的倍数。 #include #include intmain() { floatp,r,n; r=0.1; n=10;p=pow(1+r,n); printf("p=%f\n",p); return0; 2、存款利息计算。 有1000元,想存5年,可按以下5种办法存: 1)一次存5年期 2)先存2年期,到期后将本息在存3年期 3)先存3年期,到期后将本息在存2年期 5)存活期存款。 活期利息每一季度结算一次。 2007年12月的银行存款利息如下: 1年定期存款利息为4.14%; 2年定期存款利息为4.68%; 3年定期存款利息为5.4%; 5年定期存款利息为5.85%; 活期存款利息为0.27%(活期利息每一季度结算一次。 )如果r为年利率,n为存款年数,则计算本息和的公式为 1年期本息和: P=1000*(1+r); n年期本息和: P=1000*(1+n*r); 存n次1年期的本息和: P=1000*(1+r)5; 存活期本息和: P=1000*(1+r/4)八4n。 说明: P=1000*(1+r/4)八4n。 是一个季度的本息和。 #include #include intmain() { floatr5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p=1000; p1=p*((1+r5)*5); p2=p*(1+2*r2)*(1+3*r3);再存3年期 p3=p*(1+3*r3)*(1+2*r2); 再存2年期p4=p*pow(1+r1,5); 再存1年期,连续存5次p5=p*pow(1+r0/4,4*5); 季度结算一次 printf("p1=%f\n",p1); printf("p2=%f\n",p2); printf("p3=%f\n",p3); printf("p4=%f\n",p4); printf("p5=%f\n",p5); return0; } 3、购房从银行贷了一笔款r,计算多少月能还清。 设 //一次存5年期 //先存2年期,到期后将本息 //先存3年期,到期后将本息 //存1年期,到期后将本息存 //存活期存款。 活期利息每一 //输出按第1方案得到的本息和 //输出按第2方案得到的本息和 //输出按第3方案得到的本息和 //输出按第4方案得到的本息和 //输出按第5方案得到的本息和 d,准备每月还款额为p,月利率为 d为300000元,p为6000元,r为 1%。 对求得的月份取小数点后一位,对第2位按四舍五入处理。 提示: 计算还请月数m的公式如下: m=[logp-og(p-d*r)]/log(1+r) 可以讲公式该写为 m={log[p/(p-d*r)]}/log(1+r) C的库函数中有求对数的函数log10,是求以10为底的对数,log(p)表示logp。 #include #include intmain() { floatd=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r))/log10(1+r); printf("m=%6.2f\n",m); return0; } 6、请编将“China”,编译成密码,密码规律是: 用原有的字母后面第4个字母代替原来的字母。 #include intmain() { charc1='C',c2='h',c3='i',c4='n',c5='a'; c1=c1+4; c2=c2+4; c3=c3+4; c4=c4+4; c5=c5+4; printf("passworis%c%c%c%c%c\n",c1,c2,c3,c4,c5);return0; } 7、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面 积、圆柱体积。 用scanf输入数据,输出计算结果,输出时要求 有文字说明,取小数点后 2位数字。 请编程序。 #include intmain() { floath,r,l,s,sq,vq,vz; floatpi=3.141526; printf("请输入圆半径 r,圆柱高h: "); scanf("%f,%f",&r,&h); 圆柱高h //要求输入圆半径r和 l=2*pi*r; //计算圆周长l s=r*r*pi; //计算圆面积s sq=4*pi*r*r; //计算圆球表面积sq vq=3.0/4.0*pi*r*r*r; //计算圆球体积vq vz=pi*r*r*h; //计算圆柱体积vz printf("圆周长为: l=%6.2f\n",l); printf("圆面积为: s=%6.2f\n",s); printf("圆球表面积为: sq=%6.2f\n",sq); printf("圆球体积为: v=%6.2f\n",vq); printf("圆柱体积为: vz=%6.2f\n",vz); return0; } 第四章 4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。 #include intmain() { inta,b,c; printf("请输入三个整数: ");scanf("%d,%d,%d",&a,&b,&c); if(a if(b else printf("max=%d\n",b); elseif(a else printf("max=%d\n",a); return0; } 4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。 #include intmain() { inta,b,c,temp,max; printf("请输入三个整数: "); scanf("%d,%d,%d",&a,&b,&c); temp=(a>b)? a: b;/*将a和b中的大者 存入temp中*/ max=(temp>c)? temp: c;/*将a和b中的大者与 c比较,取最大者*/ printf("三个整数的最大数是%d\n",max); return0; } 5、从键盘输入一个小于1000的正整数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。 要求在输入数据后先对其检查是否为小于1000的正数。 若不是,则要求从新输入。 #include #include #defineM1000 intmain() { inti,k; printf("请输入一个小于%d的整数i: ",M); scanf("%d",&i); while(i>M) { printf("输入的数不符合要求,请重新输入一个小于 整数i: ",M); scanf("%d",&i); } k=sqrt(i); printf("%d的平方根的整数部分是: %d\n",i,k); return0; } 6、有一个函数: {x(x<1) y= (1<=x<10) %d的 2*x-1 3*x-11(x>=10) 写程序,输入x的值,输出y相应的值。 #include intmain() { •intx,y; printf("输入x: ");scanf("%d",&x);if(x<1) { y=x; printf("x=%3d, } elseif(x<10) { y=2*x-1; printf("x=%d,}else{ y=3*x-11; printf("x=%d, /*x<1*/ y=x=%d\n",x,y); /*1= y=2*x-1=%d\n",x,y); /*x>=10*/ y=3*x-11=%d\n",x,y) } return0; } 7、有一个函数: {-1(x<0) Y=0(x=0) 1(x>0) 写程序,输入x的值,输出y相应的值。 #include { intx,y; printf("pleaseenterx: "); scanf("%d",&x); y=0; if(x>=0) if(x>0)y=1; elsey=-1; printf("x=%d,y=%d\n",x,y); return0; 8、给出一百分制成绩,要求输出成绩等级‘A','B','C','D','E'。 90分以上为‘A'80〜89分为'B'70〜79分为'C'60〜69分为''60分以下为'' #include intmain() { 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);return0; } 9、给出一个不多于5位数的正整数; (1)求出它是几位数; (2)分别输出每一位数字; (3)按逆顺序输出各位数,例如原有数为123,应输出321.#include #include intmain() { intnum,indiv,ten,hundred,thousand,ten_thousand,place;//分别代表个位,十位,百位,千位,万位和位数 printf("请输入一个整数(0-99999): "); scanf("%d",&num); if(num>9999) place=5; elseif(num>999) place=4; elseif(num>99) place=3; elseif(num>9) place=2; elseplace=1; printf("位数: %d\n",place); printf("每位数字为: "); ten_thousand=num/10000; thousand=(int)(num-ten_thousand*10000)/1000; hundred=(int)(num-ten_thousand*10000-thousand*1000)/100; ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10; indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*1 00-ten*10); printf("\n反序数字为: "); switch(place) { 5: caseprintf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);break; case4: printf("%d%d%d%d\n",indiv,ten,hundred,thousand);break; case3: printf("%d%d%d\n",indiv,ten,hundred);break; case2: printf("%d%d\n",indiv,ten);break; case1: printf("%d\n",indiv);break; } return0; } 11、输入4个整数,要求按由小到大的顺序输出。 #include intmain() { intt,a,b,c,d; printf("请输入四个数: "); scanf("%d%d%d%d",&a,&b,&c,&d);printf("a=%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=b;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); return0; } 12、有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2, -2),圆半径为1,这4个圆塔高位10cm,塔以外无建筑物。 求该点的建筑物高度(塔外的高度为零)。 #include intmain() { inth=10; float x1=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-x4)*(x-x4)+(y-y4)*(y-y4);/*求该点到各中心点距离*/ d2=(x-x1)*(x-x1)+(y-y1)*(y-y1); d3=(x-x2)*(x-x2)+(y-y2)*(y-y2); d4=(x-x3)*(x-x3)+(y-y3)*(y-y3); if(d1>1&&d2>1&&d3>1&&d4>1)h=0;/*判断该点是否在塔外*/ printf("该点高度为%d\n",h); return0; } 第五章 例5.7用pi/4=1-1/3+1/5-1/7+……公式求pi近似值,直到 发现某一项的绝对值小于10八6为止。 #include 〃程序中用到数学函数fabs,应 //sign用来表示数值的符 #include intmain() { intsign=1,count=0; 号,count用来统计循环次数 doublepi=0.0,n=1.0,term=1.0;//pi开始代表多项式的值,最后 3、输入两个正整数m和n,求其最大公约数和最小公倍数。 #include intmain() intp,r,n,m,temp; printf("请输入两个正整数n,m: ");scanf("%d,%d,",&n,&m); if(n { temp=n; n=m;m=temp; } p=n*m; while(m! =0) { r=n%m; n=m; m=r; } printf("它们的最大公约数为: %d\n",n); printf("它们的最小公约数为: %d\n",p/n); return0; } 4、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include intmain() { charc; intletters=0,space=0,digit=0,other=0; printf("请输入一行字符: \n");while((c=getchar())! ='\n') {if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; elseif(c=='')space++; elseif(c>='0'&&c<='9')digit++; elseother++; } printf("字母数: %d\n空格数: %d\n数字数: %d\n其它字符数: %d\n",letters,space,digit,other); return0; 5、求Sn=a+aa+aaa++aaa之值,其中a是一个数字,n表 示a的位数。 n由键盘输入。 #include intmain() { inta,n,i=1,sn=0,tn=0; printf("a,n=: "); scanf("%d,%d",&a,&n); while(i<=n) { tn=tn+a;/*赋值后的tn为i个a组成数的值*/sn=sn+tn;/*赋值后的sn为多项式前i项之和*/a=a*10; ++i; } printf("a+aa+aaa+...=%d\n",sn); return0; } 6、求和: 1! +2! +3! +……+20! 。 #include intmain() { doubles=0,t=1; intn; for(n=1;n<=20;n++) { t=t*n; s=s+t; } printf("1! +2! +...+20! =%22.15e\n",s); return0; } 7、求1+2+3++100+1+2八2+3八2+4八2++50八2+1+1/2+1/3+1/4+……+1/10。 #include intmain() intn1=100,n2=50,n3=10; doublek,s1=0,s2=0,s3=0; {s1=s1+k;} {s2=s2+k*k;} {s3=s3+1/k;} printf("sum=%15.6f\n",s1+s2+s3); return0; } 8、输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。 例如153是一位水仙花数,因为153=13+53+33。 #include intmain() { inti,j,k,n; printf("parcissusnumbersare"); for(n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf("%d",n); } printf("\n"); return0; 9、编程求1000之内的完数,并按下面格式输出其因子: 6itsfactorsare1,2,3#include intm,s,i; for(m=2;m<1000;m++) { s=0; for(i=1;i if((m%i)==0)s=s+i;if(s==m){ printf("%d,itsfactorsare",m); for(i=1;i if(m%i==0)printf("%d",i);printf("\n"); } } return0; 10、有一个分数序列: 2/1,3/2,5/3,8/5,13/8,21/13,…… 求出这个数列前20项之和。 #include intmain() { inti,n=20; doublea=2,b=1,s=0,t; for(i=1;i<=n;i++) { s=s+a/b; t=a, a=a+b, b=t; } printf("sum=%16.10f\n",s); return0; } 11、一个球从100米敢赌下落,每次反弹高度为原来的一半,在下落,在反弹。 求第10次落地时共经过多少米? 第10次反弹多高? #include intmain() { doublesn=10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课后 习题 答案