《精通C程序设计教程》二~九章习题答案_第1页
《精通C程序设计教程》二~九章习题答案_第2页
《精通C程序设计教程》二~九章习题答案_第3页
《精通C程序设计教程》二~九章习题答案_第4页
《精通C程序设计教程》二~九章习题答案_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精通C程序设计教程部分习题答案2005年4月说明:本答案没有仔细校对,如果发现错误,请自行更正; 蓝色的程序经过了上机验证.第二章 C源程序基本语法与顺序结构简单程序设计2.10 ABEFG2.11 ACFHJMNPQRT2.12 (1)3 (2)0 (3)0 (4)1 (5)1 (6)160 (7)4 (8)4 (9)8 (10)8(11)1 (12)2 (13)1 (14)0 (15)6 (16)0 (17)29(18)3 (19)1 (20)12.13 2.52.14 3.52.15 (1) 4 3 1 1 (2) 4 2 2 2 (3) 3 2 1 2 2.16 (1) 0 0 (2)

2、 100 100 (3) 2 2 (4) 1 1(5) 20 20 (6) 114 115 2.17 (1) y*y*y*y*(a*a-b*b) (2) sin(y/sqrt(x*x+y*y)(3) sqrt(1+3.14/2*tan(48.5/180*3.14)(4) a/x/(a/(a+y)+b/(a+b/(a+b/z)(5) p*q*(r+1)*(r+1)/(r+1)*(r+1)-1)(6) fabs(3-exp(-x)*log(fabs(1+x)2.20 #include “stdio.h”void main()long a;int b; double x;float y; scanf

3、(“%ld%d%lf%f”,&a,&b,&x,&y); printf(“a=%lo,b=%.0f,x=%0G,y=%Lgn”,a,(float)b,x,(long double)y);2.22 #include “stdio.h”#include “math.h”void main() double a,b,c,p,s; printf(“Input a b c:”);scanf(“%lf%lf%lf”,&a,&b,&c); p=0.5*(a+b+c); s=sqrt(p*(p-a)*(p-b)*(p-c); printf(“s=%.4fn”,s);2.23 解:第1月开始: a(尚未还清的借款

4、本金)第2月开始: a(1+p)-x第3月开始: (a(1+p)-x)(1+p)-x=a(1+p)2-x(1+p)-x第4月开始: (a(1+p)2-x(1+p)-x)(1+p)-x=a(1+p)3-x(1+p)2-x(1+p)-x第n+1月开始:a(1+p)n-x(1+p)n-1+(1+p)n-2+1)=0 于是#include stdio.h#include math.hvoid main() double a,p,x;int n; printf(Input a n p:);scanf(%lf%d%lf,&a,&n,&p); x=a*p*pow(1+p,n)/(pow(1+p,n)-1);

5、 printf(x=%.2fn,x);输入a n p为 120 0.004,输出为1050.91第三章 选择结构与循环结构3.3 a=2, b=1, c=23.4 x=10, y=63.5 BCD153.6 循环体共执行了3次,输出为: 12 93.7 abcd43.8 解:a的值就是循环体被执行的次数先分析内两层循环: 最内层循环次数j=1 1j=2 2 j=i i总计: 1+2+i=由于i从1循环到n-1,因此,总的循环次数是3.9 BF3.10#include main() char c,i , ;long s=0; for(i=1;i=10;i+) ; c=getchar();if(1

6、=c=1&c100) p+=(I-100)*0.01; I=100; if(I60) p+=(I-60)*0.015;I=60; if(I40) p+=(I-40)*0.03;I=40; if(I20) p+=(I-20)*0.05;I=20; if(I10) p+=(I-10)*0.075;I=10; p+=I*0.1; printf(“p=%fn”,p);/* switch语句求解 */#include “stdio.h”void main() double I, p=0; printf(“Input I=”);scanf(“%lf”,&I); if(I=100) p+=(I-100)*0

7、.01;I=100; swith(int)(I/10) case 10: case 9:case 8:case 7:case 6: p+=(I-60)*0.015;I=60;case 5:case 4: p+=(I-40)*0.03;I=40;case 3:case 2: p+=(I-20)*0.05; I=20;case 1: p+=(I-10)*0.075;I=10;default: p+=I*0.1; printf(“p=%fn”,p);3.19 解:#include “stdio.h”void main() int s1,s2,s3; float av; char level; whi

8、le(1) printf(“Input three scores of one student:n”); scanf(“%d%d%d”,&s1,&s2,&s3); if(s10|s20|s30) break; av=(s1+s2+s3)/3.0F; switch(int)(av/10) case 9:case 10: level=A;break; case 8:level=B;break; case 7:level=C;break; case 6:level=D;break; default:level=F; printf(“level=%cn”,level); 第四章 基本程序设计技术4.3

9、 解:#include “stdio.h”void main() double s,a;int k,n; printf(“Input n=”);scanf(“%d”,&n); s=0;a=1; for(k=0;k0#include stdio.hvoid main() int n,m,k,c; printf(Input n m=);scanf(%d%d,&n,&m); if(n-mm) m=n-m; c=1; for(k=1;k1e-6) s+=a;k+=2;a*=-x*x/k/(k-1); printf(sin(%.4f)=%.4fn,x,s);4.6 用公式计算近似值,计算时取1000个因

10、子解:#include stdio.hvoid main() int n;double pi=1; for(n=2;n0#include stdio.hvoid main() int n,k;double x,a,b,s=0; printf(Input x n=);scanf(%lf%d,&x,&n); a=x*x/(1+x*x);b=1; for(k=1;k=n+1;k+) s+=b;b*=a*(2*k)/(2*k+1); s*=x/(1+x*x);printf(s=%fn,s);程序输入x,n 为0.5 100,输出为0.4.8 输入x值(|x|1) 。要求计算到最后一项绝对值小于10-6

11、时停止计算解:#include stdio.h#include math.hvoid main() float x,s,a;int k; printf(Input x=);scanf(%f,&x); if(x=1) printf(Input is not correct.n);return; a=x;s=0;k=1; while(fabs(a)1e-6) s+=a/k;a*=x;k+; printf(s=%.4fn,s);4.10计算Fibonaui分数序列前n项之和#include stdio.hmain() int i,n,t;float a=2,b=1,s=0;scanf(%d,&n);

12、for(i=1;i=n;i+)s=s+a/b; t=a; a=a+b;b=t printf(s=%10.2n,s);4.13 韩信点兵:有兵一队,五伍剩一,六伍剩五,七伍剩四,十一伍剩十,问兵几何?解:#include stdio.hvoid main() int m; for(m=1;m=10000;m+) if(m%5=1&m%6=5&m%7=4&m%11=10) printf(m=%dn,m);1万以内的解有4个:即2111, 4421, 6721, 90414.14 解:#include stdio.hvoid main() int man,child,women; printf(%8

13、s%8s%8sn,man,women,child); for(man=1;man17;man+)for(women=1;women=1&man+women+child=30) printf(%8d%8d%8dn,man,women,child);4. 15 将一张面值100元的人民币兑换为5元,2元,1元和5角的零钞,要求零钞总数不超过40张且每种至少1张,求所有兑换方案。(要求每输出20个解之后暂停输出,按任意键之后,继续输出)解:#include stdio.h#include conio.hvoid main() int i5,i2,i1,i0_5,count=0; for(i5=1;i

14、5=20;i5+) for(i2=1;i237;i2+) for(i1=1;i1=1&i5+i2+i1+i0_5=40) printf(%4d%4d%4d%4dn,i5,i2,i1,i0_5); count+; if(count%20=0) printf(press any key to continue.n); getch(); 4. 16 解:#include stdio.hvoid main() long s;int a,b,c,d; for(a=1;a=9;a+)for(b=1;b=9;b+) for(c=1;c=9;c+)for(d=1;d=9;d+) s=+a*10000+(475

