C课后习题参考答案.doc

上传人:仙人指路1688 文档编号:4105725 上传时间:2023-04-04 格式:DOC 页数:35 大小:120KB
返回 下载 相关 举报
C课后习题参考答案.doc_第1页
第1页 / 共35页
C课后习题参考答案.doc_第2页
第2页 / 共35页
C课后习题参考答案.doc_第3页
第3页 / 共35页
C课后习题参考答案.doc_第4页
第4页 / 共35页
C课后习题参考答案.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《C课后习题参考答案.doc》由会员分享,可在线阅读,更多相关《C课后习题参考答案.doc(35页珍藏版)》请在三一办公上搜索。

1、习 题 参 考 答 案习 题 1一、选择题1、B 2、C 3、B 4、D 5、A 6、B 7、C二、填空题1、源程序文件 c 2、obj 3、可执行文件 exe 4、机器语言 汇编语言 高级语言三、解答题略四、编程题1、 main() printf(“Hello! Welcome to China!”);2、 main() int x; scanf(“%d”,&x); if(x=20&x=A&ch1=Z ch1=ch1-32;三、编程题1、从键盘输入三个数,然后按照由小到大的顺序输出。要求,设三个数放在变量a、b、c中,最后仍然按照a、b、c的顺序输出。#include main()int a

2、,b,c,t; scanf(“%d,%d,%d”,&a,&b,&c); if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; printf(“%d,%d,%dn”,a,b,c);2、编写程序根据以下的函数关系,对输入的x值输出相应的y值。xy2x=10x(x+2)-1x=22xX=-1x-1#include main()float x,y; scanf(“%f”,&x); if(x=-1) y=x-1; else if(x=2) y=2*x; else if(x=10) y=x*(x+2);else printf(“

3、Error!n”); printf(“y=%fn”,y);3、求一元二次方程ax2+bx+c=0的解。#include main()float a,b,c,d,disc,x1,x2,realpart,imagpart; scanf(“%f,%f,%f”,&a,&b,&c); if(fabs(a)=1e-6) Printf(is not a quadratic); else disc=b*b-4*a*c; if(fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(“has distinct real r

4、oots:%8.4f and %8.4fn”,x1,x2); else realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(“has complex roots:n”); printf(“%8.4f+%8.4fin”, realpart,imagpart); printf(“%8.4f-%8.4fin”, realpart,imagpart); 4、假设工资税率如下,其中s代表工资,r代表税率:s500 r=0%500=s1000 r=5%1000=s2000 r=8%2000=s3000 r=10%3000=3000) r=0.15;

5、g=salary/500; switch(g)case 1: r=0.05; case 2: case 3: r=0.08; case 4: case 5: r=0.10; salary=salary*(1-r); printf(“%dn”,salary);习 题 5一、选择题1、A 2、C 3、C 4、D 5、A 6、A7、A 8、B 9、C 10、B 11、B 12、D二、填空题1、continue2、1n=999或n=0或x=0.0 2xmin或x=min4、1 i10 2 j%3!=05、1t=1 2n=i6、1n 2flag=1 3n7、1ji 21/term8、1sumk 2j-2

6、三、编程题1、#include main()int m,n,p,r,temp; printf(“Please input m,n:”); do scanf(“%d%d”,&m,&n); while(m=0|n=0); if(nm) temp=n; n=m; m=temp; /*确保大数放到n中*/ p=n*m; /*保留n和m的乘积到p中,以便求最小公倍数*/ while(m!=0) /*求n和m的最大公约数*/ r=n%m; n=m; m=r; printf(“最大公约数为:%dn”,n); printf(“最小公倍数为:%dn”,p/n);2、#include main()char c;

7、int letter=0,space=0,digit=0,other=0; printf(“Please input a line character:”); while(c=getchar()!=n) if(c=a&c=A&c=0&c=9) digit+; else other+; printf(“Letter is %d,Space is %d,Digit is %d,Other is %d,”,letter,space,digit,other);3、main()int m,s,i; for(m=2;m1000;m+) s=0; for(i=1; im; i+) if(m%i)=0) s=

