C语言设计谭浩强第三版的课后习题答案[范文大全]

时间:2019-05-11 22:55:27下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言设计谭浩强第三版的课后习题答案》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言设计谭浩强第三版的课后习题答案》。

第一篇: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 yueshu(int m,int n);int beishu(int m,int n);int main(){

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 float gen1(int a,int b,int c){

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 # include scanf(“%d%d%d”,&a,&b,&c);if(b*b-4*a*c>0){ printf(“根为:%f%f”,gen1(a,b,c));} if(b*b-4*a*c==0){ printf(“根为:%f”,gen2(a,b,c));} if(b*b-4*a*c<0){ } printf(“根为:”,gen3(a,b,c));

int sushu(int x);void main(){ int y;printf(“请输入要判断的数字:n”);scanf(“%d”,&y);sushu(y);} int sushu(int x){

} 8.4 # include void zhuanzhi(b);void main(){

}

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 # include void fanxu(char a[50]);void main(){

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 # include void lianjie(char a1[20],char a2[20]);void main(){ char a[20]={0},b[20]={0};printf(“输入两个字符串:n”);gets(a);gets(b);

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 # include void yuanyin(char b[30]);void main(){

char a1[50];printf(“请输入一字符串:n”);gets(a1);yuanyin(a1);} void yuanyin(char b[30]){

} 8.8 # include void kong(int b[4]);void main(){

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 # include void tongji(char b[50]);void main(){ char a[50]={0};printf(“输入一串字符:n”);int i;for(i=0;i<4;i++){

} 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]);void main(){ char a[50]={0},b[15]={0};printf(“输入一串字符:n”);

}

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 void maopao(int a[10]);void main(){

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 # include void ND(int a,int b,int c,int d);

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 x,int n);void main(){

}

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 # define M 2 # define N 3 float stu_average(int a[M][N]);void sourse_average(int a[M][N]);void max(int a[M][N]);float average(int a[M][N]);

//调用函数; 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 # include char m[4][80];int n[4];void shuru();void paixu();void found();void main(){

} 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 # include void main(){

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 void F(int m);void main(){ int n;printf(“输入数字:n”);

} 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语言程序设计(谭浩强)第四版_课后答案精讲

第一章 程序设计和C语言 【第15页】 1-5

#include int main(){ printf(“**************************nn”);

printf(“

Very Good!nn”);

printf(“**************************n”);

return 0;} 1-6 #include int main(){int a,b,c,max;printf(“please input a,b,c:n”);scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(max

max=b;if(max

max=c;printf(“The largest number is %dn”,max);return 0;} 第2章算法——程序的灵魂 【第36页】暂无答案

第3章最简单的C程序设计——顺序程序设计 【第82页】 3-1

#include #include int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);

printf(“p=%fn”,p);return 0;} 3-2-1 #include #include int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;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);

// 存活期存款。活期利息每一季度结算一次

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 #include int main(){double r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;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);

// 存活期存款。活期利息每一季度结算一次

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 #include int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;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);

// 存活期存款。活期利息每一季度结算一次

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 #include int main(){float d=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r))/log10(1+r);printf(“m=%6.2fn”,m);return 0;} 3-4 #include int main(){int c1,c2;c1=197;c2=198;printf(“c1=%c,c2=%cn”,c1,c2);printf(“c1=%d,c2=%dn”,c1,c2);return 0;} 3-5 #include int main(){int a,b;float x,y;char c1,c2;scanf(“a=%d b=%d”,&a,&b);scanf(“%f %e”,&x,&y);scanf(“%c%c”,&c1,&c2);printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn”,a,b,x,y,c1,c2);return 0;} 3-6 #include int main(){char 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(“passwor is %c%c%c%c%cn”,c1,c2,c3,c4,c5);return 0;} 3-7 #include int main(){float h,r,l,s,sq,vq,vz;float pi=3.141526;printf(“请输入圆半径r,圆柱高h∶”);scanf(“%f,%f”,&r,&h);

//要求输入圆半径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 main(){

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 int main(){

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 int main(){

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 int main(){ char c1,c2;printf(“请输入两个字符c1,c2:”);c1=getchar();c2=getchar();

//定义整型变量

//赋值给整型变量

//定义为字符型

//定义为整型

//将整数赋值给字符变量

printf(“用putchar语句输出结果为:”);putchar(c1);putchar(c2);printf(“n”);printf(“用printf语句输出结果为:”);printf(“%c %cn”,c1,c2);return 0;} 第4章选择结构程序设计【第111页】 4-4-1 #include int 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);

return 0;} 4-4-2 #include int main(){ 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(“三个整数的最大数是%dn”,max);

return 0;} 4-5-2 #include #include #define M 1000 int main(){

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 #include #define M 1000 int main(){

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 int main(){ int x,y;

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 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=%dn”,x,y);return 0;} 4-7-2 #include int main(){

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 int main()

