第一篇:C语言设计谭浩强第三版的课后习题答案
C语言设计谭浩强第三版的课后习题答案
1.5请参照本章例题,编写一个C程序,输出以下信息: main(){ printf(“
************
n”);printf(“n”);printf(“
Very Good!n”);printf(“n”);printf(“
************n”);} 1.6编写一个程序,输入a b c三个值,输出其中最大者。解:main(){int a,b,c,max;printf(“请输入三个数a,b,c:n”);
scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(maxmax=b;if(maxmax=c;printf(“最大数为:%d”,max);} 第三章
3.3 请将下面各数用八进制数和十六进制数表示:(1)10(2)32(3)75(4)-617(5)-111(6)2483(7)-28654(8)21003 解:十 八 十六
(10)=(12)=(a)
(32)=(40)=20
(75)=(113)=4b
(-617)=(176627)=fd97
-111=177621=ff91
2483=4663=963
-28654=110022=9012
21003=51013=520b 3.5字符常量与字符串常量有什么区别?
解:字符常量是一个字符,用单引号括起来。字符串常量是由0个或若干个字符 而成,用双引号把它们括起来,存储时自动在字符串最后加一个结束符号' '.3.6写出以下程序的运行结果: #include void main(){ char c1='a',c2='b',c3='c',c4='101',c5='116';printf(“a%c b%ctc%ctabcn”,c1,c2,c3);printf(“tb%c %cn”,c4,c5);
解:程序的运行结果为: aabb cc abc A N 3.7将“China”译成密码.密码规律:用原来的字母后面第4个字母代替原来的字母, 例如,字母“A”后面第4个字母是“E”,用“E”代替“A”.因此,“China”应译为“Glmre”.请编一程序,用赋初值的议程使c1,c2,c3,c4,c5分别变成'G','1','m','r','e',并 输出.main(){char c1=“C”,c2=“h”,c3=“i”,c4='n',c5='a';c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf(“密码是%c%c%c%c%cn”,c1,c2,c3,c4,c5);} 3.8例3.6能否改成如下: #include void main(){ int c1,c2;(原为 char c1,c2)c1=97;c2=98;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);} 解:可以.因为在可输出的字符范围内,用整型和字符型作用相同.3.9求下面算术表达式的值.(1)x+a%3*(int)(x+y)%2/4=2.5(x=2.5,a=7,y=4.7)(2)(float)(a+b)/2+(int)x%(int)y=3.5(设a=2,b=3,x=3.5,y=2.5)3.10写出下面程序的运行结果: #include void main(){ int i,j,m,n;i=8;j=10;m=++i;n=j++;printf(“%d,%d,%d,%dn”,i,j,m,n);} 解:结果:
9,11,9,10 第4章
4.4.a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1='a',c2='b'.想得
到以下的输出格式和结果,请写出程序要求输出的结果如下: a= 3 b= 4 c= 5 x=1.200000,y=2.400000,z=-3.600000 x+y= 3.60 y+z=-1.20 z+x=-2.40 u= 51274 n=
128765 c1='a' or 97(ASCII)c2='B' or 98(ASCII)解: main(){ int a,b,c;long int u,n;float x,y,z;char c1,c2;a=3;b=4;c=5;x=1.2;y=2.4;z=-3.6;u=51274;n=128765;c1='a';c2='b';printf(“n”);printf(“a=%2d b=%2d c=%2dn”,a,b,c);printf(“x=%8.6f,y=%8.6f,z=%9.6fn”,x,y,z);printf(“x+y=%5.2f y=z=%5.2f z+x=%5.2fn”,x+y,y+z,z+x);printf(“u=%6ld n=%9ldn”,u,n);printf(“c1='%c' or %d(ASCII)n”,c1,c2);printf(“c2='%c' or %d(ASCII)n”,c2,c2);} 4.5请写出下面程序的输出结果.结果: 57 7 67.856400,-789.123962 67.856400 ,-789.123962
67.86,-789.12,67.856400,-789.123962,67.856400,-789.123962 6.785640e+001,-7.89e+002 A,65,101,41 1234567,4553207,d687 65535,17777,ffff,-1 COMPUTER, COM 4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a', 问在键盘上如何输入? main(){ int a,b;float x,y;
char c1,c2;scanf(“a=%d b=%d,&a,&b);scanf(” x=%f y=%e“,&x,&y);scanf(” c1=%c c2=%c“,&c1,&c2);} 解:可按如下方式在键盘上输入: a=3 b=7 x=8.5 y=71.82 c1=A c2=a 说明:在边疆使用一个或多个scnaf函数时,第一个输入行末尾输入的”回车“被第二 个scanf函数吸收,因此在第二三个scanf函数的双引号后设一个空格以抵消上行 入的”回车“.如果没有这个空格,按上面输入数据会出错,读者目前对此只留有一 初步概念即可,以后再进一步深入理解.4.7用下面的scanf函数输入数据使a=10,b=20,c1='A',c2='a',x=1.5,y=-
3.75,z=57.8,请问
在键盘上如何输入数据?
scanf(”%5d%5d%c%c%f%f%*f %f“,&a,&b,&c1,&c2,&y,&z);解: main(){ int a,b;float x,y,z;char c1,c2;scanf(”%5d%5d%c%c%f%f“,&a,&b,&c1,&c2,&x,&y,&z);} 运行时输入:
20Aa1.5-3.75 +1.5,67.8 注解:按%5d格式的要求输入a与b时,要先键入三个空格,而后再打入10与20。%*f
是用来禁止赋值的。在输入时,对应于%*f的地方,随意打入了一个数1.5,该值不
会赋给任何变量。
4.8设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积,用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字.请编
程.解:main(){ float pi,h,r,l,s,sq,vq,vz;pi=3.1415926;printf(”请输入圆半径r圆柱高h:n“);scanf(”%f,%f“,&r,&h);
l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;vq=4.0/3.0*pi*r*r*r;vz=pi*r*r*h;printf(”圆周长为:
=%6.2fn“,l);printf(”圆面积为:
=%6.2fn“,s);printf(”圆球表面积为: =%6.2fn“,sq);printf(”圆球体积为:
=%6.2fn“,vz);} 4.9输入一个华氏温度,要求输出摄氏温度,公式为C=5/9(F-32),输出要有文字说明,取两位小数.解: main(){ float c,f;printf(”请输入一个华氏温度:n“);scanf(”%f“,&f);c=(5.0/9.0)*(f-32);printf(”摄氏温度为:%5.2fn“,c);} 第五章 逻辑运算和判断选取结构
5.4有三个整数a,b,c,由键盘输入,输出其中最大的数.main(){ int a,b,c;printf(”请输入三个数:“);scanf(”%d,%d,%d“,&a,&b,&c);if(a if(b
printf(”max=%dn“,c);
else
printf(”max=%dn“,b);else if(a
printf(”max=%dn“,c);
else
printf(”max-%dn“,a);} 方法2:使用条件表达式.main(){int a,b,c,termp,max;printf(”
请输入
A,B,C:
“);scanf(”%d,%d,%d“,&a,&b,&c);printf(”A=%d,B=%d,C=%dn“,a,b,c);temp=(a>b)?a:b;max=(temp>c)? temp:c;printf(”
A,B,C中最大数是%d,“,max);
} 5.5 main(){int x,y;printf(”输入x:“);scanf(”%d“,&x);if(x<1)
{y=x;
printf(”X-%d,Y=X=%d n“,x,y);
} else if(x<10)
{y=2*x-1;
printf(” X=%d, Y=2*X-1=%dn“,x,y);
} else
{y=3*x-11;
printf(”X=5d, Y=3*x-11=%d n“,x,y);
} }
(习题5-6:)自己写的已经运行成功!不同的人有不同的算法,这些答案仅供参考!
void main(){ float s,i;char a;scanf(”%f“,&s);while(s>100||s<0){ printf(”输入错误!error!“);scanf(”%f“,&s);} i=s/10;switch((int)i){ case 10: case 9: a='A';break;case 8: a='B';break;case 7: a='C';break;case 6: a='D';break;case 5: case 4: case 2: case 1: case 0: a='E';
} printf(”%c“,a);}
5.7给一个不多于5位的正整数,要求:1.求它是几位数2.分别打印出每一位数字3.按逆序打印出各位数字.例如原数为321,应输出123.main(){ long int num;int indiv,ten,hundred,housand,tenthousand,place;printf(”请输入一个整数(0-99999):“);scanf(”%ld“,&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(”place=%dn“,place);printf(”每位数字为:“);ten_thousand=num/10000;thousand=(num-tenthousand*10000)/1000;hundred=(num-tenthousand*10000-thousand*1000)/100;ten=(num-tenthousand*10000-thousand*1000-hundred*100)/10;indiv=num-tenthousand*10000-thousand*1000-hundred*100-ten*10;switch(place){case 5:printf(”%d,%d,%d,%d,%d“,tenthousand,thousand,hundred,ten,indiv);printf(”n反序数字为:“);printf(”%d%d%d%d%dn“,indiv,ten,hundred,thousand,tenthousand);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,%dn“,hundred,ten,indiv);printf(”n反序数字为:“);printf(”%d%d%dn“,indiv,ten,hundred);case 2:printf(”%d,%dn“,ten,indiv);printf(”n反序数字为:“);printf(”%d%dn“,indiv,ten);
case 1:printf(”%dn“,indiv);printf(”n反序数字为:“);printf(”%dn“,indiv);} } 5.8 1.if语句
main(){long i;float bonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;scanf(”%ld“,&i);if(i<=1e5)bonus=i*0.1;else if(i<=2e5)bonus=bon1+(i-100000)*0.075;else if(i<=4e5)bonus=bon2+(i-200000)*0.05;else if(i<=6e5)bonus=bon4+(i-400000)*0.03;else if(i<=1e6)bonus=bon6+(i-600000)*0.015;else bonus=bon10+(i-1000000)*0.01;printf(”bonus=%10.2f“,bonus);}
用switch语句编程序 main(){long i;float 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;scanf(”%ld“,&i);branch=i/100000;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)*0.015;break;
case 10:bonus=bon10+(i-1000000)*0.01;
} printf(”bonus=%10.2f“,bonus);}
5.9 输入四个整数,按大小顺序输出.main()
{int t,a,b,c,d;
printf(”请输入四个数:“);
scanf(”%d,%d,%d,%d“,&a,&b,&c,&d);
printf(”nn a=%d,b=%d,c=%d,d=%d n“,a,b,c,d);
if(a>b){t=a;a=b;b=t;}
if(a>c){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 排序结果如下: n“);printf(”
%d %d %d %d n“,a,b,c,d);} 5.10塔 main(){ int h=10;float x,y,x0=2,y0=2,d1,d2,d3,d4;printf(”请输入一个点(x,y):“);scanf(”%f,%f“,&x,&y);d1=(x-x0)*(x-x0)+(y-y0)(y-y0);d2=(x-x0)*(x-x0)+(y+y0)(y+y0);d3=(x+x0)*(x+x0)+(y-y0)*(y-y0);d4=(x+x0)*(x+x0)+(y+y0)*(y+y0);
if(d1>1 && d2>1 && d3>1 && d4>1)h=0;printf(”该点高度为%d“,h);}
第六章 循环语句
6.1输入两个正数,求最大公约数最小公倍数.main(){ int a,b,num1,num2,temp;printf(”请输入两个正整数:n“);scanf(”%d,%d“,&num1,&num2);if(num1{ temp=num1;num1=num2;num2=temp;} a=num1,b=num2;while(b!=0)
{
temp=a%b;
a=b;
b=temp;
} printf(”它们的最大公约数为:%dn“,a);printf(”它们的最小公倍数为:%dn“,num1*num2/2);} 6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解: #include <
> main(){ char c;int letters=0,space=0,degit=0,other=0;printf(”请输入一行字符:n“);scanf(”%c“,&c);while((c=getchar())!='n'){ if(c>='a'&&c<='z'||c>'A'&&c<='Z')letters++;else if(c==' ')space++;else if(c>='0'&&c<='9')digit++;
else other++;} printf(”其中:字母数=%d 空格数=%d 数字数=%d 其它字符数=%
dn“,letters,space, digit,other);} 6.3求s(n)=a+aa+aaa+…+aa…a之值,其中工是一个数字.解: main(){ int a,n,count=1,sn=0,tn=0;printf(”请输入a和n的值:n“);scanf(”%d,%d“,&a,&n);printf(”a=%d n=%d n“,a,n);while(count<=n){ tn=tn+a;sn=sn+tn;a=a*10;++count;} printf(”a+aa+aaa+…=%dn“,sn);} 6.4 求1+2!+3!+4!+…+20!.main(){ float n,s=0,t=1;for(n=1;n<=20;n++){ t=t*n;s=s+t;} printf(”1!+2!+…+20!=%en“,s);} 6.5 main(){ int N1=100,N2=50,N3=10;float k;float s1=0,s2=0,s3=0;for(k=1;k<=N1;k++){ s1=s1+k;
} for(k=1;k<=N2;k++){ s2=s2+k*k;} for(k=1;k<=N3;k++){ s3=s3+1/k;} printf(”总和=%8.2fn“,s1+s2+s3);} 6.6水仙开花 main(){ int i,j,k,n;printf(” '水仙花'数是:“);for(n=100;n<1000;n++){ i=n/100;j=n/10-i*10;k=n%10;if(i*100+j*10+k==i*i*i+j*j*j+k*k*k){ printf(”%d“,n);} } printf(”n“);} 6.7完数 main()#include M 1000 main(){ int k0,k1,k2,k3,k4,k5,k6,k7,k8,k9;int i,j,n,s;for(j=2;j<=M;j++){ n=0;s=j;for(i=1;i { if((j%i)==0)
{
if((j%i)==0)
{
n++;
s=s-i;
switch(n)
{
case 1: k0=i;break;case 2: k1=i;break;case 3: k2=i;break;case 4: k3=i;break;case 5: k4=i;break;case 6: k5=i;break;case 7: k6=i;break;case 8: k7=i;break;case 9: k8=i;break;case 10: k9=i;break;}
}
} if(s==0)
{ printf(”%d是一个‘完数’,它的因子是“,j);if(n>1)
printf(”%d,%d“,k0,k1);if(n>2)
printf(”,%d“,k2);
if(n>3)
printf(”,%d“,k3);if(n>4)
printf(”,%d“,k4);if(n>5)
printf(”,%d“,k5);if(n>6)
printf(”,%d“,k6);if(n>7)
printf(”,%d“,k7);if(n>8)
printf(”,%d“,k8);if(n>9)
printf(”,%d“,k9);printf(”n“);
} } 方法二:此题用数组方法更为简单.main(){ static int k[10];int i,j,n,s;for(j=2;j<=1000;j++){ n=-1;s=j;for(i=1;i{ if((j%i)==0){ n++;s=s-i;k[n]=i;
}
} if(s==0){ printf(”%d是一个完数,它的因子是:“,j);for(i=0;iprintf(”%d,“,k[i]);printf(”%dn“,k[n]);} } 6.8 有一个分数序列:2/1,3/2,5/3,8/5……求出这个数列的前20项之和.解: main(){
int n,t,number=20;float a=2,b=1,s=0;for(n=1;n<=number;n++){ s=s+a/b;t=a,a=a+b,b=t;} printf(”总和=%9.6fn“,s);} 6.9球反弹问题 main(){ float sn=100.0,hn=sn/2;int n;for(n=2;n<=10;n++){ sn=sn+2*hn;hn=hn/2;} printf(”第10次落地时共经过%f米 n“,sn);printf(”第10次反弹%f米.n“,hn);} 6.10猴子吃桃 main(){ int day,x1,x2;day=9;x2=1;while(day>0){ x1=(x2+1)*2;x2=x1;day--;} printf(”桃子总数=%dn“,x1);}
6.12 #include”math.h“ main(){float x,x0,f,f1;x=1.5;
do
{x0=x;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x=x0-f/f1;
} while(fabs(x-x0)>=1e-5);printf(”x=%6.2fn“,x);}
6.13 #include”math.h“ main(){float x0,x1,x2,fx0,fx1,fx2;do
{scanf(”%f,%f“,&x1,&x2);
fx1=x1*((2*x1-4)*x1+3)-6;
fx2=x2*((2*x2-4)*x2+3)-6;
} while(fx1*fx2>0);do
{x0=(x1+x2)/2;
fx0=x0*((2*x0-4)*x0+3)-6;
if((fx0*fx1)<0)
{x2=x0;
fx2=fx0;
}
else
{x1=x0;
fx1=fx0;
}
} while(fabs(fx0)>=1e-5);printf(”x0=%6.2fn“,x0);} 6.14打印图案
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“);
} } 6.15乒乓比赛 main(){ char i,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-%ctb--%ctc--%cn“,i,j,k);
}
}
} }
C语言设计谭浩强第三版的课后习题答案7-8(2008-10-21 17:15:29)
标签:杂谈
分类:淘金
C语言设计谭浩强第三版的课后习题答案
7.1用筛选法求100之内的素数.#include #define N 101 main(){int i,j,line,a[N];
for(i=2;ifor(i=2;ifor(j=i+1;j {if(a[i]!=0 && a[j]!=0)
if(a[j]%a[i]==0)a[j]=0;printf(”n“);for(i=2,line=0;i{ if(a[i]!=0)
{printf(”%5d“,a[i]);line++;if(line==10){printf(”n“);line=0;}
} } 7.2用选择法对10个数排序.#define N 10 main(){ int i,j,min,temp,a[N];
printf(”请输入十个数:n“);for(i=0;i{
printf(”a[%d]=“,i);
scanf(”%d“,&a[i]);} printf(”n“);for(i=0;i printf(”%5d“,a[i]);printf(”n“);
for(i=0;i{ min=i;
for(j=i+1;j
if(a[min]>a[j])min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;}
printf(”n排序结果如下:n“);for(i=0;iprintf(”%5d“,a[i]);}
7.3对角线和:
main(){ float a[3][3],sum=0;int i,j;printf(”请输入矩阵元素:n“);
for(i=0;i<3;i++)
for(j=0;j<3;j++)scanf(”%f“,&a[i][j]);
for(i=0;i<3;i++)
sum=sum+a[i][i];
printf(”对角元素之和=6.2f“,sum);} 7.4插入数据到数组
main(){int a[11]={1,4,6,9,13,16,19,28,40,100};int temp1,temp2,number,end,i,j;printf(”初始数组如下:“);for(i=0;i<10;i++)printf(”%5d“,a[i]);printf(”n“);printf(”输入插入数据:“);scanf(”%d“,&number);end=a[9];if(number>end)a[10]=number;else {for(i=0;i<10;i++)
{
if(a[i]>number){temp1=a[i];a[i]=number;for(j=i+1;j<11;j++){temp2=a[j];a[j]=temp1;temp1=temp2;} break;}
} } for(i=0;j<11;i++)
printf(”a%6d“,a[i]);} 7.5将一个数组逆序存放。
#define N 5 main(){ int a[N]={8,6,5,4,1},i,temp;printf(”n 初始数组:n“);
for(i=0;iprintf(”%4d“,a[i]);for(i=0;i{ temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;} printf(”n 交换后的数组:n“);for(i=0;i
printf(”%4d“,a[i]);} 7.6杨辉三角
#define N 11 main(){ int i,j,a[N][N];
for(i=1;i {a[i][i]=1;
a[i][1]=1;
}
for(i=3;i
for(j=2;j<=i-1;j++)a[i][j]=a[i01][j-1]+a[i-1][j];
for(i=1;i
{ for(j=1;j<=i;j++)printf(”%6d“,a[i][j];printf(”n“);
}
printf(”n“);} 7.8鞍点
#define N 10 #define M 10 main(){ int i,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;printf(”n输入行数n:“);scanf(”%d“,&n);printf(”n输入列数m:“);scanf(”%d“,&m);
for(i=0;i { printf(”第%d行?n“,i);for(j=0;j
scanf(”%d“,&a[i][j];} for(i=0;i { for(j=0;j
printf(”%5d“,a[i][j]);
pritf(”n“);} flag2=0;for(i=0;i { max=a[i][0];for(j=0;j if(a[i][j]>max)
{ max=a[i][j];
maxj=j;} for(k=0,flag1=1;k
if(max>a[k][max])
flag1=0;if(flag1){ printf(”n第%d行,第%d列的%d是鞍点n“,i,maxj,max);
flag2=1;} } if(!flag2)
printf(”n 矩阵中无鞍点!n“);}
7.9变量说明:top,bott:查找区间两端点的下标;loca:查找成功与否的开关变量.#include #define N 15 main(){ int i,j,number,top,bott,min,loca,a[N],flag;
char c;
printf(”输入15个数(a[i]>[i-1])n);
scanf(“%d”,&a[0]);
i=1;
while(i { scanf(“%d”,&a[i]);
if(a[i]>=a[i-1])i++;esle {printf(“请重输入a[i]”);printf(“必须大于%dn”,a[i-1]);}
}
printf(“n”);
for(i=0;i
printf(“%4d”,a[i]);
printf(“n”);
flag=1;
while(flag)
{ printf(“请输入查找数据:”);
scanf(“%d”,&number);
loca=0;
top=0;
bott=N-1;
if((numbera[N-1]))loca=-1;
while((loca==0)&&(top<=bott))
{ min=(bott+top)/2;
if(number==a[min])
{ loca=min;
printf(“%d位于表中第%d个数n”,number,loca+1);
}
else if(number
bott=min-1;else
top=min+1;
}
if(loca==0||loca==-1)
printf(“%d不在表中n”,number);
printf(“是否继续查找?Y/N!n”);
c=getchar();if(c=='N'||c=='n')flag=0;
} }
7.10 main(){ int i,j,uppn,lown,dign,span,othn;
char text[3][80];
uppn=lown=dign=span=othn=0;
for(i=0;i<3;i++)
{ printf(“n请输入第%d行:n”,i);
gets(text[i]);
for(j=0;j<80 && text[i][j]!=' ';j++)
{if(text[i][j]>='A' && text[i][j]<='Z')uppn+=1;else if(text[i][j]>='a' && text[i][j]<='z')lown+=1;else if(text[i][j]>='1' && text[i][j]<='9')dign+=1;else if(text[i][j]=' ')span+=1;else othn+=1;
}
}
for(i=0;i<3;i++)printf(“%s=n”,text[i]);
printf(“大写字母数:%dn”,uppn);
printf(“小写字母数:%dn”,lown);
printf(“数字个数:%dn”,dign);
printf(“空格个数:%dn”,span);
printf(“其它字符:%dn”,othn);}
7.11 main()
{static char a[5]={'*','*','*','*','*'};
int i,j,k;
char space=' ';
for(i=0;i<=5;i++)
{printf(“n”);
for(j=1;j<=3*i;j++)printf(“%lc”,space);
for(k=0;k<=5;k++)printf(“%3c”,a[k];
} } 7.12 #include main(){int i,n;char ch[80],tran[80];printf(“请输入字符:”);gets(ch);printf(“n密码是%c”,ch);i=0;while(ch[i]!=' '){if((ch[i]>='A')&&(ch[i]<='Z'))
tran[i]=26+64-ch[i]+1+64;else if((ch[i]>='a')&&(ch[i]<='z'))
tran[i]=26+96-ch[i]+1+96;else tran[i]=ch[i];
i++;} n=i;
printf(“n原文是:”);for(i=0;iputchar(tran[i]);} 7.13 main()
{
char s1[80],s2[40];
int i=0,j=0;
printf(“n请输入字符串1:”);
scanf(“%s”,s1);
printf(“n请输入字符串2:”);
scanf(“%s”,s2);
while(s1[i]!=' ')
i++;while(s2[j]!=' ')
s1[i++]=s2[j++];s1[i]=' ';printf(“n连接后字符串为:%s”,s1);
}
7.14 #include main(){int i,resu;char s1[100],s2[100];printf(“请输入字符串1:n”);gets(s1);printf(“n 请输入字符串2:n”);gets(s2);i=0;while((s1[i]==s2[i])&&(s1[i]!=' '))i++;if(s1[i]==' ' && s2[i]==' ')resu=0;else resu=s1[i]-s2[i];printf(“ %s与%s比较结果是%d”,s1,s2,resu);} 7.15 #include main()
{
char from[80],to[80];
int i;
printf(“请输入字符串”);
scanf(“%s”,from);
for(i=0;i<=strlen(from);i++)
to[i]=from[i];
printf(“复制字符串为:%sn”,to);
}
第八章 函数
8.1(最小公倍数=u*v/最大公约数.)hcf(u,v)int u,v;(int a,b,t,r;if(u>v)
{t=u;u=v;v=t;} a=u;b=v;while((r=b%a)!=0)
{b=a;a=r;}
return(a);
}
lcd(u,v,h)
int u,v,h;{int u,v,h,l;scanf(“%d,%d”,&u,&v);h=hcf(u,v);printf(“H.C.F=%dn”,h);l=lcd(u,v,h);printf(“L.C.d=%dn”,l);}
{return(u*v/h);} main(){int u,v,h,l;scanf(“%d,%d”,&u,&v);h=hcf(u,v);printf(“H.C.F=%dn”,h);l=lcd(u,v,h);printf(“L.C.D=%dn”,l);
}
8.2求方程根 #include float x1,x2,disc,p,q;
greater_than_zero(a,b)float a,b;{ x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);}
equal_to_zero(a,b)float a,b;{x1=x2=(-b)/(2*a);}
smaller_than_zero(a,b)float a,b;{p=-b/(2*a);q=sqrt(disc)/(2*a);} main(){ float a,b,c;printf(“n输入方程的系数a,b,c:n”);scanf(“%f,%f,%f”,&a,&b,&c);printf(“n 方程是:%5.2f*x*x+%5.2f*x+%5.2f=0n”,a,b,c);disc=b*b-4*a*c;printf(“方程的解是:n”);if(disc>0){great_than_zero(a,b);printf(“X1=%5.2ftX2=%5.2fnn”,x1,x2);} else if(disc==0){ zero(a,b);printf(“X1=%5.2ftX2=%5.2fnn”,x1,x2);}
else { small_than_zero(a,b,c);printf(“X1=%5.2f+%5.2fitX2=%5.2f-%2.2fin”,p,q,p,q);} }
8.3素数
#include“math.h” main(){int number;scanf(“%d”,&number);if(prime(number))
printf(“yes”);else
printf(“no”);} int prime(number)int number;{int flag=1,n;for(n=2;n
if(number%n==0)
flag=0;return(flag);}
8.4 #define N 3 int array[N][N];convert(array)int array[3][3];{ int i,j,t;
for(i=0;i for(j=i+1;j { t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;} } main(){
int i,j;printf(“输入数组元素:n”);for(i=0;i for(j=0;j
scanf(“%d”,&array[i][j];printf(“n数组是:n”);for(i=0;i { for(j=0;j
printf(“%5d”,array[i][j]);
printf(“n”);}
convert(array);printf(“转置数组是:n”);for(i=0;i { for(j=0;j
printf(“%5d”,array[i][j]);
printf(“n”);} }
8.5 main(){ char str[100];
printf(“输入字符串:n”);
scanf(“%s”,str);
inverse(str);
printf(“转换后的字符串是: %sn”,str);}
inverse(str)char str[];{ char t;int i,j;for(i=0,j=strlen(str);i { t=str[i];str[i]=str[i-1];str[i-1]=t;} }
8.6 char concatenate(string1,string2,string);char string1[],string2[],string[];{ int i,j;for(i=0;string1[i]!=' ';i++)
string[i]=string1[i];for(j=0;string2[j]!=' ';j++)string[i+j]=string2[j];string[i+j]=' ';} main(){ char s1[100],s2[100],s[100];printf(“n输入字符串1:n”);scanf(“%s”,s1);printf(“输入字符串2:n”);scanf(“%s”,s2);concatenate(s1,s2,s);printf(“连接后的字符串:%sn”,s);}
8.8 main(){ char str[80];printf(“请输入含有四个数字的字符串:n”);scanf(“%s”,str);insert(str);}
insert(str)
char str[];{ int i;for(i=strlen(str);i>0;i--){ str[2*i]=str[i];
str[2*i-1]=' ';
} printf(“n 结果是:n
%s”,str);}
8.9 #include“math.h” int alph,digit,space,others;main(){char text[80];gets(text);alph=0,digit=0,space=0,others=0;count(text);printf(“nalph=%d,digit=%d,space=%d,others=%dn”,alph,digit,space,others);} count(str)char str[];{int i;for(i=0;str[i]!=' ';i++)
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
alph++;
else if(str[i]>='0'&&str[i]<='9')
digit++;
else if(strcmp(str[i],' ')==0)
space++;
else
others++;}
8.10 int alphabetic(c);char c;{
if((c>='a' && c<='z'||(c>='A' && c<='Z'))return(1);
else
return(0);}
int longest(string)char string[];{ int len=0,i,length=0,flag=1,place,point;for(i=0;i<=strlen(string);i++)
if(alphabctic(string[i]))if(flag){ point=i;flag=0;} else
len++;else { flag=1;
if len>length)
{length=len;
place=point;
len=0;
} }
return(place);
} main(){ int i;char line[100];
printf(“输入一行文本n”);gets(line);printf(“n最长的单词是:”);for(i=longest(line);alphabctic(line[i]);i++)printf(“%c”,line[i];printf(“n”);}
8.11
#include
#define N 10
char str[N];main(){ int i,flag;for(flag=1;flag==1;){ printf(“n输入字符串,长度为10:n”);scanf(“%s”,&str);if(strlen(str)>N)printf(“超过长度,请重输!”);else flag=0;} sort(str);printf(“n 排序结果:”);for(i=0;i printf(“%c”,str[i]);}
sort(str)char str[N];{ int i,j;char t;for(j=1;j for(i=0;(i if(str[i]>str[i+1])
{ t=str[i];
str[i]=str[i+1];
str[i+1]=t;
} } 8.12 #include
#include float solut(a,b,c,d)float a,b,c,d;
{float x=1,x0,f,f1;do
{x0=x;
f=((a*x0+b)*x0+c)*x0+d;
f1=(3*a*x0+2*b)*x0+c;
x=x0-f/f1;
} while(fabs(x-x0)>=1e-5);return(x);} main(){float a,b,c,d;scanf(“%f,%f,%f,%f”,&a,&b,&c,&d);printf(“x=%10.7fn”,solut(a,b,c,d));} 8.13 #include main(){int x,n;float p();scanf(“%d,%d”,&n,&x);printf(“P%d(%d)=%10.2fn”,n,x,p(n,x));} float p(tn,tx)int tn,tx;{if(tn==0)
return(1);else if(tn==1)
return(tx);else
return(((2*tn-1)*tx*p((tn-1),tx)-(tn-1)*p((tn-2),tx))/tn);} 8.14 #include “stdio.h”
#define N 10 #define M 5 float score[N][M];float a_stu[N],a_cor[M];main(){int i,j,r,c;float h;
float s_diff();float highest();r=0;c=1;input_stu();avr_stu();avr_cor();printf(“n number class 1 2 3 4 5 avr”);for(i=0;i
{printf(“nNO%2d”,i+1);
for(j=0;j
printf(“%8.2f”,score[i][j]);
printf(“%8.2f”,a_stu[i]);
} printf(“nclassavr”);for(j=0;j
printf(“%8.2f”,a_cor[j]);h=highest(&r,&c);printf(“nn%8.2f
%d
%dn”,h,r,c);printf(“n
%8.2fn”,s_diff());} input_stu(){int i,j;float x;for(i=0;i
{for(j=0;j
{scanf(“%f”,&x);
score[i][j]=x;
}
} } avr_stu(){int i,j;float s;for(i=0;i
{for(j=0,s=0;j
s+=score[i][j];
a_stu[i]=s/5.0;
} } avr_cor(){int i,j;float s;for(j=0;j
{for(i=0,s=0;i
s+=score[i][j];
a_cor[j]=s/(float)N;
} } float highest(r,c)int *r,*c;{float high;int i,j;
high=score[0][0];for(i=0;i
for(j=0;j
if(score[i][j]>high)
{high=score[i][j];
*r=i+1;
*c=j+1;
} return(high);} float s_diff(){int i,j;float sumx=0.0,sumxn=0.0;for(i=0;i
{sumx+=a_stu[i]*a_stu[i];
sumxn+=a_stu[i];
} return(sumx/N-(sumxn/N)*(sumxn/N));} 8.15
#include #define N 10 void input_e(num,name)int num[];char name[N][8];{int i;for(i=0;i
{scanf(“%d”,&num[i]);
gets(name[i]);
} } void sort(num,name)int num[];char name[N][8];{int i,j,min,temp1;char temp2[8];for(i=0;i
{min=i;
for(j=i;j
if(num[min]>num[j])min=j;
temp1=num[i];
num[i]=num[min];
num[min]=temp1;
strcpy(temp2,name[i]);
strcpy(name[i],name[min]);
strcpy(name[min],temp2);
} for(i=0;i
printf(“n%5d%10s”,num[i],name[i]);
} void search(n,num,name)int n,num[];char name[N][8];{int top,bott,min,loca;loca=0;top=0;bott=N-1;if((nnum[N-1]))
loca=-1;while((loca==0)&&(top<=bott))
{min=(bott+top)/2;
if(n==num[min])
{loca=min;
printf(“number=%d,name=%sn”,n,name[loca]);
}
else if(n
bott=min-1;
else
top=min+1;
} if(loca==0||loca==-1)
printf(“number=%d is not in tablen”,n);} main(){int num[N],number,flag,c,n;char name[N][8];input_e(num,name);sort(num,name);for(flag=1;flag;)
{scanf(“%d”,&number);
search(number,num,name);
printf(“continue?Y/N!”);
c=getchar();
if(c=='N'||c=='n')
flag=0;
} }
8.16 #include #define MAX 1000 main(){ int c,i,flag,flag1;
char t[MAX];
i=0;flag=0;flag1=1;printf(“n输入十六进制数:”);while((c=getchar())!=' '&&i { if c>='0' && c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')
{flag=1;
t[i++]=c;
}
else if(flag){ t[i]=' ';printf(“n 十进制数%dn”,htoi(t));printf(“继续吗?”);c=getchar();if(c=='N'||c=='n')
flag1=0;else {flag=0;
i=0;
printf(“n 输入十六进制数:”);} } } } htoi(s)char s[];{ int i,n;
n=0;
for(i=0;s[i]!=' ';i++)
{if(s[i]>='0'&&s[i]<='9')n=n*16+s[i]-'0';
if(s[i]>='a'&&s[i]<='f')n=n*16+s[i]-'a'+10;
if(s[i]>='A'&&s[i]<='F')n=n*16+s[i]-'A'+10;
}
return(n);}
8.17 #include
void counvert(n)int n;{ int i;if((i=n/10)!=0)
convert(i);putchar(n%10+'0');}
main(){ int number;
printf(“n 输入整数:”);
scanf(“%d”,&number);
printf(“n 输出是: ”);
if(number<0)
{ putchar('-');
number=-number;
} convert(number);}
8.18 main(){
int year,month,day;
int days;
printf(“n 请输入日期(年,月,日)n”);
scanf(“%d,%d,%d”,&year,&month,&day);
printf(“n %d年%d月%d日”,year,month,day);
days=sum_day(month,day);
if(leap(year)&&month>=3)
days=days+1;
printf(“是该年的%d天.n”,days);}
static int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}
int(sum_day(month,day)int month,day;
{
int i;
for(i=1;i
day+=day_tab[i];
return(day);
}
int leap(year)int year;
{
int leap;
leap=year%4==0&&year%100!=0||year%400==0;
return(leap);
第九章 编译预处理 9.1 #define SWAP(a,b)t=b;b=a;a=t main(){ int a,b,t;printf(“请输入两个整数 a,b:”);scanf(“%d,%d”,&a,&b);SWAP(a,b);printf(“交换结果为:a=%d,b=%dn”,a,b);}
9.2 #define SURPLUS(a,b)((a)%(b))main(){ int a,b;printf(“ 请输入两个整数 a,b:”);scanf(“%d,%d”,&a,&b);printf(“a,b相除的余数为:%dn”,SURPLUS(a,b));
}
9.3 #include #defin S(a,b,c)((a+b+c)/2)#define AREA(a,b,c)(sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(s(a,b,c)-c)))main(){ float a,b,c;
printf(“请输入三角形的三条边:”);
scanf(“%f,%f,%f”,&a,&b,&c);
if(a+b>c && a+c>b && b+c>a)
printf(“其面积为:%8.2f.n”,AREA(a,b,c));
else
printf(“不能构成三角形!”);}
9.4 #define LEAP_YEAR(y)(y%4==0)&&(y%100!=0)||(y%400==0)main(){ int year;printf(“n请输入某一年:”);scanf(“%d”,&year);if(LEAP_YEAR(year))
printf(“%d 是闰年.n”,year);else
printf(“%d 不是闰年.n”,year);}
9.5解:展开后: printf(“&#118alue=%formatt”,x);printf(“&#118alue=%formatt”,x);putchar('n');printf(“&#118alue=%formatt”);printf(“&#118alue=%formatt”,x2);putchar('n');输出结果: &#118alue=5.000000ormat &#118alue=5.000000ormat &#118alue=3.000000ormat &#118alue=8.000000ormat
9.8 main()
{
int a,b,c;
printf(“请输入三个整数:”);
scanf(“%d,%d,%d”,&a,&b,&c);
printf(“三个之中最大值为:%dn”,max(a,b,c));
}
max(x,y,z)int x,y,z;
{
int t;
t=(x>y? x:y);
return(t>z? t:z);
}
9.10 #include #define MAX 80 #define CHANGE 1 main(){ char str[MAX];int i;printf(“请输入文本行:n”);scanf(“%s”,str);
#if(CHANGE)
{
for(i=0;i {
if(str[i]!=' '
if(str[i]>='a' && str[i]<'z' || str[i]>='A'&&str[i]<'Z')
str[i]+=1;
else if(str[i]=='z' || str[i]=='Z')
str[i]-=25;
} } #endif printf(“输出电码为:n%s”,str);}
第十章
指针 10.1 main(){int n1,n2,n3;int *p1,*p2,*p3;scanf(“%d,%d,%d”,&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(n1>n2)swap(p1,p2);if(n1>n3)swap(p1,p3);if(n2>n3)swap(p2,p3);printf(“%d,%d,%dn”,n1,n2,n3);} swap(p1,p2)int *p1,*p2;{int p;p=*p1;*p1=*p2;*p2=p;} 10.2 main(){char *str1[20],*str2[20],*str3[20];char swap();scanf(“%s”,str1);scanf(“%s”,str2);scanf(“%s”,str3);if(strcmp(str1,str2)>0)swap(str1,str2);if(strcmp(str1,str3)>0)swap(str1,str3);if(strcmp(str2,str3)>0)swap(str2,str3);
printf(“%sn%sn%sn”,str1,str2,str3);} char swap(p1,p2)char *p1,*p2;{char *p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);} 10.3 main(){int number[10];input(number);max_min_&#118alue(number);output(number);} input(number)int number[10];{int i;for(i=0;i<10;i++)
scanf(“%d”,&number[i]);} max_min_&#118alue(number)int number[10];{int *max,*min;int *p,*end;end=number+10;max=min=number;for(p=number+1;p
if(*p>*max)max=p;
else if(*p<*min)min=p;*p=number[0];number[0]=*min;*min=*p;*p=number[9];number[9]=*max;*max=*p;return;} output(number)int number[10];{int *p;for(p=number;p
printf(“%d,”,*p);printf(“%dn”,*p);
} 10.4 main(){int number[20],n,m,i;scanf(“%d”,&n);scanf(“%d”,&m);for(i=0;i
scanf(“%d”,&number[i]);move(number,n,m);for(i=0;i
printf(“%8d”,number[i]);} move(array,n,m)int array[20],n,m;{int *p,end;end=*(array+n-1);for(p=array+n-1;p>array;p--)
*p=*(p-1);*array=end;m--;if(m>0)move(array,n,m);} 10.5 #define nmax 50 main(){int i,k,m,n,num[nmax],*p;scanf(“%d”,&n);p=num;for(i=0;i
*(p+i)=i+1;i=k=m=0;while(m
{if(*(p+i)!=0)k++;
if(k==3)
{*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n)i=0;
} while(*p==0)p++;printf(“%d”,*p);} 10.6
main(){int len;char *str[20];scanf(“%s”,str);len=length(str);printf(“nlen=%dn”,len);} length(p)char *p;{int n=0;while(*p!=' ')
{n++;p++;} return(n);} 10.7 main(){int m;char *str1[20],*str2[20];scanf(“%s”,str1);scanf(“%d”,&m);if(strlen(str1)
printf(“error”);else
{copystr(str1,str2,m);
printf(“%s”,str2);
} } copystr(p1,p2,m)char *p1,*p2;int m;{int n=0;while(n
{n++;p1++;} while(*p1!=' ')
{*p2=*p1;
p1++;
p2++;
} *p2=' ';} 10.8 #include“stdio.h” main(){int cle=0,sle=0,di=0,wsp=0,ot=0,i;
char *p,s[20];for(i=0;i<20;i++)s[i]=0;i=0;while((s[i]=getchar())!='n')i++;p=s;while(*p!='n')
{if(*p>='a'&&*p<='z')
++sle;
else if(*p>='A'&&*p<='Z')
++cle;
else if(*p==' ')
++wsp;
else if(*p>='0'&&*p<='9')
++di;
else
++ot;
p++;
} printf(“sle=%d,cle=%d,wsp=%d,di=%d,ot=%dn”,sle,cle,wsp,di,ot);} 10.9 main(){int a[3][3],*p,i;for(i=0;i<3;i++)
scanf(“%d,%d,%d”,a[i][0],a[i][1],a[i][2]);p=a;move(p);for(i=0;i<3;i++)
printf(“%d %d %dn”,a[i][0],a[i][1],a[i][2]);} move(pointer)int *pointer;{int i,j,t;for(i=0;i<2;i++)for(j=i+1;j<3;j++)
{t=*(pointer+3*i+j);
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
} }
10.10 main()
{int a[5][5],*p,i,j;for(i=0;i<5;i++)for(j=0;j<5;j++)
scanf(“%d”,&a[i][j]);p=a;change(p);for(i=0;i<5;i++)
{printf(“n”);
for(j=0;j<5;j++)
printf(“%8d”,a[i][j]);
} } change(p)int *p;{int i,j,change;int *pmax,*pmin;pmax=p;pmin=p;for(i=0;i<5;i++)
for(j=0;j<5;j++)
{if(*pmax<*(p+5*i+j))pmax=p+5*i+j;
if(*pmin>*(p+5*i+j))pmin=p+5*i+j;
} change=*(p+12);*(p+12)=*pmax;*pmax=change;change=*p;*p=*pmin;*pmin=change;pmin=p+1;for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j;change=*(p+4);*(p+4)=*pmin;*pmin=change;pmin=p+1;for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))
pmin=p+5*i+j;change=*(p+20);*(p+20)=*pmin;*pmin=change;
pmin=p+1;for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))
&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j;change=*(p+24);*(p+24)=*pmin;*pmin=change;}
10.11 main(){int i;char *p,str[10][10];for(i=0;i<10;i++)
scanf(“%s”,str[i]);p=str;sort(p);for(i=0;i<10;i++)
printf(“%sn”,str[i]);} sort(p)char *p;{int i,j;char s[10],*smax,*smin;for(i=0;i<10;i++)
{smax=p+10*i;
for(j=i+1;j<10;j++)
{smin=p+10*j;
if(strcmp(smax,smin)>0)
{strcpy(s,smin);
strcpy(smin,smax);
strcpy(smax,s);
}
}
} }
10.12 #define MAX 20 main(){int i;char *pstr[10],str[10][MAX];for(i=0;i<10;i++)
pstr[i]=str[i];for(i=0;i<10;i++)
scanf(“%s”,pstr[i]);sort(pstr);for(i=0;i<10;i++)
printf(“%sn”,pstr[i]);} sort(pstr)char *pstr[10];{int i,j;char *p;for(i=0;i<10;i++)
{for(j=i+1;j<10;j++)
{if(strcmp(*(pstr+i),*(pstr+j))>0)
{p=*(pstr+i);
*(pstr+i)=*(pstr+j);
*(pstr+j)=p;
}
}
} }
10.13 #include“math.h” main(){int n=20;float a,b,a1,b1,a2,b2,c,(*p)(),jiff();scanf(“%f,%f”,&a,&b);scanf(“%f,%f”,&a1,&b1);scanf(“%f,%f”,&a2,&b2);p=sin;c=jiff(a,b,n,p);printf(“sin=%fn”,c);p=cos;c=jiff(a1,b1,n,p);printf(“cos=%fn”,c);p=exp;c=jiff(a2,b2,n,p);printf(“exp=%fn”,c);} float jiff(a,b,n,p)float a,b,(*p)();int n;{int i;
float x,f,h,area;h=(b-a)/n;x=a;area=0;for(i=1;i<=n;i++)
{x=x+h;
area=area+(*p)(x)*h;
} return(area);}
10.14 main(){int i,n,num[20];char *p;scanf(“%d”,&n);for(i=0;i
scanf(“%d”,&num[i]);p=num;sort(p,n);for(i=0;i
printf(“%8d”,num[i]);} sort(p,m)char *p;int m;{int i;char change,*p1,*p2;for(i=0;i
{p1=p+i;
p2=p+(m-1-i);
change=*p1;
*p1=*p2;
*p2=change;
} }
10.15 main(){int i,j,*pnum,num[4];float score[4][5],aver[4],*psco,*pave;char course[5][10],*pcou;pcou=course[0];for(i=0;i<5;i++)
scanf(“%s”,pcou+10*i);printf(“number”);for(i=0;i<5;i++)
第二篇:谭浩强C语言第八章答案.doc(范文模版)
8.1 # include
int a,b,Y,B;printf(“输入两个数字:n”);scanf(“%d%d”,&a,&b);Y=yueshu(a,b);B=beishu(a,b);printf(“最大公约数为Y=%dn最小公倍数为B=%dn”,Y,B);} int yueshu(int m,int n){
} int r,t;if(m } r=m%n;if(r==0)break;else { m=n;n=r;} return n;int beishu(int m,int n){ } 8.2 # include int c;c=m*n/yueshu(m,n);return c; int x1,x2; x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a);printf(“%fn%fn”,x1,x2);return 0;} float gen2(int a,int b,int c){ int x;x=-b/(2*a);printf(“%fn”,x);return x;} float gen3(int a,int b,int c){ } printf(“无实根;n”);return 0;float function(int a,int b,int c){ float x,y;y=a*x*x+b*x+c;return y;} void main(){ int x,a,b,c,y;printf(“请输入系数:n”); } 8.3 # include int sushu(int x);void main(){ int y;printf(“请输入要判断的数字:n”);scanf(“%d”,&y);sushu(y);} int sushu(int x){ } 8.4 # include } void zhuanzhi(int b[3][3]){ int i;float k;k=sqrt(x);for(i=2;i<=k;i++)if(x%i==0)break; if(i>k+1)printf(“%d就是素数!”,x);else printf(“%d不是素数n”,x);int a[3][3]={0};int i,j;printf(“请输入三维数组:n”);for(i=0;i<3;i++)for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);zhuanzhi(a);int i,j;for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf(“%2d”,b[j][i]); } 8.5 } } printf(“n”);# include char b[50];printf(“请输入字符串:n”);gets(b);fanxu(b);printf(“n”);} void fanxu(char a[50]){ int i;for(i=strlen(a);i>=0;i--) printf(“%c”,a[i]);} 8.6 # include lianjie(a,b);} { printf(“n”);void lianjie(char a1[20],char a2[20])int m,n,i;char a3[50];m=strlen(a1);n=strlen(a2);for(i=0;i } for(i=0;i a3[m+n]=' ';for(i=0;i printf(“%c”,a3[i]);8.7 # include char a1[50];printf(“请输入一字符串:n”);gets(a1);yuanyin(a1);} void yuanyin(char b[30]){ } 8.8 # include int i,j=0;char c1[20]={0},c2[20]={0};for(i=0;i if(b[i]=='a'||b[i]=='e'||b[i]=='i'||b[i]=='o'||b[i]=='u' ||b[i]=='A'||b[i]=='E'||b[i]=='I'||b[i]=='O'||b[i]=='U') { c1[j]=b[i]; j++;} // c1[j+1]=' '; strcpy(c2,c1);for(i=0;i kong(a);printf(“n”);} void kong(int b[4]){ } 8.9 # include } printf(“%d”,b[i]);printf(“ ”);gets(a);tongji(a);} void tongji(char b[50]){ int i;int d=0,x=0,s=0,k=0,q=0;for(i=0;i if(b[i]>='A'&&b[i]<='Z')d++;else if(b[i]>='a'&&b[i]<='z')x++;else if(b[i]>='0'&&b[i]<='9')s++;else if(b[i]==' ')k++;else q++;} printf(“大写%d个n小写%d个n数字%d个n空格%d个n其他%d个n”,d,x,s,k,q);} 8.10 # include # include } void danci(char str1[100],char w0[15]){ } int i=0,j=0,t=0;char w1[15];for(i=0;i if(!((str1[i]>='a'&&str1[i]<='z')||(str1[i]>='A'&&str1[i]<='Z'))){ t=i;i=0;continue;gets(a);danci(a,b); } w1[j]=str1[i];j++;if(j>=t)strcpy(w0,w1);} puts(w0);8.11 # include int b[10]={0},i;printf(“请输入十个数字:n”);for(i=0;i<10;i++)scanf(“%d”,&b[i]);maopao(b);printf(“所排顺序为:”); for(i=0;i<10;i++)printf(“%-3d”,b[i]);printf(“n”); } void maopao(int a[10]){ } int i,j,t;for(j=1;j<9;j++){ for(i=0;i<9-j;i++) } { } if(a[i]>a[i+1]){ t=a[i];a[i]=a[i+1];a[i+1]=t;} 8.12 # include void main(){ } void ND(int a,int b,int c,int d){ int p,q,r,s; printf(“请输入系数:n”);scanf(“%d%d%d%d”,&p,&q,&r,&s);printf(“方程为:%dX^3+%dX^2+%dX+%d=0n”,p,q,r,s);ND(p,q,r,s); float x=1,x0,x1;do { x1=x; x0=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);x=x0;}while(fabs(x1-x0)>1e-6);printf(“%fn”,x0); } 8.13 # include } float lerangde(float x1,int n){ if(n==0||n==1) } { if(n==0) return 1;else return x1;} else return((2*n-1)*x1-lerangde(x1,n-1)-(n-1)*lerangde(x1,n-2))/n;float x,y;int m;printf(“请输入x以及阶数m:n”);scanf(“%f%d”,&x,&m);y=lerangde(x,m);printf(“勒让德多项式值为:%-f”,y);putchar(10); 8.14# include //调用函数; void main(){ int a[2][3]={0};int i,j;printf(“输入学生以及对应的成绩:n”);for(i=0;i scanf(“%d”,&a[i][j]); stu_average(a);sourse_average(a);max(a);average(a);printf(“每个学生的平均分为:%fn”,stu_average(a)); } //计算每个学生平均成绩; float stu_average(int a[M][N]){ int i,j,sum=0;float x1;for(i=0;i for(j=0;j return x1;} //课程平均成绩; void sourse_average(int a[M][N]){ int sum=0,i,j;float x1;for(i=0;i { } sum=sum+a[i][j];x1=(float)(sum/N);printf(“每门课程的平均分为:%fn”,x1); } //最高分; void max(int a[M][N]){ int max=a[0][0],t,s,k,i,j;for(i=0;i for(j=0;j } if(max } max=a[i][j];a[i][j]=t;s=i+1;k=j+1;printf(“%d %d %dn”,max,s,k); } 8.15# include } shuru();printf(“排好顺序为:n”);paixu();found();void shuru(){ int i;printf(“请输入职工姓名以及工号:n”); } void paixu(){ for(i=0;i<4;i++)scanf(“%s%d”,m[i],&n[i]);for(i=0;i<4;i++)printf(“%s的工号是:%dn”,m[i],n[i]);int i,t,j;char c[20];for(j=0;j<=3;j++){ for(i=0;i<3-j;i++){ } } } if(n[i]>n[i+1]){ } t=n[i];n[i]=n[i+1];n[i+1]=t; strcpy(c,*m[i]);strcpy(*m[i],*m[i+1]);strcpy(*m[i+1],c);for(i=0;i<4;i++)printf(“%st%dn”,m[i],n[i]); void found(){ int p,i,j,flag=0,mid; printf(“输入要查找的职工号:n”);scanf(“%d”,&p);i=0;j=3;while(i<=j){ } mid=(i+j)/2;if(p==n[mid]){ flag=1;break;} else { } if(p>n[mid])j=mid-1;else i=mid+1; if(flag==1) printf(“找到了,名字是%sn”,m[mid]); else printf(“无此人!n”); } 8.16 # include char a[20]={0},c[20],b[20];int i,j,m,n,y;printf(“请输入十六进制数字:n”);gets(a);n=strlen(a);m=strlen(c);for(i=0;i<20;i++){ if(a[i]<='9')a[i]=a[i]-48;else if(a[i]<='F')a[i]=a[i]-55;else { a[i]=a[i]-87;} } for(i=0;i } for(i=0;i<20;i++){ int k;c[0]=c[0]*16+a[i];for(k=1;k<=m;k++)c[k]=c[k]*16;y=0;y=a[i];for(j=3;j>=0;j--){ } b[i*4+j]=y%2;y=y/2; } for(k=0;k<=m;k++){ } while(y>0){ } m++;c[m]=y%10;y=y/10;y=y+c[k];c[k]=y%10;y=y/10;for(i=m;i>=0;i--)printf(“%d”,c[i]);getchar();} 8.17 # include } scanf(“%d”,&n);F(n);putchar(10);void F(int m){ int j;if(m>=0&&m<=9)printf(“%d”,m);else { } j=m%10;F(m/10); printf(“%d”,j);} 8.18 # include void DJT(int y,int m,int d);int leap(int year);void main(){ int year,month,day;printf(“请输入年-月-日:n”); } int leap(int year){ } int flag=0;if(year%4==0){ if(year%100==0){ if(year%400==0)flag=1;else flag=0;scanf(“%d%d%d”,&year,&month,&day);DJT(year,month,day); } else flag=1;} else flag=0;return flag; void DJT(int y,int m,int d){ int p=0;int r=0;if(leap(y))r=29;else r=28;switch(m){ case 1:p=d;break;case 2:p=31+d;break;case 3:p=31+r+d;break;case 4:p=31+r+31+d;break;case 5:p=31+r+31+30+d;break;case 6:p=31+r+31+30+31+d;break; } case 7:p=31+r+31+30+31+30+d;break;case 8:p=31+r+31+30+31+30+31+d;break;case 9:p=31+r+31+30+31+30+31+31+d;break;case 10:p=31+r+31+30+31+30+31+31+30+d;break;case 11:p=31+r+31+30+31+30+31+31+30+31+d;break;case 12:p=31+r+31+30+31+30+31+31+30+31+30+d;break;default :;} printf(“这是%d年的第%d天n”,y,p); 第一章 程序设计和C语言 【第15页】 1-5 #include printf(“ Very Good!nn”); printf(“**************************n”); return 0;} 1-6 #include max=b;if(max max=c;printf(“The largest number is %dn”,max);return 0;} 第2章算法——程序的灵魂 【第36页】暂无答案 第3章最简单的C程序设计——顺序程序设计 【第82页】 3-1 #include printf(“p=%fn”,p);return 0;} 3-2-1 #include // 一次存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方案得到的本息和 printf(“p2=%fn”,p2); // 输出按第2方案得到的本息和 printf(“p3=%fn”,p3); // 输出按第3方案得到的本息和 printf(“p4=%fn”,p4); // 输出按第4方案得到的本息和 printf(“p5=%fn”,p5); // 输出按第5方案得到的本息和 return 0;} 3-2-2 #include // 一次存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方案得到的本息和 printf(“p2=%fn”,p2); // 输出按第2方案得到的本息和 printf(“p3=%fn”,p3); // 输出按第3方案得到的本息和 printf(“p4=%fn”,p4); // 输出按第4方案得到的本息和 printf(“p5=%fn”,p5); // 输出按第5方案得到的本息和 return 0;} 3-2-3 #include // 一次存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方案得到的本息和 printf(“p3=%10.2fn”,p3); // 输出按第3方案得到的本息和 printf(“p4=%10.2fn”,p4); // 输出按第4方案得到的本息和 printf(“p5=%10.2fn”,p5); // 输出按第5方案得到的本息和 return 0;} 3-3.#include //要求输入圆半径r和圆柱高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.2fn”,l);printf(“圆面积为: s=%6.2fn”,s); printf(“圆球表面积为: sq=%6.2fn”,sq);printf(“圆球体积为: v=%6.2fn”,vq);printf(“圆柱体积为: vz=%6.2fn”,vz);return 0;} 3-8-1 #include int c1,c2; //整型定义 printf(“请输入两个整数c1,c2:”); scanf(“%d,%d”,&c1,&c2); printf(“按字符输出结果:n”); printf(“%c,%cn”,c1,c2); printf(“按ASCII码输出结果为:n”); printf(“%d,%dn”,c1,c2); return 0;} 3-8-2 #include char c1,c2; //定义字符型变量 int i1,i2; printf(“请输入两个字符c1,c2:”); scanf(“%c,%c”,&c1,&c2); i1=c1; i2=c2; printf(“按字符输出结果:n”); printf(“%c,%cn”,i1,i2); printf(“按整数输出结果:n”); printf(“%d,%dn”,c1,c2); return 0;} 3-8-3 #include char c1,c2; int i1,i2; printf(“请输入两个整数i1,i2:”); scanf(“%d,%d”,&i1,&i2); c1=i1; c2=i2; printf(“按字符输出结果:n”); printf(“%c,%cn”,c1,c2); printf(“按整数输出结果:n”); printf(“%d,%dn”,c1,c2); return 0;} 3-8 #include //定义整型变量 //赋值给整型变量 //定义为字符型 //定义为整型 //将整数赋值给字符变量 printf(“用putchar语句输出结果为:”);putchar(c1);putchar(c2);printf(“n”);printf(“用printf语句输出结果为:”);printf(“%c %cn”,c1,c2);return 0;} 第4章选择结构程序设计【第111页】 4-4-1 #include int a,b,c; printf(“请输入三个整数:”); scanf(“%d,%d,%d”,&a,&b,&c); if(a if(b printf(“max=%dn”,c); else printf(“max=%dn”,b); else if(a printf(“max=%dn”,c); else printf(“max=%dn”,a); return 0;} 4-4-2 #include 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(“三个整数的最大数是%dn”,max); return 0;} 4-5-2 #include 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的平方根的整数部分是:%dn”,i,k); return 0;} 4-5 #include 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的平方根的整数部分是:%dn”,i,k); return 0;} 4-6.#include printf(“输入x:”); scanf(“%d”,&x); if(x<1) /* x<1 */ { y=x; printf(“x=%3d,y=x=%dn” ,x,y); } else if(x<10) /* 1= printf(“x=%d, y=2*x-1=%dn”,x,y);} else /* x>=10 */ { y=3*x-11; printf(“x=%d, y=3*x-11=%dn”,x,y);} return 0;} 4-7-1 #include 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=%dn”,x,y);return 0;} 4-7-2 #include int x,y; printf(“please enter x:”); scanf(“%d”,&x); y=0; if(x>=0) if(x>0)y=1; else y=-1; printf(“x=%d,y=%dn”,x,y);return 0;} 4-8 #include { float score; char grade; printf(“请输入学生成绩:”); scanf(“%f”,&score); while(score>100||score<0){printf(“n 输入有误,请重输”);scanf(“%f”,&score);} switch((int)(score/10)) {case 10: 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,相应的等级是%cn ”,score,grade);return 0;} 4-9 #include 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(“位数:%dn”,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); switch(place) {case 5:printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,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反序数字为:”); 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;} 4-10-1 #include int i; double bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+100000*0.05; bon6=bon4+100000*0.03; bon10=bon6+400000*0.015; printf(“请输入利润i:”); scanf(“%d”,&i); if(i<=100000) bonus=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.2fn”,bonus); return 0;} 4-10-2 #include 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(“请输入利润i:”); scanf(“%d”,&i); branch=i/100000; 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)*0.015;break; case 10: bonus=bon10+(i-1000000)*0.01; } printf(“奖金是 %10.2fn”,bonus); return 0;} 4-11 #include printf(“请输入四个数:”); scanf(“%d,%d,%d,%d”,&a,&b,&c,&d); printf(“a=%d,b=%d,c=%d,d=%dn”,a,b,c,d); if(a>b) { t=a;a=b;b=t;} if(a>c) { 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;} 4-12 #include 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”,&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;/*判断该点是否在塔外*/ printf(“该点高度为 %dn”,h); return 0;} 第5章循环结构程序设计【第140页】 5-2 #include // 程序中用到数学函数fabs,应包含头文件math.n int 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) // 检查当前项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,才是π的近似值 printf(“pi=%10.8fn”,pi); // 输出π的近似值 printf(“count=%dn”,count); // 输出循环次数 return 0;} 5-3 #include int p,r,n,m,temp; printf(“请输入两个正整数n,m:”); scanf(“%d,%d,”,&n,&m); if(n { temp=n; n=m; m=temp; } p=n*m; while(m!=0) { r=n%m; n=m; m=r; } printf(“它们的最大公约数为:%dn”,n); printf(“它们的最小公约数为:%dn”,p/n); return 0;} 5-4 #include char c; int letters=0,space=0,digit=0,other=0; printf(“请输入一行字符:n”); while((c=getchar())!='n') { if(c>='a' && c<='z' || c>='A' && c<='Z') letters++; else if(c==' ') space++; else if(c>='0' && c<='9') digit++; else other++; } printf(“字母数:%dn空格数:%dn数字数:%dn其它字符数:%dn”,letters,space,digit,other); return 0; } 5-5 #include int a,n,i=1,sn=0,tn=0; printf(“a,n=:”); scanf(“%d,%d”,&a,&n); while(i<=n) { tn=tn+a;/*赋值后的tn为i个 a组成数的值*/ sn=sn+tn;/*赋值后的sn为多项式前i项之和*/ a=a*10; ++i; } printf(“a+aa+aaa+...=%dn”,sn); return 0; } 5-6 #include {double s=0,t=1; int n; for(n=1;n<=20;n++) { t=t*n; s=s+t; } printf(“1!+2!+...+20!=%22.15en”,s); return 0;} 5-7 #include int n1=100,n2=50,n3=10; double k,s1=0,s2=0,s3=0; for(k=1;k<=n1;k++)/*计算1到100的和*/ {s1=s1+k;} for(k=1;k<=n2;k++)/*计算1到50各数的平方和*/ {s2=s2+k*k;} for(k=1;k<=n3;k++)/*计算1到10的各倒数和*/ {s3=s3+1/k;} printf(“sum=%15.6fn”,s1+s2+s3); return 0;} 5-8 #include int i,j,k,n; printf(“parcissus numbers are ”); for(n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i + j*j*j + k*k*k) printf(“%d ”,n); } printf(“n”); return 0; } 5-9-1 #define M 1000 /*定义寻找范围*/ #include int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10; int i,a,n,s; for(a=2;a<=M;a++) /* a是2-1000之间的整数,检查它是否完数 */ {n=0; /* n用来累计a的因子的个数 */ s=a; /* s用来存放尚未求出的因子之和,开始时等于a */ for(i=1;i /* 检查i是否a的因子 */ if(a%i==0) /* 如果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: 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: 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个因子,故应再输出一个因子 */ 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;} 5-9-2 #include for(m=2;m<1000;m++) {s=0; for(i=1;i if((m%i)==0)s=s+i; if(s==m) {printf(“%d,its factors are ”,m); for(i=1;i if(m%i==0)printf(“%d ”,i); printf(“n”); } } return 0;} 5-10 #include int i,n=20; double a=2,b=1,s=0,t; for(i=1;i<=n;i++) { s=s+a/b; t=a,a=a+b,b=t; } printf(“sum=%16.10fn”,s); return 0; } 5-11 #include double sn=100,hn=sn/2; int n; for(n=2;n<=10;n++) { sn=sn+2*hn; /*第n次落地时共经过的米数*/ hn=hn/2; /*第n次反跳高度*/ } printf(“第10次落地时共经过%f米n”,sn); printf(“第10次反弹%f米n”,hn); return 0; } 5-12 #include int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/ x2=x1; day--; } printf(“total=%dn”,x1); return 0;} 5-13 #include float a,x0,x1; printf(“enter a positive number:”); scanf(“%f”,&a); x0=a/2; x1=(x0+a/x0)/2; do {x0=x1; x1=(x0+a/x0)/2; }while(fabs(x0-x1)>=1e-5); printf(“The square root of %5.2f is %8.5fn”,a,x1); return 0;} 5-14 #include x1=1.5; do {x0=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;} 5-15 #include do {printf(“enter x1 & x2:”); scanf(“%f,%f”,&x1,&x2); fx1=x1*((2*x1-4)*x1+3)-6; fx2=x2*((2*x2-4)*x2+3)-6; }while(fx1*fx2>0); do {x0=(x1+x2)/2; fx0=x0*((2*x0-4)*x0+3)-6; if((fx0*fx1)<0) {x2=x0; fx2=fx0; } else {x1=x0; fx1=fx0; } }while(fabs(fx0)>=1e-5); printf(“x=%6.2fn”,x0); return 0;} 5-16 #include 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”); } return 0; } 5-17 #include int main(){ char i,j,k; /*是a的对手;j是b的对手;k是c的对手*/ 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(“A--%cnB--%cnC--%cn”,i,j,k); return 0; } 第6章利用数组处理批量数据 【第168页】 6-1 #include for(i=1;i<=100;i++) a[i]=i; a[1]=0; for(i=2;i for(j=i+1;j<=100;j++) {if(a[i]!=0 && a[j]!=0) if(a[j]%a[i]==0) a[j]=0; } printf(“n”); for(i=2,n=0;i<=100;i++) { if(a[i]!=0) {printf(“%5d”,a[i]); n++; } if(n==10) {printf(“n”); n=0; } } printf(“n”); return 0;} 6-2 #include printf(“enter data:n”); for(i=1;i<=10;i++) {printf(“a[%d]=”,i); scanf(“%d”,&a[i]); } printf(“n”); printf(“The orginal numbers:n”); for(i=1;i<=10;i++) printf(“%5d”,a[i]); printf(“n”); for(i=1;i<=9;i++) {min=i; for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf(“nThe sorted numbers:n”); for(i=1;i<=10;i++) printf(“%5d”,a[i]); printf(“n”); return 0;} 6-3 #include printf(“enter data:n”); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(“%3d”,&a[i][j]); for(i=0;i<3;i++) sum=sum+a[i][i]; printf(“sum=%6dn”,sum); return 0;} 6-4 #include int temp1,temp2,number,end,i,j; printf(“array a:n”); for(i=0;i<10;i++) printf(“%5d”,a[i]); printf(“n”); printf(“insert data:”); scanf(“%d”,&number); end=a[9]; if(number>end) a[10]=number; else {for(i=0;i<10;i++) {if(a[i]>number) {temp1=a[i];a[i]=number;for(j=i+1;j<11;j++) {temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } printf(“Now array a:n”); for(i=0;i<11;i++) printf(“%5d”,a[i]); printf(“n”); return 0;} 6-5 #include printf(“enter array a:n”); for(i=0;i scanf(“%d”,&a[i]); printf(“array a:n”); for(i=0;i printf(“%4d”,a[i]); for(i=0;i //循环的作用是将对称的元素的值互换 { temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } printf(“nNow,array a:n”); for(i=0;i printf(“%4d”,a[i]); printf(“n”); return 0;} 6-6 #include for(i=0;i {a[i][i]=1; a[i][0]=1; } for(i=2;i for(j=1;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i {for(j=0;j<=i;j++) printf(“%6d”,a[i][j]); printf(“n”); } printf(“n”); return 0;} 6-7 #include p=1; while(p==1) {printf(“enter n(n=1--15):”); scanf(“%d”,&n); if((n!=0)&&(n<=15)&&(n%2!=0)) p=0; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=0; j=n/2+1; a[1][j]=1; for(k=2;k<=n*n;k++) {i=i-1; j=j+1; if((i<1)&&(j>n)) {i=i+2; j=j-1; } else {if(i<1)i=n; if(j>n)j=1; } if(a[i][j]==0) a[i][j]=k; else {i=i+2; j=j-1; a[i][j]=k; } } for(i=1;i<=n;i++) {for(j=1;j<=n;j++) printf(“%5d”,a[i][j]); printf(“n”); } return 0;} 6-8 #include /* 数组为4行5列 */ int main(){ int i,j,k,a[N][M],max,maxj,flag; printf(“please input matrix:n”); for(i=0;i /* 输入数组 */ for(j=0;j scanf(“%d”,&a[i][j]); for(i=0;i {max=a[i][0]; /* 开始时假设a[i][0]最大 */ maxj=0; /* 将列号0赋给maxj保存 */ for(j=0;j /* 找出第i行中的最大数 */ if(a[i][j]>max) {max=a[i][j]; /* 将本行的最大数存放在max中 */ maxj=j; /* 将最大数所在的列号存放在maxj中 */ } flag=1; /* 先假设是鞍点,以flag为1代表 */ for(k=0;k if(max>a[k][maxj]) /* 将最大数和其同列元素相比 */ {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;} 6-9 #include char c; printf(“enter data:n”); scanf(“%d”,&a[0]); i=1; while(i {scanf(“%d”,&a[i]); if(a[i]>=a[i-1]) i++; else printf(“enter this data again:n”); } printf(“n”); for(i=0;i printf(“%5d”,a[i]); printf(“n”); while(flag) {printf(“input number to look for:”); scanf(“%d”,&number); sign=0; top=0; //top是查找区间的起始位置 bott=N-1; //bott是查找区间的最末位置 if((numbera[N-1]))//要查的数不在查找区间内 loca=-1; // 表示找不到 while((!sign)&&(top<=bott)) {mid=(bott+top)/2; if(number==a[mid]) {loca=mid; printf(“Has found %d, its position is %dn”,number,loca+1); sign=1; }第三篇:C语言程序设计(谭浩强)第四版_课后答案精讲