8、s+i; if(s=m) printf(“%d its factors are ”,m); for(i=1; im; i+) if(m%i=0) printf(“%d,”,i); printf(“n”); 4、main()int i,a,min,max; scanf(“%d”,&a); min=a;max=a; for(i=2;i=100;i+) scanf(“%d”,&a); if(amax) max=a; printf(“Max=%d,Min=%dn”,max,min);5、#include #define N 20main()int i,t; float a=2,b=1,s=0; for

9、(i=1;i=N;i+) s=s+a/b; t=a; a=a+b; /*将前一项的分子与分母之和作为下一项的分子*/ b=t; /*将前一项的分子作为下一项的分母*/ printf(“Sum=%fn”,s);6、问题分析:设王先生的岁数是x,他夫人的岁数是y,可得到如下方程组:这是一个非线性方程组的求解,无法手算求解,可以用穷举法求解。考虑到实际可能,x、y可以在20100范围内取值,逐一穷兴出x、y所有可能的取值判断是否满足上述方程组,若满足,这一组解就是要求的解。程序如下:main()int x,y; for(x=20;x=100;x+) for(y=20;y=100;y+) if(x*x

10、+y=1053&x+y*y=873) printf(“x=%d y=%dn”,x,y);7、 main() long int k,g,s=0; printf(Please input an integer:); scanf(%ld,&k); do g=k%10; printf(%2d,g); k=k/10; while(k!=0); 8、(1)main() int i,j; for(i=1;i=9;i+) for(j=i;j=9;j+) printf(%d*%d=%2d ,i,j,i*j); printf(n); (2)main() int i,j,k; for(i=1;i=9;i+) for

11、(k=1;ki;k+) printf( ); for(j=i;j=9;j+) printf(%d*%d=%2d ,i,j,i*j); printf(n); 9、#include main() int i=0; long s,n,j,x; for(j=100;j0) /*求原数j的反序数*/ s=s*10+x%10; x=x/10; if(s=j) /*判断反序数s与原数j是否相等*/ i+; printf(%4ld,j); if(i%10=0) printf(n); /*每行输出10个回文数*/ 10、#include main()int x,y,z; for(x=1;x20;x+) for(

12、y=1;y33;y+) for(z=3;z100;z+=3) if(x*5+y*3+z/3)=100&x+y+z=100) printf(“公鸡有%d只,母鸡有%d只,小鸡有%d只n”,x,y,z); 11、#include #include main()int n=1; double x,sum=0,term=1.0; scanf(“%lf”,&x); while(fabs(term)=1e-6) sum+=term; term*=-x*x/(n*(n+1); n=n+2; printf(“cos(%lf)=%lf ,%lf n”,x,sum,cos(x);12、问题分析:用迭代法求平方根的

13、算法如下: (1)设定一个x的初值x0; (2)用上述公式求出x的下一个值x1; (3)再将x1代入上述公式,求出x的下一个值x2; (4)如此继续下去,直到前后两次求出的x值(xn+1和xn)满足。为便于程序处理,令x的初值x0=a/2(也可以是其他值),求出x1。程序实现如下:#include main()float a,x0,x1; printf(“Please input a positive number:”); scanf(“%f”,&a); /*输入a的值*/ x0=a/2; x1=(x0+a/x0)/2; do x0=x1; x1=(x0+a/x0)/2; while(fabs