{ 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 #include int main(){

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 main(){

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 main(){

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 int main(){int t,a,b,c,d;

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 main(){

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 #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 main(){

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 int main(){

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 main(){

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 int main()

{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 main(){

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 main(){

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 main(){

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 int main(){int m,s,i;

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 main(){

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 int main(){

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 main(){

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 #include int main(){

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 #include int main(){double x1,x0,f,f1;

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 #include int main(){float x0,x1,x2,fx0,fx1,fx2;

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 int 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”);

}

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 #include int main(){int i,j,n,a[101];

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 int main(){int i,j,min,temp,a[11];

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 int main(){ int a[3][3],sum=0;int i,j;

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 main(){ int a[11]={1,4,6,9,13,16,19,28,40,100};

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 #define N 5 int main(){ int a[N],i,temp;

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 #define N 10 int main(){ int i,j,a[N][N];

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 int main(){ int a[15][15],i,j,k,p,n;

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 #define N 4 #define M 5

/* 数组为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 #define N 15 int main(){ int i,number,top,bott,mid,loca,a[N],flag=1,sign;

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;

}

else if(number

bott=mid-1;

else

top=mid+1;

}

if(!sign||loca==-1)

printf(“cannot find %d.n”,number);;

printf(“continu or not(Y/N)?”);

scanf(“ %c”,&c);

if(c=='N'||c=='n')

flag=0;

}

return 0;

} 6-10 #include int main(){int i,j,upp,low,dig,spa,oth;

char text[3][80];

upp=low=dig=spa=oth=0;

for(i=0;i<3;i++)

{ printf(“please input line %d:n”,i+1);

gets(text[i]);

for(j=0;j<80 && text[i][j]!='';j++)

{if(text[i][j]>='A'&& text[i][j]<='Z')

upp++;

else if(text[i][j]>='a' && text[i][j]<='z')

low++;

else if(text[i][j]>='0' && text[i][j]<='9')

dig++;

else if(text[i][j]==' ')

spa++;

else

oth++;

}

}

printf(“nupper case: %dn”,upp);

printf(“lower case: %dn”,low);

printf(“digit

: %dn”,dig);

printf(“space

: %dn”,spa);

printf(“other

: %dn”,oth);return 0;} 6-11 #include int main(){ char a[5]={'*','*','*','*','*'};

int i,j,k;

char space=' ';

for(i=0;i<5;i++)

{ printf(“n”);

printf(“

”);

for(j=1;j<=i;j++)

printf(“%c”,space);

for(k=0;k<5;k++)

printf(“%c”,a[k]);

}

printf(“n”);

return 0;} 6-12a-c #include int main(){ int j,n;

char ch[80],tran[80];

printf(“input cipher code:”);

gets(ch);

printf(“ncipher code :%s”,ch);

j=0;

while(ch[j]!='')

{ if((ch[j]>='A')&&(ch[j]<='Z'))

tran[j]=155-ch[j];

else if((ch[j]>='a')&&(ch[j]<='z'))

tran[j]=219-ch[j];

else

tran[j]=ch[j];

j++;

}

n=j;

printf(“noriginal text:”);

for(j=0;j

putchar(tran[j]);

printf(“n”);

return 0;} 6-12b #include int main(){int j,n;

char ch[80];

printf(“input cipher code:n”);

gets(ch);

printf(“ncipher code:%sn”,ch);

j=0;

while(ch[j]!='')

{ if((ch[j]>='A')&&(ch[j]<='Z'))

ch[j]=155-ch[j];

else if((ch[j]>='a')&&(ch[j]<='z'))

ch[j]=219-ch[j];

else

ch[j]=ch[j];

j++;

}

n=j;

printf(“original text:”);

for(j=0;j

putchar(ch[j]);

printf(“n”);

return 0;} 6-13 #include int main(){ char s1[80],s2[40];

int i=0,j=0;

printf(“input string1:”);

scanf(“%s”,s1);

printf(“input string2:”);

scanf(“%s”,s2);

while(s1[i]!='')

i++;

while(s2[j]!='')

s1[i++]=s2[j++];

s1[i]='';

printf(“nThe new string is:%sn”,s1);

return 0;} 6-14 #include int main(){ int i,resu;

char s1[100],s2[100];

printf(“input string1:”);

gets(s1);

printf(“ninput string2:”);

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(“nresult:%d.n”,resu);

return 0;} 6-15 #include #include int main(){ char s1[80],s2[80];

int i;

printf(“input s2:”);

scanf(“%s”,s2);

for(i=0;i<=strlen(s2);i++)

s1[i]=s2[i];

printf(“s1:%sn”,s1);

return 0;} 第7章用函数实现模块化程序设计 【第218页】 7-1-1 #include int main(){int hcf(int,int);

int lcd(int,int,int);

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 0;} int hcf(int u,int v){int t,r;if(v>u)

{t=u;u=v;v=t;} while((r=u%v)!=0)

{u=v;

v=r;} return(v);} int lcd(int u,int v,int h)

{

return(u*v/h);

} 7-1-2 #include int Hcf,Lcd;int main(){void hcf(int,int);

void lcd(int,int);

int u,v;

scanf(“%d,%d”,&u,&v);

hcf(u,v);

lcd(u,v);

printf(“H.C.F=%dn”,Hcf);

printf(“L.C.D=%dn”,Lcd);

return 0;} void hcf(int u,int v){int t,r;if(v>u)

{t=u;u=v;v=t;} while((r=u%v)!=0)

{u=v;

v=r;

} Hcf=v;} void lcd(int u,int v)

{

Lcd=u*v/Hcf;

} 7-2 #include #include float x1,x2,disc,p,q;int main(){void greater_than_zero(float,float);void equal_to_zero(float,float);void smaller_than_zero(float,float);float a,b,c;printf(“input a,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);printf(“equation: %5.2f*x*x+%5.2f*x+%5.2f=0n”,a,b,c);disc=b*b-4*a*c;printf(“root:n”);if(disc>0)

{

greater_than_zero(a,b);

printf(“x1=%fttx2=%fn”,x1,x2);

} else if(disc==0)

{equal_to_zero(a,b);

printf(“x1=%fttx2=%fn”,x1,x2);

} else

{smaller_than_zero(a,b);

printf(“x1=%f+%fitx2=%f-%fin”,p,q,p,q);

} return 0;} void greater_than_zero(float a,float b){x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);} void equal_to_zero(float a,float b){

x1=x2=(-b)/(2*a);} void smaller_than_zero(float a,float b){

p=-b/(2*a);

q=sqrt(-disc)/(2*a);} 7-3 #include int main(){int prime(int);

int n;

printf(“input an integer:”);

scanf(“%d”,&n);

if(prime(n))

printf(“%d is a prime.n”,n);

else

printf(“%d is not a prime.n”,n);

return 0;} int prime(int n)

{int flag=1,i;

for(i=2;i

if(n%i==0)

flag=0;

return(flag);

} 7-4 #include #define N 3 int array[N][N];int main(){ void convert(int array[][3]);int i,j;printf(“input array:n”);for(i=0;i

for(j=0;j

scanf(“%d”,&array[i][j]);printf(“noriginal array :n”);for(i=0;i

{for(j=0;j

printf(“%5d”,array[i][j]);

printf(“n”);

} convert(array);printf(“convert array:n”);for(i=0;i

{for(j=0;j

printf(“%5d”,array[i][j]);

printf(“n”);

} return 0;} void convert(int array[][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;

} } #include #include int main(){void inverse(char str[]);char str[100];printf(“input string:”);scanf(“%s”,str);inverse(str);printf(“inverse string:%sn”,str);return 0;} void inverse(char str[]){char t;

int i,j;

for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)

{t=str[i];

str[i]=str[j-1];

str[j-1]=t;

} } 7-6 #include int main(){void concatenate(char string1[],char string2[],char string[]);char s1[100],s2[100],s[100];printf(“input string1:”);scanf(“%s”,s1);printf(“input string2:”);scanf(“%s”,s2);concatenate(s1,s2,s);printf(“nThe new string is %sn”,s);return 0;} void concatenate(char string1[],char string2[],char 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]='';} 7-7 #include int main(){void cpy(char [],char []);char str[80],c[80];printf(“input string:”);gets(str);cpy(str,c);printf(“The vowel letters are:%sn”,c);return 0;} void cpy(char s[],char c[]){ int i,j;

for(i=0,j=0;s[i]!='';i++)

if(s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'||

s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U')

{c[j]=s[i];

j++;

}

c[j]='';} 7-8 #include #include int main(){char str[80];void insert(char []);printf(“input four digits:”);scanf(“%s”,str);insert(str);return 0;} void insert(char str[]){int i;for(i=strlen(str);i>0;i--)

{str[2*i]=str[i];

str[2*i-1]=' ';

} printf(“output:n%sn”,str);} 7-9 #include int letter,digit,space,others;int main(){void count(char []);char text[80];printf(“input string:n”);gets(text);printf(“string:”);puts(text);letter=0;digit=0;space=0;others=0;count(text);printf(“nletter:%dndigit:%dnspace:%dnothers:%dn”,letter,digit,space,others);return 0;} void count(char str[]){int i;for(i=0;str[i]!='';i++)if((str[i]>='a'&& str[i]<='z')||(str[i]>='A' && str[i]<='Z'))

letter++;else if(str[i]>='0' && str [i]<='9')

digit++;else if(str[i]==32)

space++;else

others++;} 7-10 #include #include int main(){int alphabetic(char);int longest(char []);int i;char line[100];printf(“input one line:n”);gets(line);printf(“The longest word is :”);for(i=longest(line);alphabetic(line[i]);i++)

printf(“%c”,line[i]);printf(“n”);return 0;} int alphabetic(char c){if((c>='a' && c<='z')||(c>='A'&&c<='z'))

return(1);else

return(0);} int longest(char string[]){int len=0,i,length=0,flag=1,place=0,point;for(i=0;i<=strlen(string);i++)

if(alphabetic(string[i]))

if(flag)

{point=i;

flag=0;

}

else

len++;

else

{flag=1;

if(len>=length){length=len;

place=point;

len=0;}

} return(place);} 7-11 #include #include #define N 10 char str[N];int main(){void sort(char []);int i,flag;for(flag=1;flag==1;)

{printf(“input string:n”);

scanf(“%s”,&str);

if(strlen(str)>N)

printf(“string too long,input again!”);

else

flag=0;

} sort(str);printf(“string sorted:n”);for(i=0;i

printf(“%c”,str[i]);printf(“n”);return 0;} void sort(char str[]){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;

} } 7-12 #include #include int main(){float solut(float a,float b,float c,float d);float a,b,c,d;printf(“input a,b,c,d:”);scanf(“%f,%f,%f,%f”,&a,&b,&c,&d);printf(“x=%10.7fn”,solut(a,b,c,d));return 0;}

float solut(float a,float b,float c,float 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-3);return(x);} 7-13 #include #define N 10 #define M 5 float score[N][M];float a_stu[N],a_cour[M];int r,c;int main(){ int i,j;

float h;

float s_var(void);

float highest();

void input_stu(void);

void aver_stu(void);

void aver_cour(void);

input_stu();

aver_stu();

aver_cour();

printf(“n NO.cour1

cour2

for(i=0;i

{printf(”n NO %2d “,i+1);

for(j=0;j

printf(”%8.2f“,score[i][j]);

printf(”%8.2fn“,a_stu[i]);

}

printf(”naverage:“);

for(j=0;j

printf(”%8.2f“,a_cour[j]);

cour3

cour4 cour5

avern”);

printf(“n”);

h=highest();

printf(“highest:%7.2f

NO.%2d

course %2dn”,h,r,c);

printf(“variance %8.2fn”,s_var());

return 0;} void input_stu(void){int i,j;

for(i=0;i

{printf(“ninput score of student%2d:n”,i+1);

for(j=0;j

scanf(“%f”,&score[i][j]);

} } void aver_stu(void){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;

} } void aver_cour(void){int i,j;

float s;

for(j=0;j

{s=0;

for(i=0;i

s+=score[i][j];

a_cour[j]=s/(float)N;

} } float highest(){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_var(void){int i;

float sumx,sumxn;

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));} 7-14 #include #define N 10 #define M 5 float score[N][M];float a_stu[N],a_cour[M];int r,c;int main(){ int i,j;

float h;

float s_var(void);

float highest();

void input_stu(void);

void aver_stu(void);

void aver_cour(void);

input_stu();

aver_stu();

aver_cour();

printf(“n NO.cour1

cour2

cour3

cour4

cour5

for(i=0;i

{printf(”n NO %2d “,i+1);

for(j=0;j

printf(”%8.2f“,score[i][j]);

printf(”%8.2fn“,a_stu[i]);

}

printf(”naverage:“);

for(j=0;j

printf(”%8.2f“,a_cour[j]);

printf(”n“);

h=highest();

printf(”highest:%7.2f

NO.%2d

course %2dn“,h,r,c);

avern”);

printf(“variance %8.2fn”,s_var());

return 0;} void input_stu(void){int i,j;

for(i=0;i

{printf(“ninput score of student%2d:n”,i+1);

for(j=0;j

scanf(“%f”,&score[i][j]);

} } void aver_stu(void){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;

} } void aver_cour(void){int i,j;

float s;

for(j=0;j

{s=0;

for(i=0;i

s+=score[i][j];

a_cour[j]=s/(float)N;

} } float highest(){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_var(void){int i;

float sumx,sumxn;

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));} 7-15 #include #include #define N 10 int main()

{void input(int [],char name[][8]);

void sort(int [],char name[][8]);void search(int ,int [],char name[][8]);int num[N],number,flag=1,c;

char name[N][8];

input(num,name);

sort(num,name);

while(flag==1)

{printf(“ninput number to look for:”);

scanf(“%d”,&number);

search(number,num,name);

printf(“continue ot not(Y/N)?”);

getchar();

c=getchar();

if(c=='N'||c=='n')

flag=0;

} return 0;

} void input(int num[],char name[N][8]){int i;

for(i=0;i

{printf(“input NO.: ”);

scanf(“%d”,&num[i]);

printf(“input name: ”);

getchar();

gets(name[i]);

} }

void sort(int num[],char name[N][8]){ int i,j,min,templ;

char temp2[8];

for(i=0;i

{min=i;

for(j=i;j

if(num[min]>num[j])min=j;

templ=num[i];

strcpy(temp2,name[i]);

num[i]=num[min];

strcpy(name[i],name[min]);

num[min]=templ;

strcpy(name[min],temp2);

}

printf(“n result:n”);

for(i=0;i

printf(“n %5d%10s”,num[i],name[i]);} void search(int n,int num[],char name[N][8])

{int top,bott,mid,loca,sign;

top=0;

bott=N-1;

loca=0;

sign=1;

if((nnum[N-1]))

loca=-1;

while((sign==1)&&(top<=bott)){mid=(bott+top)/2;

if(n==num[mid])

{loca=mid;

printf(“NO.%d , his name is %s.n”,n,name[loca]);

sign=-1;

}

else if(n

bott=mid-1;

else

top=mid+1;}

if(sign==1 || loca==-1)

printf(“%d not been found.n”,n);

}

7-16 #include #define MAX 1000 int main(){ int htoi(char s[]);

int c,i,flag,flag1;

char t[MAX];

i=0;

flag=0;

flag1=1;

printf(“input a HEX number:”);

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(“decimal number %dn”,htoi(t));

printf(“continue or not?”);

c=getchar();

if(c=='N'||c=='n')

flag1=0;

else

{flag=0;

i=0;

printf(“ninput a HEX number:”);

}

}

}

return 0;

}

int htoi(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);

} 7-17 #include int main(){ void convert(int n);

int number;

printf(“input an integer: ”);

scanf(“%d”,&number);

printf(“output: ”);

if(number<0)

{putchar('-');putchar(' ');

/* 先输出一个‘-’号和空格 */

number=-number;

}

convert(number);

printf(“n”);

return 0;} void convert(int n){ int i;

if((i=n/10)!=0)

convert(i);

putchar(n%10+'0');

putchar(32);} 7-18 #include int main(){int sum_day(int month,int day);int leap(int year);int year,month,day,days;printf(“input date(year,month,day):”);scanf(“%d,%d,%d”,&year,&month,&day);printf(“%d/%d/%d ”,year,month,day);days=sum_day(month,day);

/* 调用函数sum_day */ if(leap(year)&&month>=3)

/* 调用函数leap */

days=days+1;printf(“is the %dth day in this year.n”,days);return 0;} int sum_day(int month,int day)

/* 函数sum_day:计算日期 */

{int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int i;

for(i=1;i

day+=day_tab[i];

/* 累加所在月之前天数 */

return(day);

}

/* 函数leap:判断是否为闰年 */ int leap(int year){int leap;

leap=year%4==0&&year%100!=0||year%400==0;

return(leap);} 第8章善于利用指针 【第291页】 8-1 #include int main(){ void swap(int *p1,int *p2);int n1,n2,n3;int *p1,*p2,*p3;printf(“input three integer n1,n2,n3:”);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(“Now,the order is:%d,%d,%dn”,n1,n2,n3);return 0;} void swap(int *p1,int *p2)

{int p;

p=*p1;*p1=*p2;*p2=p;

} #include #include int main(){void swap(char *,char *);char str1[20],str2[20],str3[20];printf(“input three line:n”);gets(str1);gets(str2);gets(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(“Now,the order is:n”);printf(“%sn%sn%sn”,str1,str2,str3);return 0;} void swap(char *p1,char *p2){char p[20];

strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);} 8-3 #include int main(){ void input(int *);

void max_min_value(int *);

void output(int *);

int number[10];

input(number);

max_min_value(number);

output(number);

return 0;} void input(int *number)

{int i;

printf(“input 10 numbers:”);

for(i=0;i<10;i++)

scanf(“%d”,&number[i]);

} void max_min_value(int *number)

{ int *max,*min,*p,temp;

max=min=number;

for(p=number+1;p

if(*p>*max)max=p;

else if(*p<*min)min=p;

temp=number[0];number[0]=*min;*min=temp;

if(max==number)max=min;

temp=number[9];number[9]=*max;*max=temp;

} void output(int *number)

{int *p;

printf(“Now,they are:

”);

for(p=number;p

printf(“%d ”,*p);

printf(“n”);

}

8-4 #include int main()

{void move(int [20],int,int);

int number[20],n,m,i;printf(“how many numbers?”);scanf(“%d”,&n);printf(“input %d numbers:n”,n);for(i=0;i

scanf(“%d”,&number[i]);printf(“how many place you want move?”);scanf(“%d”,&m);move(number,n,m);printf(“Now,they are:n”);for(i=0;i

printf(“%d ”,number[i]);printf(“n”);return 0;} void move(int array[20],int n,int m)

{int *p,array_end;

array_end=*(array+n-1);

for(p=array+n-1;p>array;p--)

*p=*(p-1);

*array=array_end;

m--;

if(m>0)move(array,n,m);

} 8-5 #include int main(){int i,k,m,n,num[50],*p;printf(“ninput number of person: n=”);scanf(“%d”,&n);p=num;for(i=0;i

*(p+i)=i+1;

i=0;

k=0;

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(“The last one is NO.%dn”,*p);return 0;} 8-6 #include int main(){int length(char *p);int len;char str[20];printf(“input string: ”);scanf(“%s”,str);len=length(str);printf(“The length of string is %d.n”,len);return 0;}

int length(char *p)

{int n;n=0;while(*p!='')

{n++;

p++;

} return(n);} 8-7 #include #include int main(){void copystr(char *,char *,int);

int m;char str1[20],str2[20];printf(“input string:”);gets(str1);printf(“which character that begin to copy?”);scanf(“%d”,&m);if(strlen(str1)

printf(“input error!”);else

{copystr(str1,str2,m);

printf(“result:%sn”,str2);

} return 0;} void copystr(char *p1,char *p2,int m)

{int n;n=0;while(n

{n++;

p1++;

} while(*p1!='')

{*p2=*p1;

p1++;

p2++;

} *p2='';} 8-8 #include int main(){int upper=0,lower=0,digit=0,space=0,other=0,i=0;char *p,s[20];printf(“input string: ”);while((s[i]=getchar())!='n')i++;p=&s[0];while(*p!='n')

{if(('A'<=*p)&&(*p<='Z'))

++upper;

else if(('a'<=*p)&&(*p<='z'))

++lower;

else if(*p==' ')

++space;

else if((*p<='9')&&(*p>='0'))

++digit;

else

++other;

p++;

} printf(“upper case:%d

lower case:%d”,upper,lower);printf(“

space:%d

digit:%d

other:%dn”,space,digit,other);

第四篇:C语言课后习题答案

C语言课后习题答案-第四版-第一章

5、请参照本章例题,编写一个C语言程序,输出以下信息: **************************** V e r y G o o d!**************************** #include int main(){

printf(“**************************nn”);printf(“

Very Good!nn”);printf(“**************************n”);return 0;}

6、编写一个C语言程序,输入a,b,c三个值,输出其中最大值。#include int main(){ int a,b,c,max;printf(“please input a,b,c:n”);scanf(“%d%d%d”,&a,&b,&c);max=a;if(max int main(){ int a,b,c,max;printf(“please input a,b,c:n”);scanf(“%d%d%d”,&a,&b,&c);max=a>b?a:b;max=max>c?max:c;printf(“The largest number is %dn”,max);return 0;}

第3章

1、假如我国国民生产总值的年增长率为9%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为

P=(1+r)^n r 为年增长率,n 为年数,p为与现在相比的倍数。#include #include int main(){ float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf(“p=%fn”,p);return 0;}

2、存款利息计算。有1000元,想存5年,可按以下5种办法存:(1)一次存5年期。

(2)先存2年期,到期后将本息在存3年期。(3)先存3年期,到期后将本息在存2年期。

(4)先存1年期,到期后将本息在存1年期,连续存5次。(5)存活期存款。活期利息每一季度结算一次。2007年12月的银行存款利息如下: 1年定期存款利息为4.14%; 2年定期存款利息为4.68%; 3年定期存款利息为5.4%; 5年定期存款利息为5.85%;

活期存款利息为0.27%(活期利息每一季度结算一次。)如果r 为年利率,n 为存款年数,则计算本息和的公式为 1年期本息和:P=1000*(1+r);n年期本息和:P=1000*(1+n*r);存n次1年期的本息和:P=1000*(1+ r)^n;存活期本息和:P=1000*(1+r/4)^4n。

说明:P=1000*(1+r/4)^4n。是一个季度的本息和。#include #include int main(){ float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p=1000;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=%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、购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。提示:计算还请月数m 的公式如下: m =[ log p –log(p-d*r)] / log(1+r)可以讲公式该写为

m ={ log [p /(p – d*r)] }/ log(1+r)C的库函数中有求对数的函数log10,是求以10为底的对数,log(p)表示log p。#include #include int main(){ float d=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r))/log10(1+r);printf(“m=%6.2fn”,m);return 0;}

6、请编将“China”,编译成密码,密码规律是:用原有的字母后面第4个字母代替原来的字母。#include int main(){ char 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(“passwor is %c%c%c%c%cn”,c1,c2,c3,c4,c5);return 0;}

7、设圆半径r =1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。#include int main(){ float h,r,l,s,sq,vq,vz;float pi=3.141526;printf(“请输入圆半径r,圆柱高h∶”);scanf(“%f,%f”,&r,&h);

//要求输入圆半径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;}

第四章

4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。#include int 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);return 0;

4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。#include int main(){

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(“三个整数的最大数是%dn”,max);return 0;}

5、从键盘输入一个小于1000的正整数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其检查是否为小于1000的正数。若不是,则要求从新输入。#include #include #define M 1000 int main(){ int i,k;

printf(“请输入一个小于%d的整数i:”,M);scanf(“%d”,&i);while(i>M)

{ printf(“输入的数不符合要求,请重新输入一个小于%d的整数i:”,M);

} k=sqrt(i);printf(“%d的平方根的整数部分是:%dn”,i,k);return 0;} 6、有一个函数: scanf(“%d”,&i);

x

(x<1)

y(1<=x<10)

3*x – 11

(x>=10)=

2*x1

(x<0)

Y =

0

(x=0)

(x>0)

写程序,输入x 的值,输出y 相应的值。#include int main(){

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;{ }

8、给出一百分制成绩,要求输出成绩等级‘A’,’B’,’C’,’D’,’E’。90分以上为‘A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。#include int main(){ float score;

char grade;

printf(“请输入学生成绩:”);

scanf(“%f”,&score);

while(score>100||score<0){

}

switch((int)(score/10)){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;printf(“n 输入有误,请重输”);scanf(“%f”,&score);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;}

9、给出一个不多于5位数的正整数;(1)求出它是几位数;(2)分别输出每一位数字;

(3)按逆顺序输出各位数,例如原有数为123,应输出321.#include #include int main(){ 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);printf(“n反序数字为:”);switch(place){ case 5: printf(“%d%d%d%d%dn”,indiv,ten,hundred,thousand,ten_thousand);break;case break;case 3:printf(“%d%d%dn”,indiv,ten,hundred);break;case 2: printf(“%d%dn”,indiv,ten);break;case 1: printf(“%dn”,indiv);break;} return 0;}

11、输入4个整数,要求按由小到大的顺序输出。#include int main(){ int t,a,b,c,d;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)4: printf(“%d%d%d%dn”,indiv,ten,hundred,thousand);

{ 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;}

12、有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为 1,这4个圆塔高位10cm, 塔以外无建筑物。求该点的建筑物高度(塔外的高度为零)。#include int main(){ 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.7

用pi/4=1-1/3+1/5-1/7+„„公式求pi近似值,直到发现某一项的绝对值小于10^6为止。

#include #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代表符号,下一项的符号与上一项符号相反

} pi=pi*4;

// 多项式的和pi乘以4,才是π的近似值

printf(“pi=%10.8fn”,pi);

// 输出π的近似值

printf(“count=%dn”,count);

// 输出循环次数

return 0;}

3、输入两个正整数m和n,求其最大公约数和最小公倍数。#include int main()term=sign/n;

// 求出下一项的值term count++;

// count累加1 { 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;}

4、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。#include int main(){

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、求Sn=a+aa+aaa+„„+aa„„a之值,其中a是一个数字,n 表示a 的位数。n 由键盘输入。#include int main(){ int a,n,i=1,sn=0,tn=0;printf(“a,n=:”);scanf(“%d,%d”,&a,&n);while(i<=n){

} printf(“a+aa+aaa+...=%dn”,sn);return 0;}

6、求和:1!+2!+3!+„„+20!。#include int main(){ tn=tn+a;/*赋值后的tn为i个 a组成数的值*/ sn=sn+tn;/*赋值后的sn为多项式前i项之和*/ a=a*10;++i;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;}

7、求1+2+3+„„+100+1+2^2+3^2+4^2++50^2+1+1/2+1/3+1/4+„„+1/10。#include int main(){ 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;}

8、输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如153是一位水仙花数,因为153=13+53+33。#include int main(){ int i,j,k,n;printf(“parcissus numbers are ”);for(n=100;n<1000;n++){

} printf(“n”);return 0;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);}

9、编程求1000之内的完数,并按下面格式输出其因子:its factors are 1,2,3 #include int main(){ int m,s,i;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

} return 0;}

10、有一个分数序列:

2/1,3/2,5/3,8/5,13/8,21/13,„„ 求出这个数列前20项之和。#include int main(){ int i,n=20;double a=2,b=1,s=0,t;for(i=1;i<=n;i++){

} printf(“sum=%16.10fn”,s);return 0;}

11、一个球从100米敢赌下落,每次反弹高度为原来的一半,在下落,在反弹。求第10次落地时共经过多少米?第10次反弹多高?

#include s=s+a/b;t=a, a=a+b, b=t;int main(){ double sn=100,hn=sn/2;int n;for(n=2;n<=10;n++){

} printf(“第10次落地时共经过%f米n”,sn);printf(“第10次反弹%f米n”,hn);return 0;}