15、0+b-(3049+c*100)*(106+d*10); if(s=) printf(%4d%4d%4d%4dn,a,b,c,d);4. 17 解:#include stdio.hvoid main() int i,j,n; printf(Input n=);scanf(%d,&n); for(i=1;i=n;i+) for(j=1;j=40-i;j+) putchar(32); for(j=1;j=1;j-) printf(%d,j);putchar(n); 4.18 打印如下图形,打印行数n由用户输入。要求把图形放在屏幕中央。 a a b a a b c b a a b c d c b a

16、a b c d e d c b a解:#include stdio.hvoid main() int i,j,n;int w=3; printf(Input n=);scanf(%d,&n); for(i=1;i=n;i+) printf(%*s,40-i*w,); for(j=1;j=1;j-) printf(%*c,w,a+j-1);printf(n); 4.19 解:#include stdio.hvoid main() int n,i,j; printf(Input n=);scanf(%d,&n); if(n%2=0) printf(Input is not correct.n);r

17、eturn; n=n/2+1; for(i=1;i=n;i+) printf(%*s,n-i,); for(j=1;j=1;i-) printf(%*s,n-i+1,); for(j=1;j=2*i-1;j+) putchar(*);printf(n); 4. 20 解:#include stdio.hvoid main() int n,i,j; printf(Input n=);scanf(%d,&n); if(n%2=0) printf(Input is not correct.n);return; n=n/2+1; for(i=1;i=n;i+) printf(%*s,n-i,); fo

