1、C 语言课后习题答案-第四版- 谭浩强(1-7)第一章#include int main ( ) printf (“*nn“);printf(“ Very Good!nn“);printf (“*n“);return 0;#include int main()int a,b,c,max;printf(“please input a,b,c:n“);scanf(“%d,%d,%d“,max=a;if (max#include int main()float p,r,n;r=0.1;n=10;p=pow(1+r,n); printf(“p=%fn“,p);return 0;#include #in
2、clude int main()float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;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
3、*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;#include #include int main()double r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1
4、000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;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 方
5、案得到的本息和 printf(“p2=%fn“,p2); / 输出按第 2 方案得到的本息和 printf(“p3=%fn“,p3); / 输出按第 3 方案得到的本息和 printf(“p4=%fn“,p4); / 输出按第 4 方案得到的本息和 printf(“p5=%fn“,p5); / 输出按第 5 方案得到的本息和 return 0;#include #include int main()float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*
6、(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=%10.2fn“,p1); / 输出按第 1 方案得到的本息和 printf(“p2=%10.2fn“,p2); / 输出按第 2 方案得到的本息和 pri
7、ntf(“p3=%10.2fn“,p3); / 输出按第 3 方案得到的本息和 printf(“p4=%10.2fn“,p4); / 输出按第 4 方案得到的本息和 printf(“p5=%10.2fn“,p5); / 输出按第 5 方案得到的本息和 return 0;#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;#include int main()int c1,c2;c1=197;c2=198;prin
8、tf(“c1=%c,c2=%cn“,c1,c2);printf(“c1=%d,c2=%dn“,c1,c2);return 0; #include int main()int a,b;float x,y;char c1,c2;scanf(“a=%d b=%d“,scanf(“%f %e“,scanf(“%c%c“,printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn“,a,b,x,y,c1,c2);return 0;#include int main()char c1=C,c2=h,c3=i,c4=n,c5=a;c1=c1+4;c2=c2+4;c3=c3+4;c4=c
9、4+4;c5=c5+4;printf(“passwor is %c%c%c%c%cn“,c1,c2,c3,c4,c5);return 0;#include int main ()float h,r,l,s,sq,vq,vz;float pi=3.141526;printf(“请输入圆半径 r,圆柱高 h“);scanf(“%f,%f“, /要求输入圆半径 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; /计算圆柱体积
10、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;#include int main()char c1,c2;printf(“请输入两个字符 c1,c2:“);c1=getchar();c2=getchar();printf(“用 putchar 语句输出结果为:“);putchar(c1);putchar(c2);printf(“n“
11、);printf(“用 printf 语句输出结果为:“);printf(“%c %cn“,c1,c2);return 0;#include int main()int c1,c2; /整型定义 printf(“请输入两个整数 c1,c2:“);scanf(“%d,%d“,printf(“按字符输出结果:n“);printf(“%c,%cn“,c1,c2);printf(“按 ASCII 码输出结果为 :n“);printf(“%d,%dn“,c1,c2);return 0;#include int main()char c1,c2; /定义字符型变量int i1,i2; /定义整型变量 pr
12、intf(“请输入两个字符 c1,c2:“);scanf(“%c,%c“,i1=c1; /赋值给整型变量 i2=c2;printf(“按字符输出结果:n“);printf(“%c,%cn“,i1,i2);printf(“按整数输出结果:n“);printf(“%d,%dn“,c1,c2);return 0;#include int main()char c1,c2; /定义为字符型 int i1,i2; /定义为整型 printf(“请输入两个整数 i1,i2:“);scanf(“%d,%d“,c1=i1; /将整数赋值给字符变量 c2=i2;printf(“按字符输出结果:n“);print
13、f(“%c,%cn“,c1,c2);printf(“按整数输出结果:n“);printf(“%d,%dn“,c1,c2);return 0;第四章#include int main()int a,b,c;printf(“请输入三个整数:“);scanf(“%d,%d,%d“,if (aint main() int a,b,c,temp,max;printf(“请输入三个整数:“);scanf(“%d,%d,%d“,temp=(ab)?a:b; /*将 a 和 b 中的大者存入 temp 中*/max=(tempc)?temp:c; /*将 a 和 b 中的大者与 c 比较,取最大者*/prin
14、tf(“三个整数的最大数是%dn“,max);return 0; #include #include #define M 1000int main()int i,k; printf(“请输入一个小于%d 的整数 i:“,M);scanf(“%d“,while (iM) printf(“输入的数不符合要求,请重新输入一个小于%d 的整数 i:“,M);scanf(“%d“,k=sqrt(i);printf(“%d 的平方根的整数部分是:%dn“,i,k);return 0;#include #include #define M 1000int main()int i,k; printf(“请输入
15、一个小于%d 的整数 i:“,M);scanf(“%d“,if (iM) printf(“输入的数不符合要求,请重新输入一个小于%d 的整数 i:“,M);scanf(“%d“,k=sqrt(i);printf(“%d 的平方根的整数部分是:%dn“,i,k);return 0;#include int main() int x,y;printf(“输入 x:“);scanf(“%d“,if(x=10 */ y=3*x-11;printf(“x=%d, y=3*x-11=%dn“,x,y);return 0;#include int main()int x,y;printf(“enter x:
16、“);scanf(“%d“,y=-1;if(x!=0)if(x0)y=1;elsey=0; printf(“x=%d,y=%dn“,x,y);return 0;#include int main()int x,y;printf(“please enter x:“);scanf(“%d“,y=0;if(x=0)if(x0) y=1;else y=-1; printf(“x=%d,y=%dn“,x,y);return 0;#include int main() float score;char grade;printf(“请输入学生成绩:“);scanf(“%f“,while (score100|
17、score#include int main()int num,indiv,ten,hundred,thousand,ten_thousand,place; /分别代表个位,十位,百位,千位,万位和位数 printf(“请输入一个整数(0-99999):“);scanf(“%d“,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/
18、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);switch(place)case 5:printf(“%d,%d,%d,%d,%d“,ten_thousand,thous
19、and,hundred,ten,indiv);printf(“n 反序数字为:“);printf(“%d%d%d%d%dn“,indiv,ten,hundred,thousand,ten_thousand);break;case 4:printf(“%d,%d,%d,%d“,thousand,hundred,ten,indiv);printf(“n 反序数字为:“);printf(“%d%d%d%dn“,indiv,ten,hundred,thousand);break;case 3:printf(“%d,%d,%d“,hundred,ten,indiv);printf(“n 反序数字为:“)
20、;printf(“%d%d%dn“,indiv,ten,hundred);break;case 2:printf(“%d,%d“,ten,indiv);printf(“n 反序数字为:“);printf(“%d%dn“,indiv,ten);break;case 1:printf(“%d“,indiv);printf(“n 反序数字为:“);printf(“%dn“,indiv);break;return 0;#include int main()int i;double bonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1;bon2=bon1+100
21、000*0.075;bon4=bon2+100000*0.05;bon6=bon4+100000*0.03;bon10=bon6+400000*0.015;printf(“请输入利润 i:“);scanf(“%d“,if (iint main()int i;double bonus,bon1,bon2,bon4,bon6,bon10;int branch;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;printf(“请输入利润
22、i:“);scanf(“%d“,branch=i/100000;if (branch10) branch=10;switch(branch) case 0:bonus=i*0.1;break;case 1:bonus=bon1+(i-100000)*0.075;break;case 2:case 3: bonus=bon2+(i-200000)*0.05;break;case 4:case 5: bonus=bon4+(i-400000)*0.03;break;case 6:case 7:case 8:case 9: bonus=bon6+(i-600000)*0.015;break;case
23、 10: bonus=bon10+(i-1000000)*0.01;printf(“奖金是 %10.2fn“,bonus);return 0;#include int main()int t,a,b,c,d;printf(“请输入四个数:“);scanf(“%d,%d,%d,%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
24、;printf(“排序结果如下: n“);printf(“%d %d %d %d n“ ,a,b,c,d);return 0;#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“,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
25、);d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);if (d11 /*判断该点是否在塔外*/printf(“该点高度为 %dn“,h);return 0;第五章#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) / 检查当前项
26、 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;#include int main()int
27、p,r,n,m,temp;printf(“请输入两个正整数 n,m:“);scanf(“%d,%d,“,if (nint main()char c;int letters=0,space=0,digit=0,other=0;printf(“请输入一行字符:n“);while(c=getchar()!=n)if (c=a printf(“a,n=:“);scanf(“%d,%d“,while (iint main()double s=0,t=1;int n;for (n=1;nint main()int n1=100,n2=50,n3=10;double k,s1=0,s2=0,s3=0;for
28、 (k=1;kint main()int i,j,k,n;printf(“parcissus numbers are “);for (n=100;nint main()int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;int i,a,n,s;for (a=2;a1) printf(“%d,%d“,k1,k2); /* n1 表示 a 至少有 2 个因子 */if (n2) printf(“,%d“,k3); /* n2 表示至少有 3 个因子,故应再输出一个因子 */ if (n3) printf(“,%d“,k4); /* n3 表示至少有 4 个因子,故应再输出一个因子
29、 */if (n4) printf(“,%d“,k5); /* 以下类似 */if (n5) printf(“,%d“,k6);if (n6) printf(“,%d“,k7);if (n7) printf(“,%d“,k8);if (n8) printf(“,%d“,k9);if (n9) printf(“,%d“,k10);printf(“n“);return 0;#include int main()int m,s,i;for (m=2;m int main()int i,n=20;double a=2,b=1,s=0,t;for (i=1;i int main()double sn=1
30、00,hn=sn/2;int n;for (n=2;n 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; #include #include int main()float a,x0,x1;printf(“enter a positive number:“);scanf(“%f“,x0=a/2;x1=(x0+a/x0)/2;dox0=x1;x1=(x0+a/x0)/2;whi
31、le(fabs(x0-x1)=1e-5);printf(“The square root of %5.2f is %8.5fn“,a,x1);return 0; #include #include int main()double x1,x0,f,f1;x1=1.5;dox0=x1;f=(2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x1=x0-f/f1;while(fabs(x1-x0)=1e-5);printf(“The root of equation is %5.2fn“,x1);return 0; #include #include int main()fl
32、oat x0,x1,x2,fx0,fx1,fx2;doprintf(“enter x1 scanf(“%f,%f“,fx1=x1*(2*x1-4)*x1+3)-6;fx2=x2*(2*x2-4)*x2+3)-6;while(fx1*fx20);dox0=(x1+x2)/2;fx0=x0*(2*x0-4)*x0+3)-6;if (fx0*fx1)=1e-5);printf(“x=%6.2fn“,x0);return 0;#include int main()int i,j,k;for (i=0;i int main()char i,j,k; /*是 a 的对手;j 是 b 的对手;k 是 c 的
33、对手*/for (i=x;i#include int main()int i,j,n,a101;for (i=1;iint main()int i,j,min,temp,a11;printf(“enter data:n“);for (i=1;iaj) min=j;temp=ai;ai=amin;amin=temp;printf(“nThe sorted numbers:n“);for (i=1;iint main()int a33,sum=0;int i,j;printf(“enter data:n“);for (i=0;iint main() int a11=1,4,6,9,13,16,19
34、,28,40,100;int temp1,temp2,number,end,i,j;printf(“array a:n“);for (i=0;iend)a10=number;elsefor (i=0;inumber)temp1=ai;ai=number;for (j=i+1;j#define N 5int main() int aN,i,temp;printf(“enter array a:n“); for (i=0;i#define N 10int main() int i,j,aNN;for (i=0;iint main() int a1515,i,j,k,p,n;p=1;while(p=
35、1)printf(“enter n(n=1-15):“);scanf(“%d“,if (n!=0) j=j-1;elseif (in) j=1;if (aij=0)aij=k;elsei=i+2;j=j-1;aij=k;for (i=1;i#define N 4#define M 5 /* 数组为 4 行 5 列 */int main()int i,j,k,aNM,max,maxj,flag;printf(“please input matrix:n“);for (i=0;imax)max=aij; /* 将本行的最大数存放在 max 中 */maxj=j; /* 将最大数所在的列号存放在 m
36、axj 中 */flag=1; /* 先假设是鞍点,以 flag 为 1 代表 */for (k=0;kakmaxj) /* 将最大数和其同列元素相比 */flag=0; /* 如果 max 不是同列最小,表示不是鞍点令flag1 为 0 */continue;if(flag) /* 如果 flag1 为 1 表示是鞍点 */printf(“a%d%d=%dn“,i,maxj,max); /* 输出鞍点的值和所在行列号 */break;if(!flag) /* 如果 flag 为 0 表示鞍点不存在 */printf(“It is not exist!n“);return 0;#include
37、 #define N 15int main() int i,number,top,bott,mid,loca,aN,flag=1,sign;char c;printf(“enter data:n“);scanf(“%d“,i=1;while(i=ai-1)i+;elseprintf(“enter this data again:n“);printf(“n“);for (i=0;iaN-1) /要查的数不在查找区间内loca=-1; / 表示找不到while (!sign) char text380;upp=low=dig=spa=oth=0;for (i=0;i=Aint i,j,k;char
38、 space= ;for (i=0;iint 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) char ch80;printf(“input cipher code:n“);gets(ch);printf(“ncipher code:%sn“,ch);j=0;while (chj!=0) if (chj=A) int i=0,j=0;printf(“input string1:“);s
39、canf(“%s“,s1);printf(“input string2:“);scanf(“%s“,s2);while (s1i!=0)i+;while(s2j!=0)s1i+=s2j+;s1i=0;printf(“nThe new string is:%sn“,s1);return 0;#include int main() int i,resu;char s1100,s2100;printf(“input string1:“);gets(s1);printf(“ninput string2:“);gets(s2);i=0;while (s1i=s2i) if (s1i=0 elseresu
40、=s1i-s2i;printf(“nresult:%d.n“,resu);return 0;#include #include int main() char s180,s280;int i;printf(“input s2:“);scanf(“%s“,s2);for (i=0;iint main()int hcf(int,int);int lcd(int,int,int); int u,v,h,l;scanf(“%d,%d“,h=hcf(u,v);printf(“H.C.F=%dn“,h);l=lcd(u,v,h);printf(“L.C.D=%dn“,l);return 0;int hcf
41、(int u,int v)int t,r;if (vu)t=u;u=v;v=t;while (r=u%v)!=0)u=v;v=r;return(v);int lcd(int u,int v,int h)return(u*v/h);#include int Hcf,Lcd;int main()void hcf(int,int);void lcd(int,int); int u,v;scanf(“%d,%d“,hcf(u,v);lcd(u,v);printf(“H.C.F=%dn“,Hcf);printf(“L.C.D=%dn“,Lcd);return 0;void hcf(int u,int v)int t,r;if (vu)t=u;u=v;v=t;while (r=u%v)!=0)u=v;v=r;Hcf=v;