12、猴子吃桃问题。猴子第1天摘了若干个桃子,当即吃了一半零一个;第2剩下的吃了一半零一个,一次循环。到第十天时想吃就剩下一个桃子。求第一天摘了几个桃子? #include int main(){ int day,x1,x2;day=9;x2=1;sn=sn+2*hn;

/*第n次落地时共经过的米数*/ hn=hn/2;

/*第n次反跳高度*/ while(day>0){ x1=(x2+1)*2;

/*第1天的桃子数是第2天桃子数加1后的2倍.*/

} printf(“total=%dn”,x1);return 0;}

16、输出以下图案:

*

*** ***** ******* ***** *** * #include int main(){ int i,j,k;for(i=0;i<=3;i++)x2=x1;day--;{

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;}

17、甲队A,B,C 3 人,乙队 X,Y,Z 3人。A不和X比;X,Z比,请编程找出3 对赛手的名单。#include

int main(){

C不和 char i,j,k;

/*是a的对手;j是b的对手;k是c的对手*/ for(i='x';i<='z';i++)

} 第六章

1、用筛选法求100之内的素数。#include #include int main(){ int i,j,n,a[101];

for(i=1;i<=100;i++)

a[i]=i;

a[1]=0;

for(i=2;i

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;

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;}

2、用选择法对10个整数排序。#include int main(){ int i,j,min,temp,a[11];

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;}