18、r(j=1;j=1;i-) printf(%*s,n-i+1,); for(j=1;j=2*i-1;j+) putchar(j=1|j=2*i-1?A+i-1:-);printf(n); 4.21 解:#include stdio.hvoid main() int i,j,n,a=1,b; printf(Input n=);scanf(%d,&n); for(i=1;i=n;i+) b=a; for(j=1;j=n;j+) printf(%4d,b);b+=j; printf(n); a+=i; 4.22 解:#include stdio.hvoid main() int i,j; for(i

19、=1;i=9;i+) printf(%*s,6*(i-1),); for(j=i;j=9;j+) printf(%d*%d=%-2d ,i,j,i*j);printf(n); 4. 23 解:#include stdio.h#include math.h#include conio.hvoid main() int m,k,i,count=0; for(m=3;m=1000;m+=2) k=(int)sqrt(m); for(i=3;ik) k=(int)sqrt(m+2); for(i=3;ik) printf(%4d%4dn,m,m+2);count+; if(count%20=0) pr

20、intf(Press any key to continue.n);getch(); 4. 24 解:#include stdio.hvoid main() int m,i,s; for(m=1;m=1000;m+) s=1; for(i=2;i=m/2;i+) if(m%i=0) s+=i;if(s=m) printf(%d=1,m); for(i=2;i=m/2;i+) if(m%i=0) printf(+%d,i); printf(n); 4. 25 解:gcd(a1,a2,an-1,an)=gcd(gcd(a1,a2,an-1),an) lcm(a1,a2,an-1,an)=lcm(l

21、cm(a1,a2,an-1),an)#include stdio.hvoid main() int a,lcm=0,gcd=0,t,b;long m; printf(Input natural numbers until input 0:n); while(1) scanf(%d,&a);if(a=0) break; b=a; while(gcd) t=a%gcd;a=gcd;gcd=t; gcd=a;a=b;m=(long)a*lcm;while(lcm) t=a%lcm;a=lcm;lcm=t; lcm=m=0?a:(int)(m/a); printf(gcd=%d,lcm=%dn,gcd

22、,lcm);4.26#include stdio.h#include math.hvoid main() long m,p; for(m=2;m=10000;m+) p=(long)(log(m)/log(10)+1);p=(long)pow(10,p); if(m*m%p=m) printf(%ld:%ld*%ld=%ldn,m,m,m,m*m); 4.27 解:#include stdio.hvoid main() int i,j,s1,s2,k,c=0; for(i=1;i=1000;i+) for(j=i+1;j=1000;j+) s1=0; for(k=1;k=i/2;k+) if(

23、i%k=0) s1+=k; s2=0; for(k=1;k=j/2;k+) if(j%k=0) s2+=k; if(s1=j&s2=i) printf(%4d %4dn,i,j); 第五章 数组5.4 解:/* 方法1:另辟数组空间进制复制*/#include stdio.h#define N 8void main() int aN,bN,i,j; printf(Input %d integer numbers:n,N); for(i=0;iN;i+) scanf(%d,&ai); j=0; for(i=0;iN;i+) if(ai%2=1) bj+=ai; /* 先复制奇数 */ for(i

24、=0;iN;i+) if(ai%2=0) bj+=ai; /* 再复制偶数 */ for(i=0;iN;i+) printf(%4d,bi); printf(n);/* 方法2:不另辟数组空间进制复制*/#include stdio.h#define N 8void main() int aN,i,j,t; printf(Input %d integer numbers:n,N); for(i=0;iN;i+) scanf(%d,&ai); j=0; for(i=0;iN;i+) if(ai%2=1) t=aj;aj+=ai;ai=t; for(i=0;iN) printf(Input is

25、too big.n);return; for(i=0;in;i+) ai0=aii=1; for(i=2;in;i+) for(j=1;ji;j+) aij=ai-1j+ai-1j-1; for(i=0;in;i+) for(j=0;j=i;j+) printf(%4d,aij); printf(n); 5.9 解:#include stdio.h#define N 10void main() int aN,i,j; printf(Input %d integer numbers:n,N); for(i=0;iN;i+) scanf(%d,&ai); for(i=j=0;i=0) aj+=ai

26、; for(i=0;ij;i+) printf(%6d,ai); printf(n);5.12 解:k=-1 bi=1 ai ck+ =a&si=A&si=0;i-) putchar(si); printf(n);/*指针法*/#include stdio.hvoid main() char s81,*p; printf(Input a string:);gets(s); for(p=s;*p;p+) if(*p=a&*p=A&*p=s;p-) putchar(*p); printf(n);6.10 解:#include stdio.hvoid main() char s81,*p;int c