14、(x1-x0)=1e-5); printf(“The square root of %f is %f, the true root is %fn”,a,x1,sqrt(a); 13、程序如下:#include 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(“The root is %fn”,x);14、#include #include #define epsilon 0.00

15、001 /*定义要求的精度*/float f(float x) /*求函数值*/return(2*x*x*x-4*x*x+3*x-6);main()float a,b,x; scanf(%f%f,&a,&b); /*输入求根区间*/ if(f(a)*f(b)=0) /*判断是否符合二分法使用的条件*/ printf(不满足二分法使用条件,退出!);exit(0); do x=(a+b)/2; if(f(x)*f(b)=epsilon); /*判断是否达到精度要求,如果没达到,继续循环*/ x=(b+a)/2; /*取最后的小区间中点作为根的近似值*/ printf(x=%fn,x); /*输出

16、函数的近似根*/15、#define N 4main()int i,j,k;for(i=0;iN;i+) for(j=0;j=N-i;j-) printf(*); for(j=N-1;j=N-i;j-) printf(*); for(j=0;jN-i-1;j+) printf( );/*本行也可以不要*/ printf(n); 习 题 6一、选择题1B2D3D4D5A6C二、填空题阅读程序写出运行结果题1第一行:1 4 3第二行:2 5 82第一行:124第二行:357第三行:689三、编程题1# include main()char str120, str210;int i=0,j=0;ge

17、ts(str1);gets(str2)while(str1i!=0) i+;while(str2j!=0) str1i+=str2j+;str1i=0;puts(str1);2 # define M 3# define N 4# include main()int i, j, m;int aMN=1,2,3,4,5,6,7,8,9,10,11,12, ppN;for (j=0; jN; j+)m=a0j; /*将m值设为每一列的第一行元素的值*/for (i=0; iM; i+) /*找每一列的最小值,赋给m*/if (aij m)m=aij;ppj=m; /*将每一列的最小值m存入pp数组*

18、/for (j=0; jN; j+) /*输出pp数组*/printf(“%d ”, ppj);3# include void find (int a55)int i, j, row, col, sum1, sum2;for (i=0;i5;i+)for (j=0;j5;j+)sum1=sum2=0;for (col=0;col5;col+)sum1+=aicol;for (row=0;row5;row+)sum2+=arowj;if (sum1= =sum2)printf(“a%d%d:%dn”, i, j, aij);main()int i, j, a55=2,8,1,9,4,5,7,1,

19、3,0,7,1,7,5,2,3,2,2,1,5,0,2,1,6,8;for (i=0;i5;i+)for (j=0;j5;j+)printf(“%4d”, aij);printf(“n”);find(a);4#include #include main() int a35,x,y,i,j,k,flag=0;int max,min;for(i=0;i3;i+)for(j=0;j5;j+) scanf(%d,&aij); /*/for(i=0;i3;i+) max=ai0;y=0;for(k=1;k5;k+) if(maxaik) y=k;max=aik;min=aiy;x=i;for(k=0;k

20、aky) x=k;min=aky;if(i=x) printf(a%d%d=%d is Andiann,x,y,axy);flag=1; if(flag=0) printf(nNot found Andian!);5# include # define N 10void crl (int a )int i, j, max=0, min=0, temp;for (i=1; iai) min=i;temp=amin;j=min;while (j0)aj=aj-1;j-;a0=temp;for (i=1; iN; i+)if (amaxai) max=i;temp=amax;j=max;while

21、(jN-1)aj=aj+1;j+;aN-1=temp;main()int aN=8,5,6,9,4,1,-1,7,3,2;int i;crl(a);for (i=0; iN; i+) printf(“%5d”,ai);printf(“n”);6# include # include int Replace_string(char line , char str1 , char str2 )int i=0, j, loc;char temp80;while(i=strlen(line)-strlen(str2)j=0; loc=i;while(str1j= =lineloc&str1j!=0)l

22、oc+; j+; if (str1j= =0)strcpy(temp, &lineloc);strcpy(&linei, str2);i+=strlen(str2);strcpy(&linei, temp);return 1;else i+;return 0;习 题 7 一、选择题1.A 2.A 3. D 4.C 5. A6.C 7.B 8.C 9.B10.D二、填空题1a=0,b=7 21103204abc,ABC,bc,BC,c,C,51 46. len+ p+三、编程题1、编写一个程序,将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该字符串,请用指针完成。mai

23、n()char ch20=computer,*p=ch; int i; for(i=0;i0) strcpy(p,p1);strcpy(p1,p2); strcpy(p2,p); p1=str1;p2=str3; if(strcmp(str1,str3)0) strcpy(p,p1);strcpy(p1,p2); strcpy(p2,p); p1=str2;p2=str3; if(strcmp(str2,str3)0) strcpy(p,p1);strcpy(p1,p2); strcpy(p2,p); printf(Now,the order is:n); printf(%sn%sn%sn,s

24、tr1,str2,str3);3、求一个33矩阵主对角线元素之和。main()int a33,*p,i,s=0; for(i=0;i3;i+) scanf(%d%d%d,&ai0,&ai1,&ai2); p=&a00; for(i=0;i3;i+) s=s+*(p+3*i+i); printf(%dn,s);4、将一个33矩阵转置。main()int a33,*p; int i,j,t; printf(Input matrix:n); for(i=0;i3;i+) scanf(%d%d%d,&ai0,&ai1,&ai2); p=&a00; for(i=0;i3;i+) for(j=i;j3;j

25、+) t=*(p+3*i+j); *(p+3*i+j)=*(p+3*j+i); *(p+3*j+i)=t; printf(Now,matrix:n); for(i=0;i3;i+) printf(%d %d %dn,ai0,ai1,ai2);5、输出给定的字符串中某一个字符前面的一串字符。如指定字符a,则对字符串Fortran program,输出Fortr。若无指定字符,则输出相应的提示信息。#includemain()int i,n=0; char *ptr,str10,ch; printf(Input a string:n); scanf(%s,str); ptr=str; getcha