3、求一个3 x 3 的整型矩阵对角线元素之和。#include int main(){ int a[3][3],sum=0;int i,j;

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;}

4、有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。#include int main(){ int a[11]={1,4,6,9,13,16,19,28,40,100};

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;}

5、将一个数组中的值按逆顺序重新存放。例如:8,6,5,4,1。要求改为:1,4,5,6,8.。#include #define N 5 int main(){ int a[N],i,temp;

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、输出以下杨辉三角形(要求输出10行)。1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 „„„„„„„„„„„„ #include #define N 10 int main(){ int i,j,a[N][N];

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

printf(“%6d”,a[i][j]);

printf(“n”);

}

printf(“n”);

return 0;}

7、输出“魔方阵”。所谓魔方阵就是每行每列和对角线之和相等。例如: 1 6 3 5 7 4 9 2 要求输出1~n^2的自然数构成的魔方阵。#include int main(){ int a[15][15],i,j,k,p,n;

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;}

9、有15个数按由大到小顺序存放在一个数组中,输入一个数,要求折半查找法找出该数是数组中第几个元素值。如果不在数组中则输出“无此数”。#include #define N 15 int main(){

int i,number,top,bott,mid,loca,a[N],flag=1,sign;

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 is %dn”,number,loca+1);

sign=1;

}

