1. 程式人生 > >譚浩強C語言程式設計(第三版)部分課後題答案,自己整理的

譚浩強C語言程式設計(第三版)部分課後題答案,自己整理的

第一篇部落格,也不知道怎麼寫,就把以前的筆記發上來吧

學了半年後寫的,可能稍顯不規範,或有的多餘,將就看吧,也不想再改了

1.5

#include<stdio.h>
void main()
{
printf("******************\n");
printf("    very good\n");
printf("******************\n");
}



1.6
#include<stdio.h>
void main()
{
int a,b,c,d;
scanf(%d,%d,%d",&a,&b,&c);
if(a>b)d=a;
else d=b;
if(c>d)d=c;
printf("%d\n",d);
}



3.7
#include<stdio.h>
void main()
{
char c1,c2,c3,c4,c5;
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("%c%c%c%c%c%c\n",c1,c2,c3,c4,c5);
}


3.9
#include<stdio.h>
void mian()
{
int a=7;
float x=2.5,y=4.7,z;
z=x+a%3*(int)(x+y)%2/4;
printf("%f\n",z);
}


4.4
#include<stdio.h>
void main()
{
int a=3,b=4,c=5;
float x=1.2,y=2.4,z=-3.6;
long u=51274,n=128765;
char c1='a',c2='b';
printf("a= %2d  b=%2d  c=%2d\n",a,b,c);
printf("x=%f,y=%f,z=%f\n",x,y,z);
printf("x+y= %f  y+z=%f  z=x=%f\n",x+y,y+z,z+x);
printf("u= %ld  n=   %ld\n",u,n);
printf("c1='%c' or %d\n",c1,c1);
printf("c2='%c' or %d\n",c2-32,c2);
}


4.5
#include<stdio.h>
void main()
{
int a=5,b=7;
float x=67.8564,y=-789.124;
char c='A';
long n=1234567;
unsigned u=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,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);
printf("%e,510.2e\n",x,y);
printf("%c,%d,%o,%x\n",c,c,c,c);
printf("%ld,%lo,%x\n",n,n,n);
printf("%u,%o,%x,%d\n",u,u,u,u);
printf("%s,%5.3s\n","COMPUTER","COMPUTER");
}


4.8
#include<stdio.h>
void main()
{
int h;
float r,C,s,S,v,V;
printf("請輸入高、半徑");
scanf("%d,%f",&h,&r);
printf("圓周長\n");
C=3.14*2*r;
printf("%.2f\n",C);
printf("圓面積\n");
s=3.14*r*r;
printf("%.2f\n",s);
printf("圓球表面積\n");
S=4*3.14*r*r;
printf("%.2f\n",S);
printf("圓球體積\n");
v=(4*3.14*r*r*r)/3;
printf("%.2f\n",v);
printf("圓柱體積");
V=s*h;
printf("%.2f",V);
}


4.9
#include<stdio.h>
void main()
{
float F,c;
printf("輸入一個華氏溫度\n");
scanf("%f",&F);
c=(5*(F-32))/9;
printf("輸出攝氏溫度:%.2f\n",c);
}


4.10
#include<stdio.h>
void main()
{
char c1,c2;
c1=getchar();
c2=getchar();
putchar(c1);putchar(c2);
printf("\n%c,%c\n",c1,c2);
}



