C语言程序设计第2版课后习题答案(贾宗璞许合利人民邮电第2版)_第1页
C语言程序设计第2版课后习题答案(贾宗璞许合利人民邮电第2版)_第2页
C语言程序设计第2版课后习题答案(贾宗璞许合利人民邮电第2版)_第3页
C语言程序设计第2版课后习题答案(贾宗璞许合利人民邮电第2版)_第4页
C语言程序设计第2版课后习题答案(贾宗璞许合利人民邮电第2版)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言习题答案第1章1选择题C(2)B(3)A2填空题(1)main(2)main(3)有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性(4)顺序、分支和循环(5)自顶向下,逐步细化、模块化设计、结构化编码第2章1选择题123456789012345ACCDADCABABBDDB2、填空题(1)数字、字母、下划线(2)0(3)4、8(4)(a+b)*c/(a-b)(5)60(6)16(7)9(8)6、4、2(9)0(10)10、6(11)5.500000(12)12、4(13)0(14)16(15)6.63、编程题(1)编写一个程序求各种类型数据的存储长度。#includemain(

2、)printf(int:%dbyten,sizeof(int);printf(shortint:%dbyten,sizeof(shortint);printf(longint:%dbyten,sizeof(longint);printf(float:%dbyten,sizeof(float);printf(double:%dbyten,sizeof(double);printf(longdouble:%dbyten,sizeof(longdouble);printf(char:%dbyten,sizeof(char);(2)#include#defineRAT1.60934main()floa

3、tk;printf(inputthekm:);scanf(%f,&k);printf(mile:%fn,k/RAT);第3章1选择题1234567890(10):DDCDDDCDCC2解析题x=170,x=uuu170,x=uuu252,x=uuuuaa,x=uuu170 x=170,x=170uuu,x=uuu170,x=%6da=513.789185,a=uu513.79,a=513.78918457,a=513.78918457a=3ub=7x=85uy=7182c1=Auc2=a/3编程题(1)main()intx,y;scanf(%d%d,&x,&y);printf(商数=%d,余数

4、=%d,x/y,x%y);(2)main()doublex,y,z,avg;scanf(%lf%lf%lf,&x,&y,&z);avg=(x+y+z)/3;printf(%.1f,avg);第4章1选择题(10)CCAADCCABD2填空题a0&b0|a0&c0|b0&c0avb|avca5|-a5(av=0)&(int)a)!=a(a%b)!=0!(x0)1!(x=0&xv=5)TOC o 1-5 h z3、2、2ch=A&chv=Zch=ch-32xv=10&x2xv=2&x-1y=-1;a+bc&a+cb&b+caa=b&a=ca=b|a=c|b=cxv0c=x/10y!=-23编程题(

5、1)#includemain()intx;printf(pleaseinputanumber:);scanf(%d,&x);if(x%2=0)printf(xisaevennumber);elseprintf(xisaoddnumber);(2)#includemain()intx,y;printf(pleaseinputanumber:);scanf(%d,&x);if(x-5&x0&x10)y=x+1;printf(%d,y);elseprintf(thenumberiserror);(3)#includemain()inta,m;printf(pleaseinputanumber:);s

6、canf(%d,&a);switch(a/10)case0:case1:case2:m=1;break;case3:m=2;break;case4:m=3;break;case5:m=4;break;default:m=5;break;printf(%d,m);(4)#includemain()floatprice,tax;printf(pleaseinputthepriceofproduct:);scanf(%f,&price);if(price=10000)tax=price*0.05;elseif(price=5000)tax=price*0.03;elseif(price=1000)t

7、ax=price*0.02;elsetax=0;printf(%f,tax);(5)#includemain()floatscore;printf(pleaseinputthescoreofstudent:);scanf(%f,&score);if(score=85)printf(VERYGOOD);elseif(score=60)printf(GOOD);elseprintf(BAD);(6)#includemain()intx,y,z;printf(inputtwonumber:);scanf(%d%d,&x,&y);if(x99|y99)printf(inputdataerror!n);

8、elsez=(x/10)*1000+(y/10)*100+(x%10)*10+y%10;printf(%dn,z);第5章R71选择题d(2)c(3)a(4)d(5)a(6)d(7)d(8)b(9)d(10)b(11)c(12)a(13)d(14)d(15)c2填空题(1)fahrcelsius=5.0/9*(fahr-32)fahr+=step(2)5、4、6(3)3*i-2yz*=x(5)8U5U2(6)j+i%j=Oj=i(或j=i)(7)sumksum=kj-2(8)s=0p=1j=i3改错题(1)第一处改正:For改为for第二处改正:for(k=l;kv=4;k+)或for(k=0

9、;kv4;k+)第三处改正:ave=sum/4改为ave=sum/4.0(2)第一处改正:j=eps第三处改正:r*2第一处改正:&n第二处改正:=第一处改正:t=m/10改为t=m%10第二处改正:t=0改为t=0第三处改正:m=m%10改为m=/104编程题(1)分式累加和。#includemain()ints;floatn,t,sum;t=1;sum=0;n=1;s=1.0;while(n=100)sum=sum+t;n=n+1;s=-s;t=s/n;printf(sum=%10.6fn,sum);110的阶乘#includemain()inti;longintn=1;for(i=1;i

10、=10;i+)n=n*i;printf(i%5=0?%2d!=%-10ldn:%2d!=%-10ld,i,n);由*组成的等腰三角形#includemain()intn,i,j;scanf(%d,&n);for(i=1;i=n;i+)for(j=1;j=n+i-1;j+)if(j=n-i)printf();elseprintf(*);printf(n);(4)完数main()intm,s,i;for(m=2;m1000;m+)s=0;for(i=1;im;i+)if(m%i)=0)s=s+i;if(s=m)printf(%ditsfactorsare,m);for(i=1;im;i+)if(m

11、%i=0)printf(%d,i);printf(n);打靶#includemain()inth10,h7,h5;for(h10=0;h10=8;h10+)for(h7=0;h7=8;h7+)for(h5=0;h50)x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/x2=x1;day-;printf(thetotalis%dn,x1);/代码二main()inti=9,sum=1;for(;i0;sum=2*(sum+1),i-);printf(sum=%dn,sum);(7)牛顿迭代法一般地:f(x)=a0 xn+a1xn-i+_.+an-1x+an=O求f(X)在乂

12、0附近的根计算公式:Xn+i=Xn-f(Xn)/f(Xn)精度:&=|Xn+1-Xn|v1.0e-m,m=5。所求的根:满足精度的Xn#include#includemain()floatX,X0,f,f1;x=1.5;可改为seanf(%f,&x);dox0=x;f=2*x0*x0*x0-4*x0*x0+3*x0-6;f1=6*x0*x0-8*x0+3;/f的导数,即它的切线x=x0-f/f1;/切线与x轴的交点while(fabs(x-x0)=1e-5);printf(Therootis%8.7fn,x);(8)利用辗除法,直到b为0为止main()intp,r,n,m,temp;prin

13、tf(inputtwointegern,m:);seanf(%d,%d,&n,&m);if(nm)temp=n;n=m;m=temp;p=n*m;while(m!=0)r=n%m;n=m;m=r;printf(greatestcommondivisoris:%dn,n);/最大公约数printf(leasecommonmultipleis:%dn,p/n);/最小公倍数AA*厂VA第6章1选择题1234567890CCDCCAADBD写出程序的运行结果(1)sum=6(2)Max=9,row=1,col=0(3)0010210(4)-53、填空(1)i=j=k=0i4&j=5j0n%10+0

14、x30或n%1O+Osj=0si、s0,s1、str,s1、s2,str4.改错题第一处改正:n=strlen(str)第二处改正:strj=第三处改正:strj!=第一处改正:ch=stri第二处改正:(j=0)&(chstrj)第一处改正:s1i!=0第二处改正:j=0;第一处改正:cnt=0第二处改正:if(!(m%i)第三处改正:icnt5.编程题(1)VC提供的intrand(void)产生的实际上是032767(short型的最大数)的伪随机数,伪随机数总是以一个相同的数为起始值(种子),运用递推的原理来生成的。所以,如果只使用rand函数,每次运行所形成的伪随机数列也相同,失去了

15、随机意义。但这样便于程序调试。VC的rand()函数默认以1为种子。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。VC提供的voidsrand(unsignedintseed)将seed作为种子,如果以time函数值(即当前时间)作为种子数,那么就可以保证随机性了,因为两次调用rand函数的时间通常是不同的。也可以使用srand函数来人为指定种子数。若要产生ab之间的一个随机数,则可用a+rand()%(b-a+1)表示。若要01的小数,则可以先取得010的整数,然后均除以10即可得到随机到十分位的10个随机小数;若要得到随机到百分位的随机

16、小数,则需要先得到0100的整数,然后均除以100,其它情况依此类推。#include#include#includemain()inta12,count=0,i;srand(unsigned)time(NULL);for(i=0;i12;i+)ai=5+rand()%11;for(i=0;i12;i+)printf(%5d,ai);count+;if(count%4=0)printf(n);(2)#include#defineN5main()intaN,max,min,i,sum=0,count=0;floatav;for(i=0;iN;i+)scanf(%d,&ai);max=min=a0

17、;for(i=0;imax)max=ai;if(aimin)min=ai;av=(float)sum/5;for(i=0;iav)count+;printf(max:%dnmin:%dnav:%fncount:%d,max,min,av,count);(3)#includemain()intscore30;/*=61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,85,89,90,33,44,55,91,92,93;/不必赋初值,这是为调试程序方便*/inti,count90=0,count80=0,count70=0,

18、count60=0;for(i=0;i30;i+)printf(intputNO.%dstudentsscore:,i+1);scanf(%d,score+i);for(i=0;i=90)count90+;count80+;count70+;count60+;elseif(scorei=80)count80+;count70+;count60+;elseif(scorei=70)count70+;count60+;elseif(scorei=60)count60+;printf(059:%dn6069:%dn7079:%dn8089:%dn90100:%d,30-count60,count60

19、-count70,count70-count80,count80-count90,count90);printf(n60orhigher:%dn70orhigher:%dn80orhigher:%dn90orhigher:%dn,count60,count70,count80,count90);(4)1、#includemain()chara45;inti,j,k;for(i=0;i45;i+)ai=;for(i=0;i5;i+)for(j=0;ji;j+)a9*i+j=;for(k=0;k5;k+)a9*i+j+k=*;j=0;for(i=0;i45;i+)printf(%c,ai);j+;

20、if(j%9=0)printf(n);2、#includemain()chara59;inti,j,k;for(i=0;i5;i+)for(j=0;j9;j+)aij=;for(i=0;i5;i+)for(j=0;ji;j+)aij=;for(k=0;k5;k+)aij+k=*;for(i=0;i5;i+)for(j=0;j9;j+)printf(%c,aij);printf(n);(5)#include#defineN4main()inti,j,aN=21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10;printf(nTheoriginalarra

21、y:n);for(i=0;iN;i+)for(j=0;jN;j+)printf(%2d,aij);printf(n);for(i=1;iN;i+)for(j=0;ji;j+)aij=aij+aji;aji=0;printf(nTheresultis:n);for(i=0;iN;i+)for(j=0;jy?x:y)(8)*#*#*#*(9)str=abdef(10)low=high(high+low)/23.改错题第一处:void改为int第二处:iv=n&(n%i=0)改为i=1e-6)改为if(fabs(x1-x0)=1e-6)4、编程题(1)#includevstdio.hlongact(

22、longn)if(n=1|n=0)return1;elsereturnn*act(n-1);main()intn=3;printf(n!=%ld,act(n);(2)#includevstdio.hvoidmmax(floata,intn);main()floata6;inti;for(i=1;i=5;i+)scanf(%f,&ai);a0=1;mmax(a,5);printf(%f%dn,a(int)a0,(int)a0);voidmmax(floata,intn)if(na(int)a0)a0=n;mmax(a,n-1);(3)#include#includeintstart;intfun

23、(charstr);main()chara40;inti,num;gets(a);num=fun(a);if(num=-1)printf(inputstringerrorornohaveAn);elseprintf(%dn,num);for(i=start;istart+num;i+)printf(%c,ai);printf(n);intfun(charstr)intcount=0,i=0,len,flag=0;len=strlen(str);while(!flag)&ilen)if(stri=A)flag=1;i+;if(flag=0)return-1;start=i;while(flag&

24、ilen)if(stri+=A)flag=0;elsecount+;if(flag=1)return-1;returncount;(4)my_strcpy(chardst,charsrc)inti=0;while(srci!=0)dsti=srci;i+;dsti=0;intmain()chara12;charb12;gets(b);my_strcpy(a,b);puts(a);(5)#include#includevoidfun(charstr,inta)不使用数组时,可使用全局变量保存统计结果inti=0;a0=a1=a2=a3=0;while(stri!=0)if(stri=A&stri

25、=a&stri=0&stri=A&(a)=a&(a)=z)main()charc;scanf(%c,&c);printf(%dn,ISALPHA(c);(2)/*习题8-2-2*/#defineSWAP(t,x,y)tw;w=x;x=y;y=w;main()doublea=99.99,b=11.11;SWAP(double,a,b);printf(%f,%fn,a,b);(3)/*习题8-2-3*/#includestdio.h#defineMAX80#defineCHANGE1main()charstrMAX;inti;printf(Inputtext:n);gets(str);#if(CH

26、ANGE)for(i=0;i=a&stri=A&striZ)stri+=1;elseif(stri=z|stri=Z)stri-=25;#endifprintf(output:n%s,str);(4)/*习题8-2-4*/#defineLEAP_YEAR(y)(y%4=0)&(y%100!=0)|(y%400=0)main()intyear;printf(Inputyear:);scanf(%d,&year);if(LEAP_YEAR(year)printf(%disaleapyear.n,year);elseprintf(%disnotaleapyear.n,year);(5)/*习题8-2

27、-5.h*/#ifndef_X8_2_5_H#define_X8_2_5_H#defineAVER(a,b,c)(a+b+c)/3.0#endif/*习题8-2-5*/#includeX8-2-5.hmain()inta,b,c;printf(Inputthreeintegersa,b,c:);scanf(%d,%d,%d,&a,&b,&c);printf(Averageis%f.n,AVER(a,b,c);第9章1选择题:123456789012ADCDBBCDDCBB2填空题:(1)指针或者地址(2)110char*p;p=&ch;seanf(%c,p);*p=a;printf(%c,*p

28、);10(5)0、7(6)ab(7)abcdcd(8)7口1(9)void(*p)(int*,int*);(10)r+bk(11)0、n+;(12)aegi3改错题:(1)第一处改正:*sub=x-y第二处改正:scanf(%f%f,&x,&y);第三处改正:calc(x,y,&add,&sub);第一处:charswap(char*pl,char*p2)改为voidswap(char*pl,char*p2)第二处:strcpy(p,p1)改为strcpy(p,p2)第一处:p1=p1+m改为p1=p1+m-1第二处:*p1=*p2改为*p2=*p1第三处:*p2=0改为*p2=0(4)第一处

29、:char*fun(char*str,chart)改为char*fun(char*str,char*t)第二处:s=NuLL改为s=NULL;第三处:if(r=p)改为if(*r=*p)第一处:fun(int*b,intn)改为fun(int(*b)N,intn)第二处:bjk=k*j改为bjk=(k+1)*(j+1)4编程题(1)/*习题9-4-1*/voidmove(intarray20,intn,intm);main()intnumber20,n,m,i;printf(Howmanynumbers?);/*共有多少个数*/scanf(%d,&n);printf(Input%dnumber

30、s:n,n);/*输入n个数*/for(i=0;in;i+)scanf(%d,&numberi);printf(Howmanyplaceyouwanttomove?);/*后移多少个位置*/scanf(%d,&m);move(number,n,m);/*调用move函数*/printf(Now,theyare:n);for(i=0;iarray;p-)*p=*(p-1);*array=array_end;m-;if(m0)move(array,n,m);/*递归调用,当循环次数m减至0时,停止调用*/(2)/*习题9-4-2*/#include#include#defineTOTAL6intm

31、seek(char*str,charxstr,intn)inti;for(i=0;in;i+)if(strcmp(stri,xstr)=0)return1;return0;main()char*nameTOTAL=Lining,Linshan,Tianyuan,Zhangqiang,Haipo,Fangbing;charxname20;printf(enteraname:);gets(xname);if(mseek(name,xname,TOTAL)printf(Found!n);elseprintf(Notfound!n);(3)/*习题9-4-3*/#include#includevoid

32、fun(char*str,intnum4)inti;for(i=0;i=a&*str=A&*str=0&*str=9)num2+;elsenum3+;str+;#defineN80main()intstringN;intn4,i;gets(string);fun(string,n);for(i=0;i4;i+)printf(%dt,ni);(4)/*习题9-4-4*/*调试时,可这样输入数据:*/*11121314152122232425313233343541424344455152535455*/#includemain()inta55,*p,i,j;/*输入矩阵*/*输入矩阵*/*使p指

33、向0行0列元素*/*调用函数,实现交换*/*输出已交换的矩阵*/*交换函数*/p=&a00;change(p);printf(Now,matrix:n);for(i=0;i5;i+)for(j=0;j5;j+)printf(%4d,aij);printf(n);voidchange(int*p)inti,j,temp;int*pmax,*pmin;pmax=p;pmin=p;for(i=0;i5;i+)/*找最大值和最小值的地址,并赋给pmax,pmin*/for(j=0;j5;j+)if(*pmax*(p+5*i+j)pmin=p+5*i+j;temp=*(p+12);/*将最大值换给中心元

34、素*/*(p+12)=*pmax;*pmax=temp;temp=*p;/*将最小值换给左上角元素*/*p=*pmin;*pmin=temp;pmin=p+1;for(i=0;i5;i+)/*找第二最小值的地址赋给pmin*/for(j=0;j*(p+5*i+j)pmin=p+5*i+j;temp=*pmin;/*将第二最小值换给右上角元素*/*pmin=*(p+4);*(p+4)=temp;pmin=p+1;for(i=0;i5;i+)/*找第三最小值的地址赋给pmin*/for(j=0;j*(p+5*i+j)pmin=p+5*i+j;/*将第三最小值换给左下角元素*/temp=*pmin;

35、*pmin=*(p+20);*(p+20)=temp;pmin=p+1;for(i=0;i5;i+)/*找第四最小值的地址赋给pmin*/for(j=0;j*(p+5*i+j)pmin=p+5*i+j;temp=*pmin;/*将第四最小值换给右下角元素*/*pmin=*(p+24);*(p+24)=temp;(5)/*习题9-4-5*/*可以专门编写一个函数求各学生的平均分,存到aver4数组*/#includevoidavcour1(floatscore5);voidfali2(intnum4,floatscore45);voidgood(intnum4,floatscore45);mai

36、n()inti,j,num4;数组num代表学号floatscore45;printf(InputNO.andscores:n);for(i=0;i4;i+)printf(NO.);scanf(%d,&numi);printf(scores:);for(j=0;j5;j+)scanf(%f,&scoreij);/*求出第一门课的平均成绩/*求出第一门课的平均成绩*/*找出2门课不及格的学生*/*找出成绩好的学生*/printf(nn);fali2(num,score);printf(nn);good(num,score);voidavcour1(floatscore5)inti;floatsu

37、m,average1;sum=0.0;for(i=0;i4;i+)sum=sum+score0i;average1=sum/4;voidavcour1(floatscore5)inti;floatsum,average1;sum=0.0;for(i=0;i4;i+)sum=sum+score0i;average1=sum/4;/*第一门课的平均成绩的函数*/*累计每个学生的得分*/*计算平均成绩*/printf(course1averagescore:%6.2f.n,average1);voidfali2(intnum4,floatscore45)/*找两门以上课程不及格的学生的函数*/int

38、i,j,k,label;floatsum=0;printf(=Studentwhoisfail=n);printf(NO.);for(i=0;i5;i+)printf(%10d,i+1);printf(averagen);for(i=0;i4;i+)label=0;for(j=0;j5;j+)if(scoreij)=2)printf(%5d,numi);for(k=0;k5;k+)printf(%10.2f,scoreik);sum+=scoreik;printf(%10.2fn,sum/5);voidgood(intnum4,floatscore45)/*找成绩优秀的学生(各门85分以上或平

39、均90分以上)的函数*/inti,j,k,n;floatsum=0,aver4;printf(=Studentwhosescoreisgood=n);printf(NO.);for(i=0;i5;i+)printf(%10d,i+1);printf(averagen);for(i=0;i4;i+)n=0;sum=0;for(j=0;j85.0)n+;sum+=scoreij;averi=sum/5;if(n=5)|(averi=90)printf(%5d,numi);for(k=0;k5;k+)printf(%10.2f,scoreik);printf(%10.2fn,averi);(6)/*习题9-4-6*/#includedoublesigma(double(*fn)(double),doublel,doubleu)doublesum=0,d;for(d=l;d%sn,i,month_name(i);/*调用指针函

温馨提示

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

评论

0/150

提交评论