C语言程序的设计第三版课后复习题答案.docx
《C语言程序的设计第三版课后复习题答案.docx》由会员分享,可在线阅读,更多相关《C语言程序的设计第三版课后复习题答案.docx(87页珍藏版)》请在冰豆网上搜索。
C语言程序的设计第三版课后复习题答案
C程序设计(第三版)答案-谭浩强
程序是在VC6.0下编译的,所以头文件和TC的不太一样!
4-8
#include
#definepi3.1415
voidmain()
{
floatr,h,rl,ra,ss,sv,cv;
printf("输入圆的半径和圆柱的高\n\n");
scanf("%f%f",&r,&h);
rl=2*pi*r;
ra=pi*r*r;
ss=4*pi*r*r;
sv=4*pi*r*r*r/3;
cv=ra*h;
%f\n\n
printf("圆周长为:
%f\n\n圆面积为:
%f\n\n圆球表面积为:
%f\n\n圆球体积为:
圆柱体积为:
%f\n\n",rl,ra,ss,sv,cv);
}
4-9
#include
voidmain()
{
floatF,c;
printf("输入一个华氏温度\n\n");
scanf("%f",&F);
c=5*(F-32)/9;
printf("摄氏温度为:
%.2f\n\n",c);}
第五章
5-4
#includevoidmain()
{
inta,b,c,max;
printf("输入三个整数a,b,c\n\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b)max=a;
elsemax=b;
if(maxprintf("最大的数为:
%d\n\n",max);
}
5-5
#include
voidmain()
{
floatx,y;
printf("输入x\n\n");
scanf("%f",&x);
if(x<1)y=x;
elseif(x<10)y=2*x-1;
elsey=3*x-11;
printf("y=%f\n\n",y);
}
5-6
#include
voidmain()
{
floatm;
intn;
printf("输入成绩\n\n");
scanf("%f",&m);
n=m/10;
switch(n)
{
case0:
case1:
case2:
case3:
case4:
case5:
printf("E\n\n");break;
case6:
printf("D\n\n");break;
case7:
printf("C\n\n");break;
case8:
printf("B\n\n");break;
case9:
case10:
printf("A\n\n");break;
}
}
5-7
#include
#include
voidmain()
{
inta,b,c,i,j,n;
printf("输入五位正整数\n\n");scanf("%d",&a);
printf("\n\n");
c=a;
for(i=1;;i++)
{b=c%10;c=c/10;printf("%d",b);if(c==0){printf("\n\n");
printf("正整数为%d位数\n\n”,i);break;
}
c=a;
for(j=i-1;j>=0;j--)
{n=pow(10,j);b=c/n;c=c%n;printf("%d\n",b);
}
}
5-8
if语句:
#include
voidmain()
{
intI;
floatbonus;
printf("输入当月利润I\n\n");
scanf("%d",&I);
if(I<=100000)bonus=I/10;
elseif(I<=200000)bonus=10000+(I-100000)*7.5/100;
elseif(I<=400000)bonus=10000+7500+(I-200000)*5/100;
elseif(I<=600000)bonus=10000+7500+10000+(I-400000)*3/100;
elseif(I<=1000000)
bonus=10000+7500+10000+6000+(I-600000)*1.5/100;
elsebonus=10000+7500+10000+6000+6000+(I-1000000)*1/100;printf("应发奖金数为:
%f\n\n",bonus);
}
switch语句:
#include
voidmain()
{
floatbonus;
printf("输入当月利润I\n\n");
scanf("%d",&I);
if(I>1000000)n=10;
elsen=I/100000;
switch(n)
{
case0:
bonus=I/10;break;
case1:
bonus=10000+(I-100000)*7.5/100;break;
case2:
case3:
bonus=10000+7500+(I-200000)*5/100;break;
case4:
case5:
bonus=10000+7500+10000+(I-400000)*3/100;break;
case6:
case7:
case8:
case9:
bonus=10000+7500+10000+6000+(I-600000)*1.5/100;break;
case10:
bonus=10000+7500+10000+6000+6000+(I-1000000)*1/100;break;}
printf("应发奖金数为:
%f\n\n",bonus);
}
5-9
#include
voidmain()
{
inta,b,c,d,temp,min;
printf("输入四个数a,b,c,d\n\n");
scanf("%d%d%d%d",&a,&b,&c,&d);
if(a>b)
{
temp=a;
a=b;
b=temp;
}
if(a>c)
{
temp=a;a=c;
c=temp;
}if(a>d)
{
temp=a;a=d;
d=temp;
}
\n\n");
printf("由小到大排列为:
printf("%d",a);
if(b>c)
{
temp=b;
b=c;
c=temp;
}if(b>d)
{
temp=b;b=d;
d=temp;
}
printf("%d",b);if(c>d)
{
temp=c;
c=d;
d=temp;
}
printf("%d",c);printf("%d",d);
}
#include#include
voidmain()
{
floatx,y,a,b,c,d;
printf("输入点的坐标\n\n");
scanf("%f%f",&x,&y);
a=sqrt((2-x)*(2-x)+(2-y)*(2-y));b=sqrt((2-x)*(2-x)+(-2-y)*(-2-y));c=sqrt((-2-x)*(-2-x)+(-2-y)*(-2-y));
d=sqrt((-2-x)*(-2-x)+(2-y)*(2-y));
10m");
if(a<=1||b<=1||c<=1||d<=1)printf("该点建筑高度为:
elseprintf("该点建筑高度为:
0m");
}
6-1
#include
#include
voidmain()
{
intm,n,max,min,i,k;
printf("输入两个正整数\n\n");
scanf("%d%d",&m,&n);
if(m>n)k=n;
elsek=m;
for(i=1;i<=k;i++)
{if((m%i==0)&&(n%i==0))max=i;
}
printf("最大公约数为:
%d\n\n",max);
if(m>n)k=m;
elsek=n;
for(i=k;;i++)
{
if((i%m==0)&&(i%n==0))
{
min=i;
break;
}
}
printf("最小公倍数为:
%d\n\n",min);
}
6-2
#includevoidmain()
{
charc;
intl=0,b=0,n=0,e=0;
printf("输入一行字符\n\n");
while((c=getchar())!
='\n')
{if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))l+=1;
elseif(c=='')b+=1;
elseif(c>=48&&c<=57)n+=1;
elsee+=1;
}
printf("英文字母个数为:
%d\n\n空格个数为:
%d\n\n数字个数为:
%d\n\n其他字符个数为:
%d\n\n",l,b,n,e);
}
6-3
intn,k,i;
floata,s=0;
printf("输入n和a\n\n");
scanf("%d%f",&n,&a);
for(i=0;i{
k=pow(10,i);s=s+(n-i)*a*k;
}
printf("和s=%f\n\n",s);
}
6-4
#include
voidmain()
{
intn,s,S=0,i,j;
printf("输入n\n\n");
scanf("%d",&n);
for(i=1;j<=n;i++)
{
s=1;
for(j=1;j<=i;j++)
{
s=s*j;
}
S+=s;
}
printf("和S=%d\n\n",S);
}
6-5#includevoidmain()
{
inti,m,n,t;
ints1=0,s2=0;
floats3=0,s,l;
printf("输入m,n,t的值\n\n");
scanf("%d%d%d",&m,&n,&t);
for(i=1;i<=m;i++)
{
s1+=i;
}
for(i=1;i<=n;i++)
{
s2+=i*i;
}
for(i=1;i<=t;i++)
{
l=1.0/i;
s3+=l;
}
s=s1+s2+s3;
printf("和s=%f",s);
}
6-6
#include
voidmain()
{
intm,n,k,i,j;
printf("水仙花数为:
\n");
for(i=100;i<=999;i++)
{
j=i;
m=j%10;
j=j/10;
n=j%10;k=j/10;
if(i==m*m*m+n*n*n+k*k*k)printf("%d",i);
}
}
6-7#include
#include
voidmain()
{
inti,j,k,s;
for(i=1;i<=1000;i++)
{s=0;
for(j=1;j
{
if(i%j==0)s+=j;
}if(s==i)
{
printf("\n\n");printf("%ditsfactorsare",i);for(j=1;j
if(i%j==0)printf("%d",j);
}
}
}
}
6-8
#include
voidmain()
{floatf1,f2,s,temp;printf("输入n\n\n");scanf("%d",&n);f1=2.0;f2=3.0;s=f1;
for(i=1;i<=n-1;i++)
{
s+=f2/f1;
temp=f2;
f2=f1+f2;
f1=temp;
}
printf(”前%4项和为%f",n,s);
}
6-9
#include
#include
voidmain()
{
inti,n,l=100;
floatm,s=0;
printf("输入n\n\n");scanf("%d",&n);
m=l;
for(i=1;i<=n;i++)
{
s+=2*m;m=m*0.5;
}
printf("第%d次落地时经过%f米\n\n",n,s-l);printf("第%4次落地后反弹%f米\n\n",n,m);
}
#includevoidmain()
{
intm=1,n,i;
printf("输入n\n\n");
scanf("%d",&n);
for(i=1;i{
m=(m+1)*2;
}
printf(”一共摘了%d个桃子\n\n”,m);
}
6-11
#include
#include
voidmain()
{
floata,x1,x2;
printf("输入a\n\n");scanf("%f",&a);
x1=a/2;loop:
x2=(x1+a/x1)/2;
if(fabs(x1-x2)>1e-5){x1=x2;gotoloop;
}
elseprintf("\n\na的平方根为%f\n\n",x2);}
#include#include
voidmain()
{
floatf(float);
floatxpoint(float,float);
floatroot(float,float);
floatx,x1,x2,f1,f2;
do
{
printf("输入x1,x2\n\n");scanf("%f%f",&x1,&x2);
f1=f(x1);
f2=f(x2);
}while(f1*f2>0);
x=root(x1,x2);
%f\n\n",x);
printf("方程在1.5附近的根为:
}
floatf(floatx)
{
floaty;
y=2*x*x*x-4*x*x+3*x-6;
return(y);
}
floatxpoint(floatx1,floatx2)
{
floaty;y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return(y);
}
floatroot(floatx1,floatx2)
{
floatx,y,y1;
y1=f(x1);
do
x=xpoint(x1,x2);
y=f(x);
if(y*y1>0)
{
y1=y;
x1=x;
}
else
x2=x;
}while(fabs(y)>1e-4);
return(x);
}
6-13
#include
#include
voidmain()
{
floatf(float);
floatroot(float,float);
floatx,x1,x2,f1,f2;
do
{
printf("输入x1,x2\n\n");scanf("%f%f",&x1,&x2);f1=f(x1);
f2=f(x2);
}while(f1*f2>0);
x=root(x1,x2);
printf("方程的根为:
%f\n\n",x);
}
floatf(floatx)
{
floaty;
y=2*x*x*x-4*x*x+3*x-6;
return(y);
floatroot(floatx1,floatx2)
{
floatx,y;
do
{y=f((x1+x2)/2);if(y<-1e-4){x1=(x1+x2)/2;
}
elseif(y>1e-4)
{x2=(x1+x2)/2;
}
elsex=(x1+x2)/2;
}while(fabs(y)>1e-4);
return(x);
}
6-14
#include
voidmain()
{
inti,j,k;
for(i=0;i<=3;i++)
printf("");
{for(j=0;j<=2-i;j++){
}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");
}
}
6-15
#include
voidmain()
{
chari,j,k;
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("\nA--%c\nB--%c\nC--%c\n",i,j,k);
}
第七章
7-1
#include
#include
voidmain()
{
inti,j;
inta[101];
printf("素数为:
\n\n");for(i=1;i<=100;i++)
{
a[i]=i;
}for(i=3;i<=100;i++)
{for(j=2;j<=sqrt(a[i]);j++)
{
if(a[i]%j==0)
{
a[i]=0;
break;
}
}
}
for(i=2;i<=100;i++)
{
if(a[i]!
=0)printf("%d",a[i]);
}
7-2#include
voidmain()
{
inta[10],i,j,temp;
printf("输入10个整数\n\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
printf("排序后的输出为:
\n\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
printf("\n\n");
}
7-3
#includevoidmain()
{
inta[9],i,s=0;
printf("输入一个3*3整型矩阵\n\n");for(i=0;i<9;i++)
{scanf("%d",&a[i]);
}
for(i=0;i<9;i+=4)
{s+=a[i];
}
printf("对角线元素之和为:
%d\n\n",s);
}
7-4
#include
voidmain()
{
inta[11]={1,2,3,4,5,6,7,8,9,10};
inti,j,n,temp1,temp2;
printf("输入一个数n\n\n");scanf("%d",&n);
if((a[0]-a[9])>0)
{
if(n<=a[9])
{
a[10]=n;
}
else
{
for(i=0;i<10;i++)
if(a[i]{
temp1=a[i];a[i]=n;
for(j=i+1;j<11;j++){
temp2=a[j];
a[j]=temp1;temp1=temp2;
}break;
}
}
}
}
if((a[9]-a[0])>0)
{
if(n>=a[9])
{
a[10]=n;
}
else
{
for(i=0;i<10;i++)
{
if(a[i]>n)
{
temp1=a[i];a[i]=n;
for(j=i+1;j<11;j++){
temp2=a[j];
a[j]=temp1;temp1=temp2;
}break;
}
}for(i=0;i<11;i++)
{
printf("%d",a[i]);
}
}
7-5
#include
#defineN5
voidmain()
{
inta[N];
inti,temp;
printf("输入5个个数\n\n");
for(i=0;i{
scanf("%d",&a[i]);
}
for(i=0;i<=N/2;i++)
{
temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
for(i=0;i{
printf("%d",a[i]);
}
printf("\n\n");
7-6#include
#include
voidmain()
{
inta[10][10]={1};
inti,j;
for(i=1;i<10;i++)
{
for(j=0;j<=i;j++)
{
a[i][0]=a[i-1][0];
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%4d",a[i][j]);
}
printf("\n\n");
}
}
7-7#include
#defineN7voidmain()
{
inta[N][N]={0};
inti,j,k;
i=0;
j=(N-1)/2;
a[i][j]=1;
for(k=2;k<=N*N;k++){
i=i-1;
j=j+1;
if((i<0)&&(j>N-1))
{
i=i+2;
j=j-1;
}
else
{
if(i<0)i=N-1;
if(j>N