资源描述
C语言课后习题答案-第四版-第一章5、请参照本章例题,编写一个C语言程序,输出以下信息:*V e r y G o o d !*#include int main ( ) printf (*nn);printf( Very Good!nn);printf (*n);return 0;6、编写一个C语言程序,输入a,b,c三个值,输出其中最大值。#include int main()int a,b,c,max;printf(please input a,b,c:n);scanf(%d%d%d,&a,&b,&c);max=a;if (maxb)max=b;if (maxc)max=c;printf(The largest number is %dn,max);return 0;#include int main()int a,b,c,max;printf(please input a,b,c:n);scanf(%d%d%d,&a,&b,&c);max=ab?a:b;max=maxc?max:c;printf(The largest number is %dn,max);return 0;第3章1、假如我国国民生产总值的年增长率为9%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为 P=(1+r)nr 为年增长率,n 为年数,p为与现在相比的倍数。#include #include int main()float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf(p=%fn,p);return 0;2、存款利息计算。有1000元,想存5年,可按以下5种办法存:(1)一次存5年期。(2)先存2年期,到期后将本息在存3年期。(3)先存3年期,到期后将本息在存2年期。(4)先存1年期,到期后将本息在存1年期,连续存5次。(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)n;存活期本息和:P=1000*(1+r/4)4n。说明:P=1000*(1+r/4)4n。是一个季度的本息和。#include #include int main()float r5,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); / 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); / 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); / 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); / 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); / 存活期存款。活期利息每一季度结算一次 printf(p1=%fn,p1); / 输出按第1方案得到的本息和 printf(p2=%fn,p2); / 输出按第2方案得到的本息和 printf(p3=%fn,p3); / 输出按第3方案得到的本息和 printf(p4=%fn,p4); / 输出按第4方案得到的本息和 printf(p5=%fn,p5); / 输出按第5方案得到的本息和 return 0;3、购房从银行贷了一笔款d ,准备每月还款额为p ,月利率为r ,计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。提示:计算还请月数m 的公式如下:m = log p log(p-d*r) / log(1+r)可以讲公式该写为m = log p / (p d*r) / log(1+r)C的库函数中有求对数的函数log10,是求以10为底的对数,log(p)表示log p。#include #include int main()float d=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r)/log10(1+r);printf(m=%6.2fn,m);return 0;6、请编将“China”,编译成密码,密码规律是:用原有的字母后面第4个字母代替原来的字母。#include int main()char c1=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(passwor is %c%c%c%c%cn,c1,c2,c3,c4,c5);return 0;7、设圆半径r =1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。#include int main ()float h,r,l,s,sq,vq,vz;float pi=3.141526;printf(请输入圆半径r,圆柱高h);scanf(%f,%f,&r,&h); /要求输入圆半径r和圆柱高h l=2*pi*r; /计算圆周长ls=r*r*pi; /计算圆面积ssq=4*pi*r*r; /计算圆球表面积sqvq=3.0/4.0*pi*r*r*r; /计算圆球体积vqvz=pi*r*r*h; /计算圆柱体积vzprintf(圆周长为: l=%6.2fn,l);printf(圆面积为: s=%6.2fn,s); printf(圆球表面积为: sq=%6.2fn,sq);printf(圆球体积为: v=%6.2fn,vq);printf(圆柱体积为: vz=%6.2fn,vz);return 0;第四章4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。#include int main()int a,b,c;printf(请输入三个整数:);scanf(%d,%d,%d,&a,&b,&c);if (ab)if (bc)printf(max=%dn,c);elseprintf(max=%dn,b);else if (ac)printf(max=%dn,c);elseprintf(max=%dn,a);return 0;4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。#include int main() int a,b,c,temp,max;printf(请输入三个整数:);scanf(%d,%d,%d,&a,&b,&c);temp=(ab)?a:b; /*将a和b中的大者存入temp中*/max=(tempc)?temp:c; /*将a和b中的大者与c比较,取最大者*/printf(三个整数的最大数是%dn,max);return 0;5、从键盘输入一个小于1000的正整数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其检查是否为小于1000的正数。若不是,则要求从新输入。#include #include #define M 1000int main()int i,k; printf(请输入一个小于%d的整数i:,M);scanf(%d,&i);while (iM) printf(输入的数不符合要求,请重新输入一个小于%d的整数i:,M);scanf(%d,&i);k=sqrt(i);printf(%d的平方根的整数部分是:%dn,i,k);return 0;6 、有一个函数: x (x1)y = 2*x - 1 (1=x=10)写程序,输入x 的值,输出y 相应的值。#include int main() int x,y; printf(输入x:); scanf(%d,&x); if(x1) /* x1 */ y=x; printf(x=%3d, y=x=%dn ,x,y); else if(x10) /* 1=x=10 */ y=3*x-11; printf(x=%d, y=3*x-11=%dn,x,y); return 0;7、有一个函数: - 1 (x0)写程序,输入x 的值,输出y 相应的值。#include int main() int x,y; printf(please enter x:); scanf(%d,&x); y=0; if(x=0) if(x0) y=1; else y=-1; printf(x=%d,y=%dn,x,y);return 0;8、给出一百分制成绩,要求输出成绩等级A,B,C,D,E。90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。#include int main()float score; char grade; printf(请输入学生成绩:); scanf(%f,&score); while (score100|score0)printf(n 输入有误,请重输);scanf(%f,&score); switch(int)(score/10)case 10:case 9: grade=A;break;case 8: grade=B;break;case 7: grade=C;break;case 6: grade=D;break;case 5:case 4:case 3:case 2:case 1:case 0: grade=E; printf(成绩是 %5.1f,相应的等级是%cn ,score,grade);return 0;9、给出一个不多于5位数的正整数;(1)求出它是几位数;(2)分别输出每一位数字;(3)按逆顺序输出各位数,例如原有数为123,应输出321.#include #include int main()int num,indiv,ten,hundred,thousand,ten_thousand,place;/分别代表个位,十位,百位,千位,万位和位数 printf(请输入一个整数(0-99999):);scanf(%d,&num);if (num9999) place=5;else if (num999)place=4;else if (num99)place=3;else if (num9)place=2;else place=1;printf(位数:%dn,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*100-ten*10);printf(n反序数字为:);switch(place)case 5: printf(%d%d%d%d%dn,indiv,ten,hundred,thousand,ten_thousand); break;case 4: printf(%d%d%d%dn,indiv,ten,hundred,thousand); break;case 3:printf(%d%d%dn,indiv,ten,hundred); break;case 2: printf(%d%dn,indiv,ten); break;case 1: printf(%dn,indiv); break;return 0;11、输入4个整数,要求按由小到大的顺序输出。#include int main()int t,a,b,c,d;printf(请输入四个数:);scanf(%d%d%d%d,&a,&b,&c,&d);printf(a=%d,b=%d,c=%d,d=%dn,a,b,c,d);if (ab) t=a;a=b;b=t; if (ac) t=a;a=c;c=t; if (ad) t=a;a=d;d=t; if (bc) t=b;b=c;c=t; if (bd) t=b;b=d;d=t; if (cd) t=c;c=d;d=t; printf(排序结果如下: n);printf(%d %d %d %d n ,a,b,c,d);return 0;12、有4个圆塔,圆心分别为(2,2)、(- 2,2)、(- 2,- 2)、(2,- 2),圆半径为 1 ,这4个圆塔高位10cm, 塔以外无建筑物。求该点的建筑物高度(塔外的高度为零)。#include int main()int h=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 (d11 & d21 & d31 & d41) h=0; /*判断该点是否在塔外*/printf(该点高度为 %dn,h);return 0;第五章 例57 用pi/4=1- 1/3+1/5- 1/7+公式求pi近似值,直到发现某一项的绝对值小于106为止。#include #include / 程序中用到数学函数fabs,应包含头文件math.nint main()int sign=1,count=0; / sign用来表示数值的符号,count用来统计循环次数double pi=0.0,n=1.0,term=1.0;/ pi开始代表多项式的值,最后代表的值, n代表分母, term代表当前项的值while(fabs(term)=1e-8) / 检查当前项term的绝对值是否大于或等于10的(-6)次方pi=pi+term; / 把当前项term累加到pi中n=n+2; / n+2是下一项的分母 sign=-sign; / sign代表符号,下一项的符号与上一项符号相反term=sign/n; / 求出下一项的值termcount+; / count累加1pi=pi*4; / 多项式的和pi乘以4,才是的近似值printf(pi=%10.8fn,pi); / 输出的近似值 printf(count=%dn,count); / 输出循环次数return 0;3、输入两个正整数m和n ,求其最大公约数和最小公倍数。#include int main()int p,r,n,m,temp;printf(请输入两个正整数n,m:);scanf(%d,%d,&n,&m);if (nm)temp=n;n=m;m=temp;p=n*m;while(m!=0)r=n%m;n=m;m=r;printf(它们的最大公约数为:%dn,n);printf(它们的最小公约数为:%dn,p/n);return 0;4、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。#include int main() char c; int letters=0,space=0,digit=0,other=0; printf(请输入一行字符:n); while(c=getchar()!=n) if (c=a & c=A & c=0 & c=9) digit+; else other+; printf(字母数:%dn空格数:%dn数字数:%dn其它字符数:%dn,letters,space,digit,other); return 0; 5、求Sn=a+aa+aaa+aaa之值,其中a是一个数字,n 表示a 的位数。n 由键盘输入。#include int main()int a,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+.=%dn,sn);return 0;6、求和:1!+2!+3!+20!。#include int main()double s=0,t=1;int n;for (n=1;n=20;n+)t=t*n;s=s+t;printf(1!+2!+.+20!=%22.15en,s);return 0;7、求1+2+3+100+1+22+32+42+502+1+1/2+1/3+1/4+1/10。#include int main()int n1=100,n2=50,n3=10;double k,s1=0,s2=0,s3=0;for (k=1;k=n1;k+) /*计算1到100的和*/ s1=s1+k;for (k=1;k=n2;k+) /*计算1到50各数的平方和*/ s2=s2+k*k;for (k=1;k=n3;k+) /*计算1到10的各倒数和*/ s3=s3+1/k;printf(sum=%15.6fn,s1+s2+s3);return 0;8、输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如153是一位水仙花数,因为153=13+53+33。#include int main()int i,j,k,n;printf(parcissus numbers are );for (n=100;n1000;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);return 0;9、编程求1000之内的完数,并按下面格式输出其因子: 6 its factors are 1 ,2,3#include int main()int m,s,i;for (m=2;m1000;m+)s=0;for (i=1;im;i+)if (m%i)=0) s=s+i;if(s=m)printf(%d,its factors are ,m);for (i=1;im;i+)if (m%i=0) printf(%d ,i);printf(n); return 0;10、有一个分数序列: 2/1,3/2,5/3,8/5,13/8,21/13,求出这个数列前20项之和。#include int main()int i,n=20;double a=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.10fn,s);return 0;11、一个球从100米敢赌下落,每次反弹高度为原来的一半,在下落,在反弹。求第10次落地时共经过多少米?第10次反弹多高?#include int main()double sn=100,hn=sn/2;int n;for (n=2;n=10;n+)sn=sn+2*hn; /*第n次落地时共经过的米数*/hn=hn/2; /*第n次反跳高度*/printf(第10次落地时共经过%f米n,sn);printf(第10次反弹%f米n,hn);return 0;12、猴子吃桃问题。猴子第1天摘了若干个桃子,当即吃了一半零一个;第2剩下的吃了一半零一个,一次循环。到第十天时想吃就剩下一个桃子。求第一天摘了几个桃子?#include int main()int day,x1,x2;day=9;x2=1;while(day0)x1=(x2+1)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/x2=x1;day-;printf(total=%dn,x1);return 0;16、输出以下图案: * *#include int main()int i,j,k;for (i=0;i=3;i+)for (j=0;j=2-i;j+)printf( );for (k=0;k=2*i;k+)printf(*);printf(n);for (i=0;i=2;i+)for (j=0;j=i;j+)printf( );for (k=0;k=4-2*i;k+)printf(*);printf(n);return 0;17、甲队A,B,C 3 人,乙队 X,Y,Z 3人。A不和X比;C不和X,Z比,请编程找出3 对赛手的名单。#include int main()char i,j,k; /*是a的对手;j是b的对手;k是c的对手*/for (i=x;i=z;i+)for (j=x;j=z;j+)if (i!=j)for (k=x;k=z;k+)if (i!=k & j!=k)if (i!=x & k!=x & k!=z)printf(A-%cnB-%cnC-%cn,i,j,k);return 0;第六章1、用筛选法求100之内的素数。#include #include int main()int i,j,n,a101; for (i=1;i=100;i+) ai=i; a1=0; for (i=2;isqrt(100);i+) for (j=i+1;j=100;j+) if(ai!=0 & aj!=0) if (aj%ai=0) aj=0; printf(n); for (i=2,n=0;i=100;i+) if(ai!=0) printf(%5d,ai); n+; if(n=10) printf(n); n=0; printf(n); return 0;2、用选择法对10个整数排序。#include int main()int i,j,min,temp,a11; printf(enter data:n); for (i=1;i=10;i+) printf(a%d=,i); scanf(%d,&ai); printf(n); printf(The orginal numbers:n); for (i=1;i=10;i+) printf(%5d,ai); printf(n); for (i=1;i=9;i+)min=i; for (j=i+1;jaj) min=j; temp=ai; ai=amin; amin=temp; printf(nThe sorted numbers:n); for (i=1;i=10;i+) printf(%5d,ai); printf(n); return 0;3、求一个3 x 3 的整型矩阵对角线元素之和。#include int main()int a33,sum=0;int i,j; printf(enter data:n); for (i=0;i3;i+) for (j=0;j3;j+) scanf(%3d,&aij); for (i=0;i3;i+) sum=sum+aii; printf(sum=%6dn,sum); return 0;4、有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。#include int main() int a11=1,4,6,9,13,16,19,28,40,100; int temp1,temp2,number,end,i,j; printf(array a:n); for (i=0;iend) a10=number; else for (i=0;inumber) temp1=ai; ai=number; for (j=i+1;j11;j+) temp2=aj; aj=temp1; temp1=temp2; break; printf(Now array a:n); for (i=0;i11;i+) printf(%5d,ai); printf(n); return 0;5、将一个数组中的值按逆顺序重新存放。例如:8,6,5,4,1。要求改为:1,4,5,6,8.。#include #define N 5int main() int aN,i,temp; printf(enter array a:n); for (i=0;iN;i+) scanf(%d,&ai); printf(array a:n); for (i=0;iN;i+) printf(%4d,ai); for (i=0;iN/2;i+) /循环的作用是将对称的元素的值互换 temp=ai; ai=aN-i-1; aN-i-1=temp; printf(nNow,array a:n);for (i=0;iN;i+) printf(%4d,ai);printf(n); return 0; 6、输出以下杨辉三角形(要求输出10行)。1 1 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1#include #define N 10int main() int i,j,aNN; for (i=0;iN;i+) aii=1; ai0=1; for (i=2;iN;i+) for (j=1;j=i-1;j+) aij=ai-1j-1+ai-1j; for (i=0;iN;i+)for (j=0;j=i;j+) printf(%6d,aij); printf(n); printf(n); return 0;7、输出“魔方阵”。所谓魔方阵就是每行每列和对角线之和相等。例如:8 1 6 3 5 74 9 2要求输出1n2的自然数构成的魔方阵。#include int main() int a1515,i,j,k,p,n; p=1; while(p=1)printf(enter n(n=1-15):); scanf(%d,&n); if (n!=0) & (n=15) & (n%2!=0) p=0; for (i=1;i=n;i+) for (j=1;j=n;j+) aij=0; j=n/2+1; a1j=1; for (k=2;k=n*n;k+)i=i-1; j=j+1; if (in) i=i+2; j=j-1; else if (in) j=1; if (aij=0) aij=k; else i=i+2; j=j-1; aij=k; for (i=1;i=n;i+) for (j=1;j=n;j+) printf(%5d,aij); printf(n); return 0;9、有15个数按由大到小顺序存放在一个数组中,输入一个数,要求折半查找法找出该数是数组中第几个元素值。如果不在数组中则输出“无此数”。#include #define N 15int main() int i,number,top,bott,mid,loca,aN,flag=1,sign; char c; printf(enter data:n); scanf(%d,&a0); i=1; while(i=ai-1) i+; else printf(enter this data again:n); printf(n); for (i=0;iN;i+) printf(%5d,ai); printf(n); while(flag)printf(input number to look for:); scanf(%d,&number); sign=0; top=0; /top是查找区间的起始位置 bott=N-1; /bott是查找区间的最末位置 if (numberaN-1) /要查的数不在查找区间内 loca=-1; / 表示找不到 while (!sign) & (top=bott) mid=(bott+top)/2; if (number=amid) loca=mid; printf(Has found %d, its position is %dn,number,loca+1); sign=1; else if (numberamid) bott=mid-1; else top=mid+1; if(!sign|loca=-1) printf(cannot find %d.n,number); printf(continu or not(Y/N)?); scanf( %c,&c); if (c=N|c=n) flag=0; return 0; 10、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符个数。#include int main()int i,j,upp,low,dig,spa,oth; char text380; upp=low=dig=spa=oth=0; for (i=0;i3;i+) printf(please input line %d:n,i+1); gets(texti); for (j=0;j=A& textij=a & textij=0 & textij=9) dig+; else if (textij= ) spa+; else oth+; printf(nupper case: %dn,upp); printf(lower case: %dn,low); printf(digit : %dn,dig); printf(space : %dn,spa); printf(other : %dn,oth);return 0;11、输出以下图案:* * * * * * * * * * * * * * * * * * * * *#include int main() char a5=*,*,*,*,*; int i,j,k; char space= ; for (i=0;i5;i+) printf(n); printf( ); for (j=1;j=i;j+) printf(%c,space); for (k=0;kZ,BY,CXaz,by,cx编程译回原文并输出密码和原文。#include int main() int j,n; char ch80,tran80; printf(input cipher code:); gets(ch); printf(ncipher code :%s,ch); j=0; while (chj!=0) if (chj=A) & (chj=a) & (chj=z) tranj=219-chj; else tranj=chj; j+; n=j; printf(noriginal text:); for (j=0;jZ,BY,CXaz,by,cx编程译回原文并输出密码和原文。#include int main()int j,n; char ch80; printf(input cipher code:n); gets(ch); printf(ncipher code:%sn,ch); j=0; while (chj!=0) if (chj=A) & (chj=Z) chj
展开阅读全文