else if(number

bott=mid-1;

else

found

%d,its

position

top=mid+1;

}

if(!sign||loca==-1)

printf(“cannot find %d.n”,number);;

printf(“continu or not(Y/N)?”);

scanf(“ %c”,&c);

if(c=='N'||c=='n')

flag=0;

}

return 0;

}

10、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符个数。

#include int main(){ int i,j,upp,low,dig,spa,oth;

char text[3][80];

upp=low=dig=spa=oth=0;

for(i=0;i<3;i++)

{ printf(“please input line %d:n”,i+1);

gets(text[i]);

for(j=0;j<80 && text[i][j]!='';j++)

{ if(text[i][j]>='A'&& text[i][j]<='Z')

upp++;

else if(text[i][j]>='a' && text[i][j]<='z')

low++;

else if(text[i][j]>='0' && text[i][j]<='9')

dig++;

else if(text[i][j]==' ')

spa++;

else

oth++;

}

}

printf(“nupper case: %dn”,upp);

printf(“lower case: %dn”,low);

printf(“digit

: %dn”,dig);

printf(“space

: %dn”,spa);

printf(“other

: %dn”,oth);return 0;}

11、输出以下图案:* * * * *

* * * * * * * * * * * * * * * * * * * * #include int main(){ char a[5]={'*','*','*','*','*'};

int i,j,k;

char space=' ';

for(i=0;i<5;i++)

{ printf(“n”);

printf(“

”);

for(j=1;j<=i;j++)

printf(“%c”,space);

for(k=0;k<5;k++)

printf(“%c”,a[k]);

}

printf(“n”);

return 0;}

