1、
C 语言课后习题答案-第四版- 谭浩强(1-7)
第一章
#include
2、e input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a;
if (max #include
3、rintf("p=%f\n",p); return 0;
}
#include
4、期后将本息再存 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=%f\n",p1); // 输出按第 1 方案得到的本息和 printf("p2=%f\n",p2); // 输出按第 2 方案得到的本息和 printf("p3=%f\n",p3); // 输出按第 3 方案得到的本息和
5、
printf("p4=%f\n",p4);
// 输出按第 4
方案得到的本息和
printf("p5=%f\n",p5);
// 输出按第 5
方案得到的本息和
return 0;
}
#include
6、 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=%f\n",p1); // 输出按第 1 方案得到的本息和 printf("p2
7、f\n",p2);
// 输出按第 2
方案得到的本息和
printf("p3=%f\n",p3);
// 输出按第 3
方案得到的本息和
printf("p4=%f\n",p4);
// 输出按第 4
方案得到的本息和
printf("p5=%f\n",p5);
// 输出按第 5
方案得到的本息和
return 0;
}
#include
8、 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); // 存活期存
9、款。活期利息每一季度结算一次 printf("p1=%10.2f\n",p1); // 输出按第 1 方案得到的本息和 printf("p2=%10.2f\n",p2); // 输出按第 2 方案得到的本息和 printf("p3=%10.2f\n",p3); // 输出按第 3 方案得到的本息和 printf("p4=%10.2f\n",p4); // 输出按第 4 方案得到的本息和 printf("p5=%10.2f\n",p5); // 输出按第 5 方案得到的本息和 return 0; } #include
10、
11、
#include
12、'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%c\n",c1,c2,c3,c4,c5);
return 0;
}
#include
13、h 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.2
14、f\n",vz);
return 0;
}
#include
15、 0;
}
#include
16、char c1,c2; //定义字符型变量
int i1,i2; //定义整型变量
printf("请输入两个字符 c1,c2:");
scanf("%c,%c",&c1,&c2);
i1=c1; //赋值给整型变量
i2=c2;
printf("按字符输出结果:\n");
printf("%c,%c\n",i1,i2);
printf("按整数输出结果:\n");
printf("%d,%d\n",c1,c2);
return 0;
}#include
17、c1,c2; //定义为字符型 int i1,i2; //定义为整型 printf("请输入两个整数 i1,i2:"); scanf("%d,%d",&i1,&i2); c1=i1; //将整数赋值给字符变量 c2=i2; printf("按字符输出结果:\n"); printf("%c,%c\n",c1,c2); printf("按整数输出结果:\n"); printf("%d,%d\n",c1,c2); return 0; } 第四章 #include
18、
19、)
{ int a,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); return 0;
} #include
20、
{
int i,k;
printf("请输入一个小于%d 的整数 i:",M); scanf("%d",&i);
while (i>M)
{printf("输入的数不符合要求,请重新输入一个小于%d 的整数 i:",M); scanf("%d",&i);
}
k=sqrt(i);
printf("%d 的平方根的整数部分是:%d\n",i,k);
return 0;
}
#include
21、
{
int i,k;
printf("请输入一个小于%d 的整数 i:",M);
scanf("%d",&i);
if (i>M)
{printf("输入的数不符合要求,请重新输入一个小于%d 的整数 i:",M);
scanf("%d",&i);
}
k=sqrt(i);
printf("%d 的平方根的整数部分是:%d\n",i,k); return 0;
}
#include
22、x:");
scanf("%d",&x);
if(x<1) /* x<1 */
{ y=x;
printf("x=%3d, y=x=%d\n" ,x,y);
}
else if(x<10) /* 1=
23、 int main()
{
int x,y;
printf("enter x:"); scanf("%d",&x); y=-1;
if(x!=0)
if(x>0)
y=1;
else
y=0;
printf("x=%d,y=%d\n",x,y);
return 0;
}
#include
24、 y=1;
else y=-1; printf("x=%d,y=%d\n",x,y);
return 0;
}
#include
25、
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,相应的等级是%c\n ",score,grade); return 0;
}
#include
26、 { int num,indiv,ten,hundred,thousand,ten_thousand,place; //分别代表个位,十位,百位,千 位,万位和位数 printf("请输入一个整数(0-99999):"); scanf("%d",&num); if (num>9999) place=5; else if (num>999) place=4; else if (num>99) place=3; else if (num>9) place=2; else place=1; printf("位数
27、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*100-ten*10); s
28、witch(place) {case 5:printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv); printf("\n 反序数字为:"); printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand); break; case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv); printf("\n 反序数字为:"); printf("%d%d%d%d\n",indiv,ten
29、hundred,thousand); break; case 3:printf("%d,%d,%d",hundred,ten,indiv); printf("\n 反序数字为:"); printf("%d%d%d\n",indiv,ten,hundred); break; case 2:printf("%d,%d",ten,indiv); printf("\n 反序数字为:"); printf("%d%d\n",indiv,ten); break; case 1:printf("%d",indiv); printf("\n 反序数字为:"); printf("%d\n",i
30、ndiv); break;
}
return 0; }#include
31、onus=i*0.1; else if (i<=200000) bonus=bon1+(i-100000)*0.075; else if (i<=400000) bonus=bon2+(i-200000)*0.05; else if (i<=600000) bonus=bon4+(i-400000)*0.03; else if (i<=1000000) bonus=bon6+(i-600000)*0.015; else bonus=bon10+(i-1000000)*0.01; printf("奖金是: %10.2f\n",bonus); re
32、turn 0;
}
#include
33、 if (branch>10) 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)*
34、0.015;break; case 10: bonus=bon10+(i-1000000)*0.01;
}
printf("奖金是 %10.2f\n",bonus);
return 0;
}
#include
35、
{ 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);
return 0;
}
#include
36、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; /*判断该点是否在塔外*/ print
37、f("该点高度为 %d\n",h);
return 0;
}
第五章
#include
38、 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; // 求出下一项的值 term count++; // count 累加 1 } pi=pi*4; // 多项式的和 pi 乘以 4,才是π的近似值
39、
printf("pi=%10.8f\n",pi); // 输出π的近似值
printf("count=%d\n",count); // 输出循环次数
return 0;
}
#include 40、
r=n%m;
n=m;
m=r;
}
printf("它们的最大公约数为:%d\n",n); printf("它们的最小公约数为:%d\n",p/n); return 0;
}
#include 41、
letters++;
else if (c==' ') space++;
else if (c>='0' && c<='9') digit++;
else
other++;
}
printf("字母数:%d\n 空格数:%d\n 数字数:%d\n 其它字符数:%d\n",letters,space,digit,other); return 0;
} #include 42、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); return 0;
}#include 43、2!+...+20!=%22.15e\n",s); return 0;
} #include 44、3=s3+1/k;}
printf("sum=%15.6f\n",s1+s2+s3); return 0;
}#include 45、
}#define M 1000 /*定义寻找范围*/ #include 46、 /* 如果 i 是 a 的因子 */
{n++; /* n 加 1,表示新找到一个因子 */
s=s-i; /* s 减去已找到的因子,s 的新值是尚未求出的因子之和 */
switch(n) /* 将找到的因子赋给 k1...k9,或 k10 */
{case 1:
k1=i; break; /* 找出的笫 1 个因子赋给 k1 */
case 2:
k2=i; break; /* 找出的笫 2 个因子赋给 k2 */
case 3:
k3=i; break; /* 找出的笫 3 个因子赋给 k3 */
case 4:
47、
k4=i; break; /* 找出的笫 4 个因子赋给 k4 */
case 5:
k5=i; break; /* 找出的笫 5 个因子赋给 k5 */
case 6:
k6=i; break; /* 找出的笫 6 个因子赋给 k6 */
case 7:
k7=i; break; /* 找出的笫 7 个因子赋给 k7 */
case 8:
k8=i; break; /* 找出的笫 8 个因子赋给 k8 */
case 9:
k9=i; break; /*找出的笫 9 个因子赋给 k9 */
case 10: 48、
k10=i; break; /* 找出的笫 10 个因子赋给 k10 */
}
}
if (s==0)
{
printf("%d ,Its factors are ",a);
if (n>1) printf("%d,%d",k1,k2); /* n>1 表示 a 至少有 2 个因子 */
if (n>2) printf(",%d",k3); /* n>2 表示至少有 3 个因子,故应再输出一个
因子 */
if (n>3) printf(",%d",k4); /* n>3 表示至少有 4 个因子,故应再输出一个
因子 */
49、
if (n>4) printf(",%d",k5); /* 以下类似 */
if (n>5) printf(",%d",k6);
if (n>6) printf(",%d",k7);
if (n>7) printf(",%d",k8);
if (n>8) printf(",%d",k9);
if (n>9) printf(",%d",k10);
printf("\n");
}
}
return 0; }#include 50、m++)
{s=0;
for (i=1;i