26、r(); printf(Please input a charactern); scanf(%c,&ch); while(ch=n) printf(Please input a character again!); scanf(%c,&ch); while(*ptr!=ch) ptr+;n+; for(i=0;in;i+) printf(%c,*(str+i);注意:本题中getchar()的作用是吸收键入给第一个scanf函数的字符串尾部的回车符,如果无getchar(),则将无法正确输入字符给变量ch。6、输入一行字符,计算其中大写字母、小写字母、数字、空格及其他字符的数目。#includ

27、e main()int upper=0,lower=0,digit=0,space=0,other=0,i=0; char *p,s20; printf(Input a string:); while(si=getchar()!=n) i+; p=s;/*使p指向数组s的首地址*/ while(*p!=n) if(A=*p)&(*p=Z) +upper; else if(a=*p)&(*p=z) +lower; else if(*p= ) +space; else if(*p=0) +digit; else +other; p+; printf(upper case:%d lower case

28、:%d ,upper,lower); printf(space:%d digit:%d other:%dn,space ,digit,other);7、从一个给定的字符串中找出某一子字符串的位置(从1开始)。例如子串“efg”在字符串“abcdefghijk”中位置为5。若字符串中没有指定的子串,则标记为0。#includemain()int i,n=0; char str120,str220,str320; char *p1=str1,*p3=str3,*p=str1; printf(Input a string:n); gets(str1); printf(Please input a s

29、ubstring:n); gets(str2); n=strlen(str2); while(*p1!=0) for(i=0;in;i+)/*本for循环用于生成与str2进行比较的字符串*/ *p3=*p+;p3+; *p3=0;/* 在新生成的字符串尾添加结束符 */ if(strcmp(str3,str2)=0)/*新生成的字符串存放在str3中*/ printf(substrings position is:%dn,p1-str1+1); p1=0; else p1+;/*使p指向字符串str1的下一字符*/ p=p1; p3=str3;/*使p3重新指向数组str3首地址*/ if(

30、*p1=0) printf(Substring is not in the string!);注意:由于gets函数可以接收带有空格的字符串,所以本题中采用gets而未采用不可接收带空格字符串的函数scanf。8、编程删除字符串中的所有空白字符。main()char str120,str220; char *p1,*p2; printf(Please input a string:n); gets(str1); /*str1用于存放原始字符串*/ p1=str1; p2=str2; /*str2用于存放去掉空格后的字符串,使p2指向str2*/ while(*p1!=0) if(*p1!= )

31、 *p2=*p1+;/*将原始字符串中的字符依次赋值给str2*/p2+; else p1+; /* 遇空格符,只移动指针p1,而不把空格符赋值给str2 */ printf(New string is:n%sn,str2);9、有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。main() int i,num20,*p,n=0,m,k; printf(Input the number of people:n=); scanf(%d,&n); for(i=0;in;i+) numi=i+1;/*以1至n为序给每个人编号*/ p

32、=num; m=0;/* m为退出人数*/ i=0; /* i为每次循环时的计数变量*/ k=0;/* k为按1,2,3报数时的计数变量*/ while(mn-1)/*当退出人数比n-1少时(未退出人数大于1时)执行循环体*/ if(*(p+i)!=0) k+; if(k=3)/*本if分支对退出的人的编号赋值为0*/ *(p+i)=0; k=0;/*重新从1到3报数*/ m+;/*退出人数加1*/ i+; if(i=n) i=0;/*报数到一圈人的尾部时,i恢复为0,也即使人围成一圈*/ while(*p=0) p+; printf(The last one is NO.%dn,*p);10、有一个字符串,包含n个字符。编程实现:将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。main() char str120,str220; char *p=str1; int n,m,i; printf(Please input a string:n); gets(str1); n=strlen(str1); printf(Which character that begi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号