27、ount=0; printf(Input a string:);gets(s); for(p=s;*p;p+) if(*p=0&*p=9) count+; printf(number of digits=%dn,count);6.11 解:/*下标法*/#include stdio.h#define N 8void main() int aN,i,j,x,m; printf(Input %d integer numbers:n,N); for(i=0;iN;i+) scanf(%d,a+i); printf(Input m=);scanf(%d,&m); for(i=1;i=m;i+) x=a

28、0;for(j=1;jN;j+) aj-1=aj; aN-1=x; for(i=0;iN;i+) printf(%4d,ai); printf(n);/*指针法*/#include stdio.h#define N 8void main() int aN,i,*p,x,m; printf(Input %d integer numbers:n,N); for(p=a;pa+N;p+) scanf(%d,p); printf(Input m=);scanf(%d,&m); for(i=1;i=m;i+) x=*a;for(p=a+1;pa+N;p+) p-1=*p; *(p-1)=x; for(p

29、=a;pa+N;p+) printf(%4d,*p); printf(n);6. 14 解:#include stdio.h#include stdlib.hvoid main() int *p,n,i,max,min;double av; printf(Input n=);scanf(%d,&n); if(n=0) printf(Input is not correct.n);return; p=(int *)malloc(n*sizeof(int); if(p=NULL) printf(Not enough memory.n);return; printf(Input %d scores:

30、n,n); for(i=0;in;i+) scanf(%d,p+i); av=max=min=p0; for(i=1;imax) max=pi; else if(pimin) min=pi; av+=pi; av/=n;printf(max=%d,min=%d,av=%.2fn,max,min,av); free(void *)p);6.16 解:#include stdio.h#include string.h#define MaxLen 80void main() char s1MaxLen+1,s2MaxLen+1;int n,i,len1,len2; printf(Input stri

31、ng 1:n);gets(s1); printf(Input string 2:n);gets(s2); printf(Input n=);scanf(%d,&n); len1=strlen(s1);len2=strlen(s2); if(nlen1) printf(Insert position is not correct.n);return; if(len1+len2MaxLen) printf(Not enough memory to contain the combined strings.n); return; s1len1+len2=0; for(i=len1-1;i=n;i-)

32、 s1i+len2=s1i; for(i=0;ilen1) if(len+len2-len1MaxLen) printf(Not enough space.n);return; else for(q=s+len;q=p+len1;q-) *(q+len2-len1)=*q; if(len2len1) for(q=p+len1;q=s+len;q+) *(q+len2-len1)=*q;for(i=0;i=p+maxlen;q-) q1=p;q2=q;len=q2-q1+1; while(q1=q2) if(lenmaxlen) maxlen=len;pmax=p;break; p+;if(s+

33、strlen(s)-p1) for(i=0;i=2;k-) n/=10; return (int)(n%10);void main() long n;int k; printf(Input n k:);scanf(%ld%d,&n,&k); printf(%dn,digit(n,k);7.10 解:#include stdio.h#include math.h#include conio.hisprime(int n) int k,m; m=(int)sqrt(n+1); for(k=2;km;void main() int n,p,c=0; for(n=4;n=1000;n+=2) for(

34、p=2;p=10) c+=55;else c+=48;bufi+=c; for(-i;i=0;i-) printf(%2c,bufi);void main() long x; printf(Input a long integer number:);scanf(%ld,&x); tohex(x);printf(n);/*递归算法*/#include stdio.hvoid tohex(unsigned long x) if(x=0) return; tohex(x/16); x%=16; if(x=10) x+=55;else x+=48; printf(%2c,(char)x);void m

35、ain() long x; printf(Input a long integer number:);scanf(%ld,&x); tohex(x);printf(n);7.12 解:/*非递归算法*/#include stdio.h#include string.hvoid reverse(char *s) char *p,*q,t; p=s;q=s+strlen(s)-1; while(p=q) return; t=*p;*p=*q;*q=t; reverse(p+1,q-1);void main() char s81; printf(Input a string:n);gets(s);

36、reverse(s,s+strlen(s)-1); printf(Reversed string is n);puts(s);7.13 解:#include stdio.hvoid gw(char *s,char *word) int maxlen,len;char *pmax; maxlen=0;len=0; while(1) if(*s=a&*s=A&*smaxlen) maxlen=len;pmax=s-len; len=0; if(*s=0) break; s+; for(;maxlen=1;maxlen-) *word+=*pmax+; *word=0;void main() char s256,word32; printf(Input a English sentence:n);gets(s); gw(s,word); printf(The longest word isn);puts(word);7.14 解: 1 m=0 = m0#include stdio.hlong comb(long n,long m) if(m=0) return 1L; return (n-m+1)*comb(n,m-1)/m;void main() long n,m; printf(Input n m:);s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论