• 192.67 KB
  • 2022-04-29 14:04:40 发布

北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案.pdf

  • 38页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理1【C语言】《C语言程序设计教程(第二版)》习题答案说明1.本文所指的《C语言程序设计教程(第二版)》是李凤霞主编、北京理工大学出版社出版的,绿皮。2第1章程序设计基础知识一、单项选择题(第23页)1-4.CBBC5-8.DACA二、填空题(第24页)1.判断条件2.面向过程编程3.结构化4.程序5.面向对象的程序设计语言7.有穷性8.直到型循环9.算法10.可读性11.模块化12.对问题的分析和模块的划分三、应用题(第24页)2.源程序:main(){inti,j,k;/*i:公鸡数,j:母鸡数,k:小鸡数的1/3*/printf("cockhenchickn");for(i=1;i<=20;i++)for(j=1;j<=33;j++)for(k=1;k<=33;k++) 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理if(i+j+k*3==100&&i*5+j*3+k==100)printf("%d%d%dn",i,j,k*3);}执行结果:cockhenchick4187881181124843.现计算斐波那契数列的前20项。递推法源程序:main(){longa,b;inti;a=b=1;for(i=1;i<=10;i++)/*要计算前30项,把10改为15。*/{printf("%8ld%8ld",a,b);a=a+b;b=b+a;}}递归法源程序:main(){inti;for(i=0;i<=19;i++)printf("%8d",fib(i));}fib(inti){return(i<=1?1:fib(i-1)+fib(i-2));} 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理执行结果:112358132134558914423337761098715972584418167654.源程序:#include"math.h";main(){doublex,x0,deltax;x=1.5;do{x0=pow(x+1,1./3);deltax=fabs(x0-x);x=x0;}while(deltax>1e-12);printf("%.10fn",x);}执行结果:1.32471795725.源程序略。(分子、分母均构成斐波那契数列)结果是32.660260798646.源程序:main(){inta,b,c,m;printf("Pleaseinputa,bandc:");scanf("%d%d%d",&a,&b,&c); 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理if(ac&&a+c>b&&b+c>a){doubles=(a+b+c)/2;printf("SS=%.10lfn",sqrt(s*(s-a)*(s-b)*(s-c)));}elseprintf("Dataerror!");}执行结果:456SS=9.92156741656.源程序:main(){inta=3,b=4,c=5;floatd=1.2,e=2.23,f=-43.56;printf("a=%3d,b=%-4d,c=**%dnd=%gne=%6.2fnf=%-10.4f**n",a,b,c,d,e,f);}7.源程序:main(){inta,b,c,m; 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理scanf("%d%d%d",&a,&b,&c);m=a;a=b;b=c;c=m;printf("%d%d%dn",a,b,c);}执行结果:5676758.源程序:main(){inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("averageof%d,%dand%dis%.2fn",a,b,c,(a+b+c)/3.);执行结果:679averageof6,7and9is7.339.不能。修改后的源程序如下:main(){inta,b,c,x,y;scanf("%d%d%d",&a,&b,&c);x=a*b;y=x*c;printf("a=%d,b=%d,c=%dn",a,b,c);printf("x=%d,y=%dn",x,y);} 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理6第5章选择结构程序设计一、单项选择题(第113页)1-4.DCBB5-8.DABD二、填空题(第115页)1.非002.k==03.if(abs(x)>4)printf("%d",x);elseprintf("error!");4.if((x>=1&&x<=10||x>=200&&x<=210)&&x&1)printf("%d",x);5.k=1(原题最后一行漏了个d,如果认为原题正确,则输出k=%。)6.8!Right!117.$$$a=08.a=2,b=1三、编程题(第116页)1.有错。正确的程序如下:main(){inta,b,c;scanf("%d,%d,%d",&a,&b,&c);printf("min=%dn",a>b?b>c?c:b:a>c?c:a);}2.源程序:main(){unsignedlonga;scanf("%ld",&a); 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理for(;a;printf("%d",a%10),a/=10);}执行结果:12345543213.(1)源程序:main(){intx,y;scanf("%d",&x);if(x>-5&&x<0)y=x;if(x>=0&&x<5)y=x-1;if(x>=5&&x<10)y=x+1;printf("%dn",y);}(2)源程序:main(){intx,y;scanf("%d",&x);if(x<10)if(x>-5)if(x>=0)if(x>=5)y=x+1;elsey=x-1;elsey=x;printf("%dn",y);}(3)源程序:main(){intx,y; 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理scanf("%d",&x);if(x<10)if(x>=5)y=x+1;elseif(x>=0)y=x-1;elseif(x>-5)y=x;printf("%dn",y);}(4)源程序:main(){intx,y;scanf("%d",&x);switch(x/5){case-1:if(x!=-5)y=x;break;case0:y=x-1;break;case1:y=x+1;}printf("%dn",y);}4.本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。现给出Delphi源程序和C++Builder源程序。Delphi源程序:procedureTForm1.Button1Click(Sender:TObject);beginedit3.Text:=format("%.0f天",[strtodate(edit2.text)-strtodate(edit1.text)]);end; 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理procedureTForm1.FormCreate(Sender:TObject);beginEdit2.Text:=datetostr(now);button1click(form1)end;C++Builder源程序:void__fastcallTForm1::Button1Click(TObject*Sender){Edit3->Text=IntToStr(StrToDate(Edit2->Text)-StrToDate(Edit1->Text))+"天";}void__fastcallTForm1::FormCreate(TObject*Sender){Edit2->Text=DateToStr(Now());Button1Click(Form1);}执行结果:(运行于Windows下)http://img378.photo.163.com/nxgt/41463572/1219713927.jpg5.源程序:main(){unsigneda,b,c; 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理printf("请输入三个整数:");scanf("%d%d%d",&a,&b,&c);if(a&&b&&c&&a==b&&a==c)printf("构成等边三角形n");elseif(a+b>c&&a+c>b&&b+c>a)if(a==b||a==c||b==c)printf("构成等腰三角形n");elseprintf("构成一般三角形n");elseprintf("不能构成三角形n");}执行结果:请输入三个整数:565构成等腰三角形6.源程序:main(){intx,y;scanf("%d",&x);if(x<20)y=1;elseswitch(x/60){case0:y=x/10;break;default:y=6;}printf("x=%d,y=%dn",x,y);}7.源程序:main(){unsignedm;floatn; 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理scanf("%d",&m);if(m<100)n=0;elseif(m>600)n=0.06;elsen=(m/100+0.5)/100;printf("%d%.2f%.2fn",m,m*(1-n),m*n);}执行结果:450450429.7520.258.2171天(起始日期和终止日期均算在内)本题可利用第4小题编好的程序进行计算。把起始日期和终止日期分别打入“生日”和“今日”栏内,单击“实足年龄”按钮,将所得到的天数再加上1天即可。9.源程序:#include"math.h";main(){unsignedlongi;scanf("%ld",&i);printf("%ld%dn",i%10,(int)log10(i)+1);}执行结果:998877510.源程序: 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理main(){unsignedlongi;unsignedj[10],m=0;scanf("%ld",&i);for(;i;){j[m++]=(i+2)%10;i/=10;}for(;m;m--)i=i*10+j[m-1];printf("%ldn",i);}执行结果:69878109(注:要加密的数值不能是0或以0开头。如果要以0开头需用字符串而不能是整数。)7第6章循环结构程序设计一、单项选择题(第142页)1-4.BCCB5-8.CBCA二、填空题(第143页)1.原题可能有误。如无误,是死循环2.原题有误。如果把b=1后面的逗号改为分号,则结果是8。3.204.115.2.4000006.*#*#*#$7.8528.①d=1.0②++k③k<=n9.①x>=0②x0)p+=f;elsen+=f;}printf("%lf%lf%lfn",p,n,p+n);}3.源程序:main(){unsigneda;scanf("%ld",&a);for(;a;printf("%d,",a%10),a/=10);printf("bn");}执行结果:23456 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理6,5,4,3,24.源程序:main(){unsignedlonga,b,c,i;scanf("%ld%ld",&a,&b);c=a%1000;for(i=1;i1e-4;n++){f/=n;e+=f;}printf("e=%.4fn",e);}执行结果:e=2.71837.源程序:main(){unsignedlonga=0,b=1,c=0;inti,d;scanf("%d",&d);for(i=1;i<=(d+2)/3;i++)printf("%10ld%10ld%10ld",a,b,(a+=b+c,b+=c+a,c+=a+b));}本题还可以用递归算法(效率很低),源程序如下:unsignedlongfun(inti){returni<=3?i:fun(i-1)+fun(i-2)+fun(i-3);}main(){inti,d;scanf("%d",&d);for(i=1;i<=d;i++)printf("%10ld",fun(i));}执行结果: 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理151236112037681252304237781431263248418.源程序:main(){inti;for(i=1010;i<=9876;i+=2)if(i/100%11&&i%100%11&&i/10%100%11&&i/1000!=i%10&&i/1000!=i/10%10&&i/100%10!=i%10)printf("%d",i);}执行结果:102410261028103210341036…………987498769.源程序:main(){inti,j,k;printf("applewatermelonpearn");for(i=1;i<=100;i++)for(j=1;j<=10;j++)if((k=100-i-j)*2==400-i*4-j*40)printf("%4d%7d%9dn",i,j,k);}执行结果:applewatermelonpear5590 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理2447243354622368111810.源程序:#include"stdio.h";#defineN4/*N为阶数,可以改为其他正整数*/main(){intm=N*2,i,j;for(i=1;ib[j]②i<3③j<55.①b[j]=a[j][0]②b[j]>=1)b[n++]=i&1;for(;n;)printf("%d",b[--n]);}执行结果:987610011010010100 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理本题也可以不用数组。源程序如下:#include"stdio.h"main(){inti,n;scanf("%d",&i);for(n=16;n;n--){asmROLi,1putchar(i&1|48);}}/*ROL是循环左移的汇编指令*/5.源程序:#include"stdlib.h"#include"time.h"#defineM5#defineN6main(){inta[M][N],i,j,t[M];randomize();/*生成M行N列随机数*/for(i=0;ia[i][j])t[i]=j;/*比较每个最小数在其所在的列上是否也是最小*/for(j=0;ja[i][t[j]]){t[j]=-1;break;}}printf("-------------------n");/*输出在行和列上均为最小的数*/for(i=0;ia[t][N-1])t=i;if(t)for(j=0;ja[i][j]){min.value=a[i][j];min.x=i;min.y=j;}}printf("-----------------n");i=a[0][N-1];a[0][N-1]=max.value;a[max.x][max.y]=i; 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理i=a[M-1][0];a[M-1][0]=min.value;a[min.x][min.y]=i;for(i=0;i4):");gets(s);l=strlen(s);for(i=0;is[i])min=i;}t=s[1];s[1]=s[max];s[max]=t;if(min==1)min=max;t=s[l-2];s[l-2]=s[min];s[min]=t;printf("%sn",s);}执行结果:Inputastring(length>4):C++BuilderCu+Beild+r11.源程序: 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理main(){charm[13][10]={"****","January","February","March","April","May","June","July","August","September","October","November","December"};inti,j,k,a,s,n;printf("Pleaseinputaninteger(100..999):");scanf("%d",&n);printf("%d:%d+%d+%d=%d,%d%%13=%d,%sn",n,i,j,k,s,s,a,m[a=((s=(i=n/100)+(j=n/10%10)+(k=n%10))%13)]);}执行结果:Pleaseinputaninteger(100..999):539539:5+3+9=17,17%13=4,April11第8章函数一、单项选择题(第241页)1-5.BCCAA6-10.CCDDD11-15.ACACB二、填空题(第243页)1.看不出原题的意图。因为要计算1~n的累加和,n应是一个≥1的正整数。可是题目中却出现了n=0的情况。除非另加规定当n=0时1~ 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理n的累加和为0,或者把原题中的计算式改为计算0~n的累加和。据此猜测,原题应填为:①return(0)②return(n+sum(n-1))根据题意,如下程序较为合理:intsum(intn){if(n<=0)return(-1);/*-1是出错标志*/elseif(n==1)return(1);elsereturn(n+sum(n-1));}2.①return(1)②return(n*facto(n-1))三、编程题(第244页)3.源程序:main(){inti,a,b,c;for(i=100;i<999;i++)if((a=i/100)*a*a+(b=i/10%10)*b*b+(c=i%10)*c*c==i)printf("%dt",i);}执行结果:1533703714078.源程序(非递归算法):#defineP13/*P可以改为其他正整数*/main(){inta[P],r,c;for(r=0;r<=P;r++) 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理{a[r]=1;for(c=r-1;c>=1;a[c--]+=a[c-1]);printf("%*d",(P-r)*3+1,a[0]);for(c=1;c<=r;printf("%6d",a[c++]));printf("n");}}执行结果:(应该排列成一个三角形,是贴吧造成现在这个样子的,不是程序有问题)11112113311464115101051161520156117213535217118285670562881193684126126843691110451202102522101204510111155165330462462330165551111126622049579292479249522066121 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理113782867151287171617161287715286781319.源程序(递归算法):#include"stdio.h"voidprintOCT(unsignedlongn){unsignedlongi;if(i=n>>3)printOCT(i);putchar((n&7)+48);}main(){unsignedlongi;scanf("%ld",&i);printOCT(i);}执行结果:123456789011145401322本题也可以不用递归算法,源程序请参考第7章第三题4。12回复:【C语言】《C语言程序设计教程(第二版)》习题答案但是不同时间印刷的版本课后题不太一样呢,象我们的是1999年12月第2版,2005年12月第69次印刷的。没有选择填空,应用题 北理工《C语言程序设计教程(第二版)》李凤霞主编李书涛主审版课后习题答案Haigeer001整理和楼主不知道有多少相同的,因为看不到原题。这个比较麻烦呢。作者:210.77.204.*2006-5-918:38回复此发言--------------------------------------------------------------------------------13回复:【C语言】《C语言程序设计教程(第二版)》习题答案你对照一下主编和出版社,看看对吗?(见说明的第一条。)我不是说叫你有问题另发帖子吗?14第9章指针一、单项选择题(第276页)1-5.DCDAC6-10.CCABC11-16.AABBB16-20.DCDBD二、填空题(第278页)1.①int*②*z2.*p++3.①""②++4.①q=p+1②qmax④*q