5.4
#include<stdio.h>
void main()
{
int a,b,c,d;
scanf(%d,%d,%d",&a,&b,&c);
if(a>b)d=a;
else d=b;
if(c>d)d=c;
printf("%d\n",d);
}


5.5
#include<stdio.h>
void main()
{
float x,y;
printf("輸入x的值\n");
scanf("%f",&x);
if(x>=10)
y=3*x-11;
else if(x<1)
y=x;
else
y=2*x-1;
printf("%f\n",y);
}



5.6
#include<stdio.h>
void main()
{
float x;
int i;
printf("輸入一個成績\n");
scanf("%f",&x);
i=x/10;
switch(i)
{
case 9:printf("A");break;
case 8:printf("B");break;
case 7:printf("C");break;
case 6:printf("D");break;
default:printf("E");
}
printf("\n");
}


5.7
#include<stdio.h>
void main()
{
long i;
int d,a1,a2,a3,a4,a5;
printf("輸入一個不多於五位的正整數\n");
scanf("%d",&i);
if(i>9999)
{
d=5;
a1=i/10000;a2=i/1000-a1*10;a3=i/100-a1*100-a2*10;a4=i/10-a1*1000-a2*100-a3*10;a5=i%10;
printf("它是個%d位數\n",d);
printf("各位數分別是:\n%d,%d,%d,%d,%d\n",a1,a2,a3,a4,a5);
printf("逆序輸出\n%d,%d,%d,%d,%d\n",a5,a4,a3,a2,a1);
}
else if(i<10000&&i>999)
{
d=4;
a1=i/1000;a2=i/100-a1*10;a3=i/10-a1*100-a2*10;a4=i%10;
printf("它是個%d位數\n",d);
printf("各位數分別是:\n%d,%d,%d,%d\n",a1,a2,a3,a4);
printf("逆序輸出\n%d,%d,%d,%d\n",a4,a3,a2,a1);
}
else if(i<1000&&i>99)
{
d=3;
a1=i/100;a2=i/10-a1*10;a3=i%10;
printf("它是個%d位數\n",d);
printf("各位數分別是:\n%d,%d,%d\n",a1,a2,a3);
printf("逆序輸出\n%d,%d,%d\n",a3,a2,a1);
}
else if(i<100&&i>9)
{
d=2;
a1=i/10;a2=i%10;
printf("它是個%d位數\n",d);
printf("各位數分別是:\n%d,%d\n",a1,a2);
printf("逆序輸出\n%d,%d\n",a2,a1);
}
else
{
d=1;
a1=i;
printf("它是個%d位數\n",d);
printf("各位數分別是:\n%d\n",a1);
printf("逆序輸出\n%d\n",a1);
}

}



5.8
用if語句
#include<stdio.h>
void main()
{
long i;
double a;
printf("輸入利潤\n");
scanf("%ld",&i);
if(i<=100000)
a=i*0.1;
else if(i>100000&&i<=200000)
a=100000*0.1+(i-100000)*0.075;
else if(i>200000&&i<=400000)
a=100000*0.1+100000*0.075+(i-200000)*0.05;
else if(i>400000&&i<600000)
a=100000*0.1+100000*0.075+200000*0.05+(i-400000)*0.03;
else if(i>600000&&i<=1000000)
a=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;
else if(i>1000000)
a=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;
printf("%f\n",a);
}


用switch語句
#include<stdio.h>
void main()
{
long i,j;
double a;
printf("請輸入利潤\n");
scanf("%d",&i);
j=i/100000;
switch(j)
{
case 0:a=i*0.1;break;
case 1:a=100000*0.1+(i-100000)*0.75;break;
case 2:
case 3:a=100000*0.1+100000*0.075+(i-200000)*0.05;break;
case 4:
case 5:a=100000*0.1+100000*0.075+200000*0.05+(i-400000)*0.03;break;
case 6:
case 7:
case 8:
case 9:a=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;break;
default:a=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;break;
}
printf("%f\n",a);
}


5.9
#include<stdio.h>
void main()
{
int a[4],i,j,k,t;
printf("請輸入四個整數\n");
for(i=0;i<4;i++)
scanf("%d",&a[i]);
for(j=0;j<3;j++)
{
for(k=0;k<3-j;k++)
if(a[k]>a[k+1])
{
t=a[k];
a[k]=a[k+1];
a[k+1]=t;
}
printf("由小到大順序為:\n");
for(i=0;i<4;i++)
printf(" %d",a[i]);
printf("\n");
}


5.10
#include<stdio.h>
void main()
{
int h=10;
float x,y,d,x0,y0;
x0=2;y0=2;
printf("請輸入點的座標\n");
scanf("%f%f",&x,&y);
if(x>=0&&y>=0)
d=(x-x0)*(x-x0)+(y-y0)*(y-y0);//第一象限//
else if(x<=0&&y>=0)
d=(x+x0)*(x+x0)+(y-y0)*(y-y0);//第二象限//
else if(x<=0&&y<=0)
d=(x+x0)*(x+x0)+(y+y0)*(y+y0);//第三象限//
else 
d=(x-x0)*(x-x0)+(y+y0)*(y+y0);//第四象限//
if(d>1)
h=0;
printf("該點的高度為:%d\n",h);
}


6.1
#include<stdio.h>
void main()
{
int m,n,i,j;
printf("請輸入兩個數");
scanf("%d%d",&m,&n);
if(m>n)
{
i=n;
j=m;
}
else
{
i=m;
j=n;
}
for(;i>1;i--)
{
if(m%i==0&&n%i==0)
break;
}
for(;;j++)
{
if(j%m==0&&j%n==0)
break;
}
printf("最大公約數為:%d\n",i);
printf("最小公倍數為:%d\n",j);

}


6.2
#include<stdio.h>
void main()
{
int i,a=0,b=0,c=0,d=0;
char str[100];
printf("請輸入字元\n");
gets(str);
for(i=0;i<100;i++)
{
if(str[i]<='Z'&&str[i]>='A'||str[i]<='z'&&str[i]>='a')
a++;
else if(str[i]>=48&&str[i]<=57)
b++;
else if(str[i]==32)
c++;
else if(str[i]=='\0')
break;
else
d++;
}
printf("字母個數為: %d\n",a);
printf("數字個數為: %d\n",b);
printf("空格個數為: %d\n",c);
printf("其他字元個數為: %d\n",d);
}



6.3
#include<stdio.h>
void main()
{
int n,a,S=0,i,j=0;
printf("請輸入a、n的值\n");
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++)
{
j=j*10+a;
S=S+j;
}
printf("%d\n",S);
}






6.4
#include<stdio.h>
void main()
{
int i,n,S;
n=1;S=0;
for(i=2;i<=20;i++)
{
n=i*n;
S=S+n;
}
printf("%d\n",S);
}


6.5
#include<stdio.h>
void main()
{
int i,k1,k2,k3,s;
k1=0;k2=0;k3=0;i=1;
for(;i<=100;i++)
k1+=i;
for(;i<=50;i++)
k2+=i*i;
for(;i<=10;i++)
k3+=1/i;
s=k1+k2+k3;
printf("%d\n",s);
}


6.6
#include<stdio.h>
void main()
{
int i,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=i/10-a*10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
printf("%-5d",i);
}
printf("\n");
}