12、有一行电文,已按下面规律译成密码:A>Z,B>Y,C>X„„a>z,b>y,c>x„„

编程译回原文并输出密码和原文。#include int main(){ int j,n;

char ch[80],tran[80];

printf(“input cipher code:”);

gets(ch);

printf(“ncipher code :%s”,ch);

j=0;

while(ch[j]!='')

{ if((ch[j]>='A')&&(ch[j]<='Z'))

tran[j]=155-ch[j];

else if((ch[j]>='a')&&(ch[j]<='z'))

tran[j]=219-ch[j];

else

tran[j]=ch[j];

j++;

}

n=j;

printf(“noriginal text:”);

for(j=0;j

putchar(tran[j]);

printf(“n”);

return 0;}

12、有一行电文,已按下面规律译成密码:a>z,b>y,c>x„„

编程译回原文并输出密码和原文。#include int main(){ int j,n;

char ch[80];

printf(“input cipher code:n”);

gets(ch);

printf(“ncipher code:%sn”,ch);

j=0;

while(ch[j]!='')

A>Z,B>Y,C>X„„

{ if((ch[j]>='A')&&(ch[j]<='Z'))

ch[j]=155-ch[j];

else if((ch[j]>='a')&&(ch[j]<='z'))

ch[j]=219-ch[j];

else

ch[j]=ch[j];

j++;

}

n=j;

printf(“original text:”);

for(j=0;j

putchar(ch[j]);

printf(“n”);

return 0;}

15、编写一个程序,将S2中的全部字符复制到字符数组S1中。不用strcpy函数。复制时‘’ 也要复制过去。‘’后面的字符不复制。#include int main(){ char s1[80],s2[40];

int i=0,j=0;

printf(“input string1:”);

scanf(“%s”,s1);

printf(“input string2:”);

scanf(“%s”,s2);

while(s1[i]!='')

i++;

while(s2[j]!='')

s1[i++]=s2[j++];

s1[i]='';

printf(“nThe new string is:%sn”,s1);

return 0;}

15、编写一个程序,将S2中的全部字符复制到字符数组S1中。不用strcpy函数。复制时‘’ 也要复制过去。‘’后面的字符不复制。#include #include int main(){ char s1[80],s2[80];

int i;

printf(“input s2:”);

scanf(“%s”,s2);

for(i=0;i<=strlen(s2);i++)

s1[i]=s2[i];

printf(“s1:%sn”,s1);

return 0;} 第七章

1、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。程序有误

#include int main(){ int hcf(int,int);

int lcd(int,int,int);

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);

第五篇:c语言课后习题

C语言程序设计实验报告

学院

数学与信息技术

班级

学号

11130730

姓名

指导教师

实验1 简单程序设计

1.实验目的

(1)熟悉C语言开发环境并掌握在该环境下如何编辑、编译、连接和运行一个C程序。(2)通过运行一个简单的C程序过程,初步了解C程序的基本结构及特点。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)输入三个整数,请把这三个数由小到大输出。试编写多种方法。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)C程序是由一个个函数构成,当一个函数调用另一个函数时,需要对被调函数作声明。(2)用户自定以的函数最好写在一个头文件中,在需要的地方用文件包含命令即可。

(3)system(“cls”)函数的作用是清屏,它的声明在头文件stdlib.h中。如果是在Linux操作系统的gcc环境下,清屏用system(”clear”)。

4. 常见错误

(1)数据声明或语句后面缺少分号。(2)对被调函数没有声明。

(3)没有main函数或者有多个main函数。

5. 程序代码

#include int main(){ float a,b,c,t;printf(“请输入三个数:”);scanf(“%f,%f,%f”,&a,&b,&c);if(a>b){

t=a;a=b;b=t;} if(a>c){t=a;a=c;c=t;} if(b>c){t=b;b=c;c=t;} printf(“%5.2f,%5.2f,%5.2fn”,a,b,c);} 6. 实验结果

7. 心得体会

刚开始学习C语言,有一些小问题,数据声明时,分号会忘记,语句后面缺少分号。而且n斜杠会写反,有时会忘记声明函数。

实验2 顺序结构程序设计

1.实验目的

(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量。(2)掌握数据的输入输出的方法,能正确使用各种格式控制符。(3)掌握算术运算符和赋值运算符。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)输入圆半径和圆柱高,求圆周长、圆面积、圆球表面积、圆球体积和圆柱体积。输入输出要有文字说明,输出结果取小数点后2位。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)用scanf和printf对数据进行输入输出时,不同的数据类型用不同的格式控制符。(2)scanf函数中的格式控制后面应当是变量地址,而不是变量名。

4. 常见错误

(1)变量没有定义,直接使用。

(2)企图利用整数除以整数得到精确结果。例如1/4结果不是0.25而是0,1/4.0结果才是0.25。(3)printf和scanf函数中格式控制符的个数与变量或变量地址的个数不一致。(4)scanf函数的地址表列因该是变量地址,而不是变量名。

(5)scanf函数在格式控制字符串中除了格式说明以外还有其他字符时,在输入数据时(6)没有在对应的位置输入与这些字符相同的字符。

5. 程序代码

#include int main(){ float h,r,l,s,sq,vq,vz;float p=3.141526;printf(“请输入圆半径r,圆柱高h”);scanf(“%f,%f”,&r,&h);l=2*p*r;//圆周长

s=r*r*p;//圆面积

sq=4*p*r*r;//圆球表面积

vq=4.0/3.0*p*r*r*r;//圆球体积

vz=p*r*r*h;//圆柱体积

printf(“圆周长为: l=%6.2fn”,l);printf(“圆面积为: s=%6.2fn”,s);printf(“圆球表面积为: sq=%6.2fn”,sq);printf(“圆球体积为: vq=%6.2fn”,vq);printf(“圆柱体积为: vz=%6.2fn”,vz);return 0;} 6. 实验结果

7. 心得体会

这边是基础的用scanf和printf对数据进行输入输出,不同的数据类型用不同的格式控制符。有点小睇混淆。才刚开始,还是觉得挺简单的。

实验3 选择结构程序设计

1.实验目的

(1)了解C语言表示逻辑变量的方法(2)学会正确使用关系运算符和逻辑运算符。(3)熟练掌握if语句和switch语句。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)把百分制成绩转换成5级记分制,要求分别用if else 和switch语句。

90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:E

(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)注意关系运算符==和复制运算符=的区别。(2)if和else的匹配原则。

(3)在switch语句中正确使用break。

4. 常见错误

(1)赋值运算符=和关系运算符等号=搞混。(2)在if语句为复合语句时,忘记写{}。(3)if语句出现嵌套时,没正确配对。(4)switch语句中,没正确使用break。

5. 程序代码

#include int main(){ 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;6. 实验结果

7. 心得体会

赋值运算符=和关系运算符等号=搞混。在if语句为复合语句时,忘记写{}。if语句出现嵌套时,没正确配对。

实验4 循环结构程序设计

1.实验目的

(1)熟练掌握循环语句中的for语句、while语句和do while语句的使用方法,以及这三种循环语句之间的转换方法。

(2)掌握编写循环结构程序的方法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)通过键盘输入任意两个正整数,求其最大公约数和最小公倍数。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)循环结构程序的设计方法。

(2)while和do while循环之间的转换方法。

(3)getch函数从键盘接收一个字符,该函数被调用后程序会暂停,等待按任意键,再继续执行后续的语句,以便我们观察中间结果。在VC++下需要包含conio.h头文件,在Linux下需要包含头文件curses.h。由于在Linux下getch函数还需要与其它函数配合使用才能达到上面所说的功能并且在编译时还要指定链接所使用的库文件,所以在Linux环境建议使用两次调用getchar函数来替换getch函数。

