C语言程序设计第三版谭浩强课后习题答案完整版同名3156.docx
《C语言程序设计第三版谭浩强课后习题答案完整版同名3156.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第三版谭浩强课后习题答案完整版同名3156.docx(21页珍藏版)》请在冰豆网上搜索。
C语言程序设计第三版谭浩强课后习题答案完整版同名3156
1.5
#include
voidmain()
{
printf("*********************************\n");
printf("Verygood!
\n");
}
1.6
floatmax(floatx,floaty,floatz);
floata,b,c;
printf("请分别输入a,b,c:
scanf("%f,%f,%f",&a,&b,&c);
printf("max=%f",max(a,b,c));
floatmax(floatx,floaty,floatz)
floatm,n;
m=x>y?
x:
y;
n=m>z?
m:
z;
return(n);
3.6
charc1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;
printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c%c\n”,c4,c5);
3.9.1
doublex=2.5,y=4.7,z;
inta=7;
z=x+a%3*(int)(x+y)%2/4;
printf("该表达式的值为:
%f",z);
3.9.2
inta=2,b=3;
floatx=3.5,y=2.5,z;
z=(float)(a+b)/2+(int)x%(int)y;
4.5
inta=5,b=7;
doublex=67.8564,y=-789.124;
charc='A';
longn=1234567;
unsignedu=65535;
printf("%d%d\n",a,b);
printf("%3d%3d\n",a,b);
printf("%f,%f\n",x,y);
printf("%-10f,%-10f\n",x,y);
printf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);
printf("%e,%10.2e\n",x,y);
printf("%c,%d,%o,%x\n",n,n,n);
printf("%ld,%lo,%x\n",n,n,n);
printf("%u,%o,%x,%d\n",u,u,u,u);
printf("请输入r,h的值:
scanf("%f,%f",&r,&h);
l=2*pi*r;
s1=pi*r*r;
s2=4*s1;
v1=4/3*pi*r*r*r;
v2=s1*h;
printf("圆周长为:
%.2f\n",l);
printf("圆面积为:
%.2f\n",s1);
printf("圆球表面积为:
%.2f\n",s2);
printf("圆球体积为:
%.2f\n",v1);
printf("圆柱体积为:
%.2f\n",v2);
5.5#include
floatx,y;
printf("请输入x的值:
scanf("%f",&x);
if(x<1)
y=x;
else
if(x>=1&&x<10)
y=2*x-1;
y=3*x-11;
printf("x与y的值分别为:
\n%f,%f",x,y);
printf("\n");
5.6#include
floatb;
inta;
printf("请输入该同学的成绩:
scanf("%f",&b);
while(b<0||b>100)
printf("输入有误,请重新输入:
a=int(b/10);
if(a<6)a=5;
switch(a)
case10:
case9:
printf("该同学为等级:
A");break;
case8:
B");break;
case7:
C");break;
case6:
D");break;
case5:
E");break;
intx,y,m,n,i=1,j=0;
printf("请给出一个不多于5位的正整数:
scanf("%d",&x);
while(x<=0||x>=100000)
{printf("输入有误\n请给出一个不多于5位的正整数:
for(n=0;n<5;n++)
y=int(x/pow(10,n));
if(y>0&&y<10)
m=n+1;
printf("它是%d位数\n",m);
printf("从高到低位依次为\n");
do
printf("%d",int(x/pow(10,m-i))%10);
i++;
while(m-i>=0);
printf("\n逆序输出为\n");
printf("%d",int(x/pow(10,j))%10);
j++;
while(j-m<0);
6.1输入两个正整数m和n,求其最大公约数和最小公倍数。
intm,n,i,j;
printf("请分别输入m,n的值:
scanf("%d,%d",&m,&n);
for(i=1;i<=m;i++)
if(m%i==0&&n%i==0)
j=i;
printf("这两个整数的最大公约数是:
%d",j);
for(i=j;;i++)
if(i%m==0&&i%n==0)break;
printf("这两个整数的最小公倍数数是:
%d",i);
6.2题目:
输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
inti=0,j=0,k=0,x=0;
charc;
printf("请输入一行字符串:
while((c=getchar())!
='\n')
if(c>='A'&&c<='Z'||c>='a'&&c<='z')i++;
elseif(c=='')j++;
elseif(c>='0'&&c<='9')k++;
elsex++;
printf("英文字母、空格、数字、其他字符的个数分别为:
%d,%d,%d,%d,",i,j,k,x);
6.3求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。
例如:
2+22+222+2222+22222(此时n=5),n由键盘输入。
inti,n;
intsum=0,s=0;
printf("请输入n的值:
scanf("%d",&n);
while(n<1)
printf("请重新输入n的值:
for(i=0;i{s+=pow(10,i);sum+=2*s;}printf("sum=%d\n",sum);}6.8题目:有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求出这个数列的前20项之和。#includevoidmain(){inta=1,b=1,i;floatsum=0.0;for(i=0;i<20;i++){a=a+b;b=a-b;sum+=(float)a/b;}printf("这个数列前二十项之和为:\n%f",sum);printf("\n");}7.2#includevoidmain(){inti,j,t,a[10];printf("请输入十个整数:\n");for(i=0;i<10;i++){scanf("%d",&a[i]);}for(j=1;j<10;j++)for(i=0;i<10-j;i++)if(a[i]{t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("这十位数从大到小排列为:\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}7.3#includevoidmain(){inti,j,m,n,a[3][3];printf("请输入3*3的整形矩阵\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);m=a[0][0]+a[1][1]+a[2][2];n=a[0][2]+a[1][1]+a[2][0];printf("3*3的整形矩阵对角线元素之和为:\n");printf("%d,%d",m,n);}7.4#includevoidmain(){staticinta[10]={1,5,6,10,20,24,55,58,64};inti,t;printf("请输入一个数:\n");scanf("%d",&a[9]);for(i=9;i>0;i--)if(a[i]{t=a[i-1];a[i-1]=a[i];a[i]=t;}for(i=0;i<10;i++)printf("%4d",a[i]);printf("\n");}7.8#includevoidmain(){inta[5][5],b[5],c[5],d[5][5];inti,j,k,l;printf("请输入5*5的整型数组\n");for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&d[i][j]);for(i=0;i<5;i++)for(j=0;j<5;j++)a[i][j]=d[i][j];for(i=0,k=0;i<5;i++,k++)for(j=0;j<4;j++){if(a[i][j]>=a[i][j+1])b[k]=a[i][j+1]=a[i][j];elseb[k]=a[i][j+1];}for(j=0,l=0;j<5;j++,l++)for(i=0;i<4;i++){if(a[i][j]<=a[i+1][j])c[l]=a[i+1][j]=a[i][j];elsec[l]=a[i+1][j];}for(i=0,k=0;i<5;i++,k++)for(j=0,l=0;j<5;j++,l++)if(d[i][j]-b[k]==0){if(d[i][j]-c[l]==0)printf("鞍点为d[%d][%d]=%d\n",i,j,d[i][j]);elseprintf("没有鞍点\n");}}7.10#include#includevoidmain(){inti,j=0,k=0,l=0,m=0,n=0;charstr0[301],str1[100],str2[100],str3[100];gets(str1);gets(str2);gets(str3);strcat(str0,str1);strcat(str0,str2);strcat(str0,str3);for(i=0;str0[i]!='\0';i++){if(str0[i]>='A'&&str0[i]<='Z')j++;elseif(str0[i]>='a'&&str0[i]<='z')k++;elseif(str0[i]>='0'&&str0[i]<='9')l++;elseif(str0[i]=='')m++;elsen++;}printf("大写字母、小写字母、数字、空格以及其他字符的个数依次为:\n");printf("%5d%7d%5d%6d%4d\n",j,k,l,m,n);printf("\n");}7.14#include#includevoidmain(){inti=0,resu;chars1[100],s2[100];printf("\n请输入string1:");gets(s1);printf("\n请输入string2:");gets(s2);while(s1[i]==s2[i]&&s1[i]!='\0')i++;if(s1[i]=='\0'&&s2[i]=='\0')resu=0;elseresu=s1[i]-s2[i];printf("\nresult:%d\n",resu);}8.1#includevoidmain(){intmaxgy(intm,intn);intmingb(into,intp);inta,b;printf("请输入两个正整数:a,b\n");scanf("%d,%d",&a,&b);while(a<=0||b<=0){printf("注:请输入两个正整数:a,b\n");scanf("%d,%d",&a,&b);}printf("这两个数的最大公约数是:%d",maxgy(a,b));printf("这两个数的最小公倍数是:%d",mingb(a,b));printf("\n");}intmaxgy(intm,intn){inti,k;for(i=1;i<=m;i++)if(m%i==0&&n%i==0)k=i;returnk;}intmingb(into,intp){intj;for(j=o;;j++)if(j%o==0&&j%p==0)break;returnj;}8.3#includevoidmain(){intjudss(intm);inta;printf("请输入一个正整数:");scanf("%d",&a);while(a<=0){printf("注:请输入一个正整数:");scanf("%d",&a);}judss(a);printf("\n");}intjudss(intm){inti;for(i=2;iif(m%i==0)break;if(ireturnprintf("这个数不是素数");elsereturnprintf("这个数是素数");}8.5#include#includevoidmain(){charfx(charstr1[100]);charstr0[100];printf("请输入一个字符串:\n");gets(str0);fx(str0);puts(str0);}charfx(charstr1[100]){inti,j,k=strlen(str1);charstr2[100];strcpy(str2,str1);for(i=0,j=k-1;j>-1;i++,j--)str1[i]=str2[j];returnstr1[100];}
s+=pow(10,i);
sum+=2*s;
printf("sum=%d\n",sum);
6.8题目:
有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求出这个数列的前20项之和。
inta=1,b=1,i;
floatsum=0.0;
for(i=0;i<20;i++)
a=a+b;
b=a-b;
sum+=(float)a/b;
printf("这个数列前二十项之和为:
\n%f",sum);
7.2
{inti,j,t,a[10];
printf("请输入十个整数:
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)
for(i=0;i<10-j;i++)
if(a[i]{t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("这十位数从大到小排列为:\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}7.3#includevoidmain(){inti,j,m,n,a[3][3];printf("请输入3*3的整形矩阵\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);m=a[0][0]+a[1][1]+a[2][2];n=a[0][2]+a[1][1]+a[2][0];printf("3*3的整形矩阵对角线元素之和为:\n");printf("%d,%d",m,n);}7.4#includevoidmain(){staticinta[10]={1,5,6,10,20,24,55,58,64};inti,t;printf("请输入一个数:\n");scanf("%d",&a[9]);for(i=9;i>0;i--)if(a[i]{t=a[i-1];a[i-1]=a[i];a[i]=t;}for(i=0;i<10;i++)printf("%4d",a[i]);printf("\n");}7.8#includevoidmain(){inta[5][5],b[5],c[5],d[5][5];inti,j,k,l;printf("请输入5*5的整型数组\n");for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&d[i][j]);for(i=0;i<5;i++)for(j=0;j<5;j++)a[i][j]=d[i][j];for(i=0,k=0;i<5;i++,k++)for(j=0;j<4;j++){if(a[i][j]>=a[i][j+1])b[k]=a[i][j+1]=a[i][j];elseb[k]=a[i][j+1];}for(j=0,l=0;j<5;j++,l++)for(i=0;i<4;i++){if(a[i][j]<=a[i+1][j])c[l]=a[i+1][j]=a[i][j];elsec[l]=a[i+1][j];}for(i=0,k=0;i<5;i++,k++)for(j=0,l=0;j<5;j++,l++)if(d[i][j]-b[k]==0){if(d[i][j]-c[l]==0)printf("鞍点为d[%d][%d]=%d\n",i,j,d[i][j]);elseprintf("没有鞍点\n");}}7.10#include#includevoidmain(){inti,j=0,k=0,l=0,m=0,n=0;charstr0[301],str1[100],str2[100],str3[100];gets(str1);gets(str2);gets(str3);strcat(str0,str1);strcat(str0,str2);strcat(str0,str3);for(i=0;str0[i]!='\0';i++){if(str0[i]>='A'&&str0[i]<='Z')j++;elseif(str0[i]>='a'&&str0[i]<='z')k++;elseif(str0[i]>='0'&&str0[i]<='9')l++;elseif(str0[i]=='')m++;elsen++;}printf("大写字母、小写字母、数字、空格以及其他字符的个数依次为:\n");printf("%5d%7d%5d%6d%4d\n",j,k,l,m,n);printf("\n");}7.14#include#includevoidmain(){inti=0,resu;chars1[100],s2[100];printf("\n请输入string1:");gets(s1);printf("\n请输入string2:");gets(s2);while(s1[i]==s2[i]&&s1[i]!='\0')i++;if(s1[i]=='\0'&&s2[i]=='\0')resu=0;elseresu=s1[i]-s2[i];printf("\nresult:%d\n",resu);}8.1#includevoidmain(){intmaxgy(intm,intn);intmingb(into,intp);inta,b;printf("请输入两个正整数:a,b\n");scanf("%d,%d",&a,&b);while(a<=0||b<=0){printf("注:请输入两个正整数:a,b\n");scanf("%d,%d",&a,&b);}printf("这两个数的最大公约数是:%d",maxgy(a,b));printf("这两个数的最小公倍数是:%d",mingb(a,b));printf("\n");}intmaxgy(intm,intn){inti,k;for(i=1;i<=m;i++)if(m%i==0&&n%i==0)k=i;returnk;}intmingb(into,intp){intj;for(j=o;;j++)if(j%o==0&&j%p==0)break;returnj;}8.3#includevoidmain(){intjudss(intm);inta;printf("请输入一个正整数:");scanf("%d",&a);while(a<=0){printf("注:请输入一个正整数:");scanf("%d",&a);}judss(a);printf("\n");}intjudss(intm){inti;for(i=2;iif(m%i==0)break;if(ireturnprintf("这个数不是素数");elsereturnprintf("这个数是素数");}8.5#include#includevoidmain(){charfx(charstr1[100]);charstr0[100];printf("请输入一个字符串:\n");gets(str0);fx(str0);puts(str0);}charfx(charstr1[100]){inti,j,k=strlen(str1);charstr2[100];strcpy(str2,str1);for(i=0,j=k-1;j>-1;i++,j--)str1[i]=str2[j];returnstr1[100];}
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
printf("这十位数从大到小排列为:
printf("%5d",a[i]);
7.3
inti,j,m,n,a[3][3];
printf("请输入3*3的整形矩阵\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
m=a[0][0]+a[1][1]+a[2][2];
n=a[0][2]+a[1][1]+a[2][0];
printf("3*3的整形矩阵对角线元素之和为:
printf("%d,%d",m,n);
7.4
staticinta[10]={1,5,6,10,20,24,55,58,64};
inti,t;
printf("请输入一个数:
scanf("%d",&a[9]);
for(i=9;i>0;i--)
if(a[i]{t=a[i-1];a[i-1]=a[i];a[i]=t;}for(i=0;i<10;i++)printf("%4d",a[i]);printf("\n");}7.8#includevoidmain(){inta[5][5],b[5],c[5],d[5][5];inti,j,k,l;printf("请输入5*5的整型数组\n");for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&d[i][j]);for(i=0;i<5;i++)for(j=0;j<5;j++)a[i][j]=d[i][j];for(i=0,k=0;i<5;i++,k++)for(j=0;j<4;j++){if(a[i][j]>=a[i][j+1])b[k]=a[i][j+1]=a[i][j];elseb[k]=a[i][j+1];}for(j=0,l=0;j<5;j++,l++)for(i=0;i<4;i++){if(a[i][j]<=a[i+1][j])c[l]=a[i+1][j]=a[i][j];elsec[l]=a[i+1][j];}for(i=0,k=0;i<5;i++,k++)for(j=0,l=0;j<5;j++,l++)if(d[i][j]-b[k]==0){if(d[i][j]-c[l]==0)printf("鞍点为d[%d][%d]=%d\n",i,j,d[i][j]);elseprintf("没有鞍点\n");}}7.10#include#includevoidmain(){inti,j=0,k=0,l=0,m=0,n=0;charstr0[301],str1[100],str2[100],str3[100];gets(str1);gets(str2);gets(str3);strcat(str0,str1);strcat(str0,str2);strcat(str0,str3);for(i=0;str0[i]!='\0';i++){if(str0[i]>='A'&&str0[i]<='Z')j++;elseif(str0[i]>='a'&&str0[i]<='z')k++;elseif(str0[i]>='0'&&str0[i]<='9')l++;elseif(str0[i]=='')m++;elsen++;}printf("大写字母、小写字母、数字、空格以及其他字符的个数依次为:\n");printf("%5d%7d%5d%6d%4d\n",j,k,l,m,n);printf("\n");}7.14#include#includevoidmain(){inti=0,resu;chars1[100],s2[100];printf("\n请输入string1:");gets(s1);printf("\n请输入string2:");gets(s2);while(s1[i]==s2[i]&&s1[i]!='\0')i++;if(s1[i]=='\0'&&s2[i]=='\0')resu=0;elseresu=s1[i]-s2[i];printf("\nresult:%d\n",resu);}8.1#includevoidmain(){intmaxgy(intm,intn);intmingb(into,intp);inta,b;printf("请输入两个正整数:a,b\n");scanf("%d,%d",&a,&b);while(a<=0||b<=0){printf("注:请输入两个正整数:a,b\n");scanf("%d,%d",&a,&b);}printf("这两个数的最大公约数是:%d",maxgy(a,b));printf("这两个数的最小公倍数是:%d",mingb(a,b));printf("\n");}intmaxgy(intm,intn){inti,k;for(i=1;i<=m;i++)if(m%i==0&&n%i==0)k=i;returnk;}intmingb(into,intp){intj;for(j=o;;j++)if(j%o==0&&j%p==0)break;returnj;}8.3#includevoidmain(){intjudss(intm);inta;printf("请输入一个正整数:");scanf("%d",&a);while(a<=0){printf("注:请输入一个正整数:");scanf("%d",&a);}judss(a);printf("\n");}intjudss(intm){inti;for(i=2;iif(m%i==0)break;if(ireturnprintf("这个数不是素数");elsereturnprintf("这个数是素数");}8.5#include#includevoidmain(){charfx(charstr1[100]);charstr0[100];printf("请输入一个字符串:\n");gets(str0);fx(str0);puts(str0);}charfx(charstr1[100]){inti,j,k=strlen(str1);charstr2[100];strcpy(str2,str1);for(i=0,j=k-1;j>-1;i++,j--)str1[i]=str2[j];returnstr1[100];}
t=a[i-1];
a[i-1]=a[i];
a[i]=t;
printf("%4d",a[i]);
7.8
inta[5][5],b[5],c[5],d[5][5];
inti,j,k,l;
printf("请输入5*5的整型数组\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&d[i][j]);
a[i][j]=d[i][j];
for(i=0,k=0;i<5;i++,k++)
for(j=0;j<4;j++)
if(a[i][j]>=a[i][j+1])
b[k]=a[i][j+1]=a[i][j];
b[k]=a[i][j+1];
for(j=0,l=0;j<5;j++,l++)
for(i=0;i<4;i++)
if(a[i][j]<=a[i+1][j])
c[l]=a[i+1][j]=a[i][j];
c[l]=a[i+1][j];
if(d[i][j]-b[k]==0)
if(d[i][j]-c[l]==0)
printf("鞍点为d[%d][%d]=%d\n",i,j,d[i][j]);
printf("没有鞍点\n");
7.10
inti,j=0,k=0,l=0,m=0,n=0;
charstr0[301],str1[100],str2[100],str3[100];
gets(str1);
gets(str2);
gets(str3);
strcat(str0,str1);
strcat(str0,str2);
strcat(str0,str3);
for(i=0;str0[i]!
='\0';i++)
if(str0[i]>='A'&&str0[i]<='Z')j++;
elseif(str0[i]>='a'&&str0[i]<='z')k++;
elseif(str0[i]>='0'&&str0[i]<='9')l++;
elseif(str0[i]=='')m++;
elsen++;
printf("大写字母、小写字母、数字、空格以及其他字符的个数依次为:
printf("%5d%7d%5d%6d%4d\n",j,k,l,m,n);
7.14
inti=0,resu;
chars1[100],s2[100];
printf("\n请输入string1:
");
gets(s1);
printf("\n请输入string2:
gets(s2);
while(s1[i]==s2[i]&&s1[i]!
='\0')
if(s1[i]=='\0'&&s2[i]=='\0')resu=0;
elseresu=s1[i]-s2[i];
printf("\nresult:
%d\n",resu);
8.1
intmaxgy(intm,intn);
intmingb(into,intp);
inta,b;
printf("请输入两个正整数:
a,b\n");
scanf("%d,%d",&a,&b);
while(a<=0||b<=0)
printf("注:
请输入两个正整数:
printf("这两个数的最大公约数是:
%d",maxgy(a,b));
printf("这两个数的最小公倍数是:
%d",mingb(a,b));
intmaxgy(intm,intn)
inti,k;
k=i;
returnk;
intmingb(into,intp)
intj;
for(j=o;;j++)
if(j%o==0&&j%p==0)
break;
returnj;
8.3
intjudss(intm);
printf("请输入一个正整数:
scanf("%d",&a);
while(a<=0)
请输入一个正整数:
judss(a);
intjudss(intm)
inti;
for(i=2;iif(m%i==0)break;if(ireturnprintf("这个数不是素数");elsereturnprintf("这个数是素数");}8.5#include#includevoidmain(){charfx(charstr1[100]);charstr0[100];printf("请输入一个字符串:\n");gets(str0);fx(str0);puts(str0);}charfx(charstr1[100]){inti,j,k=strlen(str1);charstr2[100];strcpy(str2,str1);for(i=0,j=k-1;j>-1;i++,j--)str1[i]=str2[j];returnstr1[100];}
if(m%i==0)break;
if(ireturnprintf("这个数不是素数");elsereturnprintf("这个数是素数");}8.5#include#includevoidmain(){charfx(charstr1[100]);charstr0[100];printf("请输入一个字符串:\n");gets(str0);fx(str0);puts(str0);}charfx(charstr1[100]){inti,j,k=strlen(str1);charstr2[100];strcpy(str2,str1);for(i=0,j=k-1;j>-1;i++,j--)str1[i]=str2[j];returnstr1[100];}
returnprintf("这个数不是素数");
returnprintf("这个数是素数");
8.5
charfx(charstr1[100]);
charstr0[100];
printf("请输入一个字符串:
gets(str0);
fx(str0);
puts(str0);
charfx(charstr1[100])
{inti,j,k=strlen(str1);
charstr2[100];
strcpy(str2,str1);
for(i=0,j=k-1;j>-1;i++,j--)
str1[i]=str2[j];
returnstr1[100];
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1