6.8
#include<stdio.h>
void main()
{
float i,a,b,t,s;
a=1;b=2;t=0;s=0;
for(i=0;i<20;i++)
{
s=s+(b/a);
t=a;a=b;b=t+b;
}
printf("%f\n",s);
}


6.9
#include<stdio.h>
void main()
{
int i;
float j,k;
j=100;k=100;
for(i=2;i<=10;i++)
{
j=j/2;
k=k+2*j;
}
printf("%f\n",k);
}



6.10
#include<stdio.h>
void main()
{
int i,j;
j=1;
for(i=1;i<10;i++)
j=j*2+2;
printf("%d\n",j);
}



6.14
#include<stdio.h>
void 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");
}
}



7.1
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,k,n;
for(i=3;i<=100;i=i+2)
{
k=sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0)
break;
if(j>=k+1)
{
printf("%-3d",i);
n=n+1;
}
if(n%10==0)
printf("\n");
}
printf("\n");
}




7.2
#include<stdio.h>
void main()
{
void sort(int array[],int n);
int a[10],i;
printf("請輸入十個數\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("該陣列由小到大的順序為\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
}
void sort(int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}



7.3
#include<stdio.h>
void main()
{
int a[3][3];
int i,j,m;
printf("請輸入九個數\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}
m=a[0][0]+a[0][2]+a[1][1]+a[2][0]+a[2][2];
printf("對角線元素之和為: %d\n",m);
}



7.5
#include<stdio.h>
void main()
{
int a[5],i;
printf("請輸入五個數");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=4;i>=0;i--)
printf("%4d",a[i]);
printf("\n");
}



7.6
#include<stdio.h>
void main()
{
int i,j;
int a[10][10];
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
{
for(j=1;j<i;j++)
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("%5d",a[i][j]);
printf("\n");
}
}



7.10
#include<stdio.h>
void main()
{
char s[3][80],i,j,a,b,c,d,e;
a=0;b=0;c=0;d=0;e=0;
printf("請輸入文章\n");
for(i=0;i<3;i++)
{
for(j=0;j<80;j++)
scanf("%c",&s[i][j]);
}
for(i=0;i<3;i++)
{
for(j=0;j<80;j++)
{
if(s[i][j]<=90&&s[i][j]>=65)
a++;
else if(s[i][j]>=97&&s[i][j]<=122)
b++;
else if(s[i][j]>=48&&s[i][j]<=57)
c++;
else if(s[i][j]==32)
d++;
else
e++;
}
}
printf("大寫字母個數為: %d\n",a);
printf("小寫字母個數為: %d\n",b);
printf("數字個數為: %d\n",c);
printf("空格個數為: %d\n",d);
printf("其它字元個數為: %d\n",e);
}



7.11
#include<stdio.h>
void main()
{
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<i;j++)
printf(" ");
printf("******\n");
}
}