4. 常见错误

(1)循环体为复合语句时,没用{}括起来。

(2)在while()和for()后面添加分号,使得循环体为空语句。(3)for括号里的分号和逗号用错。

(4)循环嵌套时,内循环的初始条件和循环体没正确设计好。

5. 程序代码

#include int main(){ int r,m,n,p;scanf(“%d,%d”,&m,&n);p=n*m;do{ r=m%n;m=n;n=r;p=p/m;}while(r!=0);printf(“最大公约数:%dn”,m);

printf(“最小公倍数:%dn”,p);return 0;} 6. 实验结果

7. 心得体会

循环体为复合语句时,没用{}括起来。在while()和for()后面添加分号,使得循环体为空语句。for括号里的分号和逗号用错。循环嵌套时,内循环的初始条件和循环体没正确设计好。

实验5 数组的应用

1.实验目的

(1)掌握一维数组和二维数组的定义和引用。(2)掌握字符数组和字符串函数的使用。(3)掌握与数组有关的算法(特别是排序算法)。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)用选择法对10个整数排序。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)在循环中,数组元素的引用。

(2)起泡排序法、选择排序法和插入排序法。

4. 常见错误

(1)数组定义时,没规定数组长度或者长度为一变量。(2)循环中数组元素的下标没正确表示。

(3)起泡排序、选择排序和插入排序算法没理解透。

(4)起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。(5)字符串的复制和比较直接使用赋值运算符和关系运算符。

5. 程序代码

#include int main(){ int i,j,t,a[10];printf(“请输入10个整数:n”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i<9;i++)

for(j=i+1;j<10;j++)

if(a[i]>a[j])

{

t=a[i];

a[i]=a[j];

a[j]=t;

} printf(“选择排列:n”);for(i=0;i<10;i++)

printf(“%5d”,a[i]);printf(“n”);return 0;} 6. 实验结果

7. 心得体会

数组定义时,没规定数组长度或者长度为一变量。循环中数组元素的下标没正确表示。起泡排序、选择排序和插入排序算法没理解透。起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。字符串的复制和比较直接使用赋值运算符和关系运算符。

实验6 函数的应用

1.实验目的

(1)掌握函数的定义和调用方法。

(1)掌握函数实参与形参的对应关系,以及“值传递”的方式。(1)掌握函数的嵌套调用和递归调用的方法。

(1)掌握全局变量和局部变量,动态变量以及静态变量的概念和使用方法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)写一个函数,用“起泡法”对输入的10个字符按由小到大的顺序排列,主函数通过调用它实现题目要求。

(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)函数的定义和调用方法。

(2)函数的实参数为数组时,形参的形式以及实参和形参之间的数据传递方式。(3)函数的递归调用。

4. 常见错误

(1)函数没定义,就被调用。(2)函数定义了,又没被调用。(3)定义函数时,形参没规定类型。(4)函数调用时,实参前加类型。(5)被调函数没有声明

(6)嵌套调用和递归调用没理解透,使用错误。(7)全局变量和局部变量有效范围没能正确区分。

5. 程序代码

#include #include #define N 10 char str[N];int main(){ void sort(char[]);int i,flag;for(flag=1;flag==1;){ printf(“input string:n”);scanf(“%s”,&str);if(strlen(str)>N)printf(“string is too long,input again!”);else flag=0;} sort(str);printf(“string sorted:n”);for(i=0;istr[i+1]){ t=str[i];str[i]=str[i+1];str[i+1]=t;} } 6. 实验结果

7. 心得体会

有时候函数没定义就使用,有时候会定义函数,然后没有使用,定义函数时,形参没规定类型。函数调用时,实参前加类型。会把形参与实参搞混

实验7 指针的应用

1.实验目的

(1)熟练掌握指针的定义、赋值和使用。

(2)掌握用指针引用数组的元素、熟悉指向数组的指针的使用。(3)熟练掌握字符数组与字符串的使用,掌握指针数组。(4)掌握指针函数与函数指针的用法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)有一个班4个学生,5门课程。①求第1门课程的平均分;②找出两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)列指针变量的定义、赋值以及利用它引用数组元素。(2)行指针变量的定义、赋值以及它在二维数组中的使用。(3)函数指针变量的定义、赋值和利用它进行函数调用。

4. 常见错误(1)混淆变量值和变量地址。

(2)指针变量没有初始化,就利用该指针变量引用变量。

(3)利用指针变量引用一维数组元素和二维数组元素或地址时,引用的方法不对。(4)函数指针概念清楚。(5)混淆行指针变量和指针数组。

5. 程序代码

#include int main(){ void avsco(float *,float *);void avcour1(char(*)[10],float *);void fali2(char course[5][10],int num[],float *pscore,float aver[4]);void good(char course[5][10],int num[4],float *pscore,float aver[4]);int i,j,*pnum,num[4];float score[4][5],aver[4],*pscore,*paver;char course[5][10],(*pcourse)[10];printf(“input course:n”);pcourse=course;for(i=0;i<5;i++)scanf(“%s”,course[i]);printf(“input NO.and scores:n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%3s”,course[i]);printf(“n”);pscore=&score[0][0];pnum=&num[0];for(i=0;i<4;i++){

scanf(“%d”,pnum+i);

for(j=0;j<5;j++)

scanf(“%f”,pscore+5*i+j);} paver=&aver[0];printf(“nn”);avsco(pscore,paver);avcour1(pcourse,pscore);printf(“nn”);fali2(pcourse,pnum,pscore,paver);printf(“nn”);good(pcourse,pnum,pscore,paver);return 0;} void avsco(float *pscore,float *paver){ int i,j;float sum,average;for(i=0;i<4;i++){

sum=0.0;

for(j=0;j<5;j++)

sum=sum+(*(pscore+5*i+j));

average=sum/5;

*(paver+i)=average;} } void avcour1(char(*pcourse)[10],float *pscore){ int i;float sum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+(*(pscore+5*i));average1=sum/4;printf(“course1:%s average score:%7.2fn”,*pcourse,average1);}

void fali2(char course[5][10],int num[],float *pscore,float aver[4]){ int i,j,k,labe1;printf(“ ==========Student who is fail in two courses======= n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%11s”,course[i]);printf(“averagen”);for(i=0;i<4;i++){

labe1=0;for(j=0;j<5;j++)if(*(pscore+5*i+j)<60.0)labe1++;if(labe1>=2)

{

printf(“%d”,num[i]);for(k=0;k<5;k++)printf(“%11.2f”,*(pscore+5*i+k));printf(“%11.2fn”,aver[i]);

} } } void good(char course[5][10],int num[4],float *pscore,float aver[4]){ int i,j,k,n;printf(“ ======Students whose score is good======n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%11s”,course[i]);printf(“ averagen”);for(i=0;i<4;i++){

n=0;

for(j=0;j<5;j++)

if(*(pscore+5*i+j)>85.0)n++;

if((n==5)||(aver[i]>=90))

{

printf(“%d”,num[i]);

for(k=0;k<5;k++)

printf(“%11.2f”,*(pscore+5*i+k));

printf(“%11.2fn”,aver[i]);

} } } 6. 实验结果

7. 心得体会

指针这章有点小混乱 混淆变量值和变量地址。会忘记给指针变量没有初始化,就利用该指针变量引用变量。数组元素或地址有些模糊

实验8 结构体的应用

1.实验目的(1)掌握结构体变量、结构体数组以及结构体指针的定义和使用。(2)掌握动态存储分配函数的用法和单向链表的创建、输出等操作。(3)掌握用typedef定义类型。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)编写建立链表的函数creat,输出链表的函数print,删除链表中节点的函数del,插入节点的函数insert,再编写一个主函数,先后调用这些函数,在主函数中指定需要删除和插入的节点的数据。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)结构成员引用的三种方法。(2)链表节点数据类型的定义。

(3)malloc函数用于动态分配存储空间,它的返回值类型是void *,在实际使用中一般需要强类型转换成多需要的类型。该函数的声明在stdlib.h头文件中。(4)链表操作中,节点指针域的使用。

4. 常见错误

(1)引用结构体成员时,成员运算符.和指向运算符->的使用混淆。(2)链表操作过程中不能正确利用指针域进行操作。(3)不能正确使用typedef声明新类型名。

5. 程序代码

#include #include #define LEN sizeof(struct Student)struct Student { long num;float score;struct Student *next;};int n;int main()//主函数 { struct Student *creat();struct Student *del(struct Student *,long);struct Student *insert(struct Student *,struct Student *);void print(struct Student *);struct Student *head,stu;long del_num;printf(“input records:n”);head=creat();print(head);printf(“input the deleted number:”);scanf(“%ld”,&del_num);head=del(head,del_num);print(head);printf(“input the inserted record:”);scanf(“%ld,%f”,&stu.num,&stu.score);head=insert(head,&stu);print(head);return 0;} struct Student *creat()//创建链表 { struct Student *head;struct Student *p1,*p2;n=0;p1=p2=(struct Student *)malloc(LEN);scanf(“%ld,%f”,&p1->num,&p1->score);head=NULL;while(p1->num!=0){

n=n+1;

if(n==1)head=p1;

else p2->next=p1;

p2=p1;

p1=(struct Student *)malloc(LEN);

scanf(“%ld,%f”,&p1->num,&p1->score);} p2->next=NULL;return(head);} struct Student *del(struct Student *head,long num)//{ struct Student *p1,*p2;if(head==NULL){

printf(“nlist null!n”);

return(head);} p1=head;while(num!=p1->num && p1->next!=NULL){

删除

p2=p1;

p1=p1->next;} if(num==p1->num){

if(p1==head)head=p1->next;

else p2->next=p1->next;

printf(“delete:%ldn”,num);

n=n-1;} else printf(“%ld not been found!n”,num);return(head);} struct Student * insert(struct Student *head,struct Student *stud)//{ struct Student *p0,*p1,*p2;p1=head;p0=stud;if(head==NULL){

head=p0;

p0->next=NULL;} else {

while((p0->num>p1->num)&&(p1->next!=NULL))

{

p2=p1;

p1=p1->next;

}

if(p0->num<=p1->num)

{

if(head==p1)head=p0;

else p2->next=p0;

p0->next=p1;}

else

{p1->next=p0;

p0->next=NULL;

}} n=n+1;return(head);} void print(struct Student *head)//输出链表 { struct Student *p;printf(“nNow,These %d records are:n”,n);p=head;

插入

if(head!=NULL)do {

printf(“%ld %5.1fn”,p->num,p->score);

p=p->next;}while(p!=NULL);} 6. 实验结果

7. 心得体会

结构体可以允许我们自己建立不同类型数据,组成组合型的数据结构。这样可以处理一些复杂的问题。但是,在引用结构体成员时,成员运算符.和指向运算符->的使用时会有点混淆。而且有时会不能正确利用指针域进行操作。

实验9 文件的应用

1.实验目的

(1)掌握文件、缓冲文件系统以及文件指针等概念。

(2)学会使用文件打开、关闭、读、写等函数对文件进行简单的操作。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)编写函数void fun(int n,int *t),其功能是计算n!,通过指针t返回。编写main函数,通过键盘输入一个不大于100的整数,调用fun函数,将指针t返回的值写入文件myf2.out中。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)access函数可以用来判断某一文件是否存在。调用该函数时,在VC++下需包含头文件io.h,在Linux下需包含unistd.h头文件。(2)fopen、fclose函数的使用。(3)fread和fwrite函数的使用。

4. 常见错误

(1)文件打开方式使用错误。(2)文件使用完毕没有关闭。

(3)不能正确使用文件读写函数对文件进行操作。

5. 程序代码

#include #include void fun(int n, int *t){

int result=1;int i;for(i=1;i<=n;i++){ result*=i;} *t=result;}

int main(){ int num;int write;FILE *pFile;scanf(“%d”,&num);while(num>=100){

printf(“输入的数据大于100了n”);

scanf(“%d”,&num);} fun(num,&write);

} if((pFile=fopen(“myf2.out”,“w”))==NULL){

printf(“打开文件失败!n”);

} fprintf(pFile,“%d”,write);fclose(pFile);printf(“%d”,write);return 0;6. 实验结果

7. 心得体会

文件打开方式使用错误。文件使用完毕没有关闭。不能正确使用文件读写函数对文件进行操作。而且对于的各种操作容易混淆。不太清楚什么时候怎样使用。

下载C语言设计谭浩强第三版的课后习题答案[范文大全]word格式文档
下载C语言设计谭浩强第三版的课后习题答案[范文大全].doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言课后习题

    习题 第三章 #include #include int main { int d,p; double r,a,m; scanf("%d %d %lf",&d,&p,&r); a=(p/(p-d*r)); m=log(a)/log(1+r); if(p>0&&d>0) { if(d23) h=0;......

    C语言程序设计教程课后习题答案

    C语言程序设计教程课后习题答案第一章 C语言程序设计概述 -习题答案 1 算法的描述有哪些基本方法?答 1、自然语言 2、专用工具2 C语言程序的基本结构是怎样的?举一个例子说明。......

    影视动画试听语言课本课后习题答案整理

    一、 名词解释 1、视听语言: 就是利用视觉和听觉的双重刺激向受众传播某种信息的一种感性语言,是电影的艺术手段,是利用镜头与镜头之间的组合来表达特殊意义,讲述故事,表达内容与......

    建筑结构抗震设计课后习题答案

    武汉理工大学《建筑结构抗震设计》复试 第1章 绪论 1、震级和烈度有什么区别和联系? 震级是表示地震大小的一种度量,只跟地震释放能量的多少有关,而烈度则表示某一区域的地表和......

    自考【版式设计】课后习题答案

    自考【版式设计】复习资料 名词解释 1.立体主义:具有主张模仿客观对象,重视艺术的自我表现,对具体对象分析、重构和综合处理的特征。 2.未来主义:即编排无重心无主次、杂乱无章......

    现代汉语课后习题答案

    第一章 绪论”习题答案 “绪论”思考和练习一 一、什么是现代汉民族共同语?它是怎样形成的? 现代汉民族的共同语就是“以北京语音为标准音,以北方话为基础方言,以典范的现代白......

    现代汉语课后习题答案

    练习一 一、什么是成语、谚语、惯用语、歇后语?它们之间有什么不同? 成语:成语是一种相沿习用、含义丰富、具有书面语色彩的固定短语。 谚语:谚语是群众口中通俗精炼、含义深刻......

    《现代汉语》课后习题答案

    现代汉语 课后习题答案 第一章 绪论”习题答案 “绪论”思考和练习一 一、什么是现代汉民族共同语?它是怎样形成的? 现代汉民族的共同语就是“以北京语音为标准音,以北方话......