7.12
#include<stdio.h>
void main()
{
char s[20];
int i,j;
printf("輸入密文\n");
gets(s);
for(i=0;i<20;i++)
{
if(s[i]<=90&&s[i]>=65||s[i]>=97&&s[i]<=122)
{
if(s[i]<=77)
{
j=77-s[i];
s[i]=78+j;
}
else if(s[i]>=78&&s[i]<=90)
{
j=s[i]-78;
s[i]=77-j;
}
else if(s[i]>=97&&s[i]<=109)
{
j=109-s[i];
s[i]=110+j;
}
else
{
j=s[i]-110;
s[i]=109-j;
}
}
else 
continue;
}
printf("輸出原文:\n");
puts(s);
}


7.13
#include<stdio.h>
void main()
{
char a[20],b[10];
int i,j;
printf("請輸入字串a\n");
gets(a);
printf("請輸入字元數串b\n");
gets(b);
for(i=0;i<20;i++)
{
if(a[i]=='\0')
break;
}
for(j=0;j<10;j++)
{
a[i]=b[j];
i++;
}
puts(a);
}



7.14
#include<stdio.h>
void main()
{
char s1[10],s2[10];
int i,k=0;
gets(s1);
gets(s2);
for(i=0;i<10;i++)
{
if(s1[i]!=s2[i])
{
k=s1[i]-s2[i];
break;
}
}
printf("%d",k);
}


7.15
#include<stdio.h>
void main()
{
char s1[20],s2[10];
int i;
scanf("%s",s2);
for(i=0;i<10;i++)
{
s1[i]=s2[i];
if(s2[i]=='\0')
break;
}
puts(s1);
}


8.1
#include<stdio.h>
void main()
{
int f(int i,int j);
int g(int i,int j);
int a,b,m,n;
printf("輸入ab的值");
scanf("%d%d",&a,&b);
m=f(a,b);
n=g(a,b);
printf("最大公約數為: %d\n",m);
printf("最小公倍數為: %d\n",n);
}
f(int i,int j)
{
int m;
if(i>j)
m=j;
else
m=i;
for(;m>1;m--)
{
if(i%m==0&&j%m==0)
break;
}
return m;
}
g(int i,int j)
{
int n;
if(i>j)
n=i;
else
n=j;
for(;;n++)
{
if(n%i==0&&n%j==0)
break;
}
return n;
}