第一篇:《C語言程序設計教程(第二版)》習題答案
第1章 程序設計基礎知識
一、單項選擇題(第23頁)1-4.CBBC 5-8.DACA
二、填空題(第24頁)
1.判斷條件 2.面向過程編程 3.結構化 4.程序 5.面向?qū)ο蟮某绦蛟O計語言 7.有窮性 8.直到型循環(huán) 9.算法 10.可讀性 11.模塊化 12.對問題的分析和模塊的劃分
三、應用題(第24頁)2.源程序:
main()
{int i,j,k;/* i:公雞數(shù),j:母雞數(shù),k:小雞數(shù)的1/3 */ printf(“cock hen chickn”);for(i=1;i<=20;i++)for(j=1;j<=33;j++)for(k=1;k<=33;k++)
if(i+j+k*3==100&&i*5+j*3+k==100)printf(“ %d %d %dn”,i,j,k*3);} 執(zhí)行結果:
cock hen chick 4 18 78 8 11 81 12 4 84
3.現(xiàn)計算斐波那契數(shù)列的前20項。
遞推法 源程序:
main()
{long a,b;int i;a=b=1;
for(i=1;i<=10;i++)/*要計算前30項,把10改為15。*/ {printf(“%8ld%8ld”,a,b);a=a+b;b=b+a;}}
遞歸法 源程序:
main(){int i;
for(i=0;i<=19;i++)printf(“%8d”,fib(i));} fib(int i)
{return(i<=1?1:fib(i-1)+fib(i-2));}
執(zhí)行結果:
1 2 3 5 8 13 21 34 55
233 377 610 987 1597 2584 4181 6765 4.源程序:
#include “math.h”;main()
{double x,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);} 執(zhí)行結果:
1.3247179572
5.源程序略。(分子、分母均構成斐波那契數(shù)列)結果是32.66026079864 6.源程序:
main()
{int a,b,c,m;
printf(“Please input a,b and c:”);scanf(“%d %d %d”,&a,&b,&c);if(a
printf(“%d %d %dn”,a,b,c);} 執(zhí)行結果:
Please input a,b and c:123 456 789 789 456 123 7.源程序:
main(){int a;
scanf(“%d”,&a);
printf(a%21==0?“Yes”:“No”);} 執(zhí)行結果:
Yes 第2章 C語言概述
一、單項選擇題(第34頁)1-4.BDCB 5-8.AABC
二、填空題(第35頁)
1.主 2.C編譯系統(tǒng) 3.函數(shù) 函數(shù) 4.輸入輸出 5.頭 6..OBJ 7.庫函數(shù) 8.文本
三、應用題(第36頁)
5.sizeof是關鍵字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是標識符。
8.源程序: main(){int a,b,c;
scanf(“%d %d”,&a,&b);c=a;a=b;b=c;
printf(“%d %d”,a,b);} 執(zhí)行結果:34 34 12 第3章 數(shù)據(jù)類型與運算規(guī)則
一、單項選擇題(第75頁)
1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB
二、填空題(第77頁)
1.補碼 2.±(10^-308~10^308)3.int(整數(shù))4.單目 自右相左 5.函數(shù)調(diào)用 6.a或b 7.1 8.65,89
三、應用題(第78頁)1.10 9
2.執(zhí)行結果: 0 0 12 1 第4章 順序結構程序設計
一、單項選擇題(第90頁)1-5.DCDAD 6-10.BACBB
二、填空題(第91頁)
1.一 ;2.5.169000 3.(1)-2002500(2)I=-200,j=2500(3)i=-200 j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8.scanf(“%lf%lf%lf”,&a,&b,&c);9.13 13.000000,13.000000 10.a=a^c;c=c^a;a=a^c;(這種算法不破壞b的值,也不用定義中間變量。)
三、編程題(第92頁)
1.仿照教材第27頁例2-1。
2.源程序:
main(){int h,m;
scanf(“%d:%d”,&h,&m);printf(“%dn”,h*60+m);} 執(zhí)行結果:
9:23 563
3.源程序:
main()
{int a[]={-10,0,15,34},i;for(i=0;i<=3;i++)
printf(“%d370C=%g370Ft”,a[i],a[i]*1.8+32);} 執(zhí)行結果:
-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F 4.源程序:
main()
{double pi=3.14***9,r=5;
printf(“r=%lg A=%.10lf S=%.10lfn”,r,2*pi*r,pi*pi*r);} 執(zhí)行結果:
r=5 A=31.4159265359 S=49.3480220054 5.源程序:
#include “math.h”;main()
{double a,b,c;
scanf(“%lf%lf%lf”,&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){double s=(a+b+c)/2;
printf(“SS=%.10lfn”,sqrt(s*(s-a)*(s-b)*(s-c)));} else printf(“Data error!”);} 執(zhí)行結果:5 6
SS=9.9215674165 6.源程序:
main()
{int a=3,b=4,c=5;float d=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()
{int a,b,c,m;
scanf(“%d %d %d”,&a,&b,&c);m=a;a=b;b=c;c=m;
printf(“%d %d %dn”,a,b,c);} 執(zhí)行結果:6 7 6 7 5 8.源程序:
main(){int a,b,c;
scanf(“%d %d %d”,&a,&b,&c);
printf(“average of %d,%d and %d is %.2fn”,a,b,c,(a+b+c)/3.);執(zhí)行結果: 7 9
average of 6,7 and 9 is 7.33 9.不能。修改后的源程序如下:
main()
{int a,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);} 第5章 選擇結構程序設計
一、單項選擇題(第113頁)1-4.DCBB 5-8.DABD
二、填空題(第115頁)1.非0 0 2.k==0
3.if(abs(x)>4)printf(“%d”,x);else printf(“error!”);
4.if((x>=1&&x<=10||x>=200&&x<=210)&&x&1)printf(“%d”,x);5.k=1(原題最后一行漏了個d,如果認為原題正確,則輸出k=%。)6.8!Right!11 7.$$$a=0 8.a=2,b=
1三、編程題(第116頁)1.有錯。正確的程序如下:
main(){int a,b,c;
scanf(“%d,%d,%d”,&a,&b,&c);
printf(“min=%dn”,a>b?b>c?c:b:a>c?c:a);} 2.源程序:
main()
{unsigned long a;scanf(“%ld”,&a);
for(;a;printf(“%d”,a%10),a/=10);} 執(zhí)行結果:
12345 54321
3.(1)源程序: main(){int x,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(){int x,y;
scanf(“%d”,&x);
if(x<10)if(x>-5)if(x>=0)if(x>=5)y=x+1;else y=x-1;else y=x;printf(“%dn”,y);}(3)源程序:
main(){int x,y;
scanf(“%d”,&x);
if(x<10)if(x>=5)y=x+1;else if(x>=0)y=x-1;else if(x>-5)y=x;printf(“%dn”,y);}(4)源程序:
main(){int x,y;
scanf(“%d”,&x);switch(x/5)
{case-1:if(x!=-5)y=x;break;case 0:y=x-1;break;case 1:y=x+1;} printf(“%dn”,y);}
4.本題為了避免考慮每月的天數(shù)及閏年等問題,故采用面向?qū)ο蟮某绦蛟O計。
現(xiàn)給出Delphi源程序和C++ Builder源程序。
Delphi源程序:
procedure TForm1.Button1Click(Sender: TObject);begin
edit3.Text:=format('%.0f天',[strtodate(edit2.text)-strtodate(edit1.text)]);end;
procedure TForm1.FormCreate(Sender: TObject);begin
Edit2.Text:=datetostr(now);button1click(form1)end;
C++ Builder源程序: void __fastcall TForm1::Button1Click(TObject *Sender){
Edit3->Text=IntToStr(StrToDate(Edit2->Text)-StrToDate(Edit1->Text))+“天”;}
void __fastcall TForm1::FormCreate(TObject *Sender){
Edit2->Text=DateToStr(Now());Button1Click(Form1);}
執(zhí)行結果:(運行于Windows下)http://img378.photo.163.com/nxgt/41463572/1219713927.jpg
5.源程序:
main()
{unsigned a,b,c;
printf(“請輸入三個整數(shù):”);
scanf(“%d %d %d”,&a,&b,&c);
if(a&&b&&c&&a==b&&a==c)printf(“構成等邊三角形n”);else if(a+b>c&&a+c>b&&b+c>a)
if(a==b||a==c||b==c)printf(“構成等腰三角形n”);else printf(“構成一般三角形n”);else printf(“不能構成三角形n”);} 執(zhí)行結果:
請輸入三個整數(shù):5 6 5 構成等腰三角形
6.源程序:
main(){int x,y;
scanf(“%d”,&x);if(x<20)y=1;else switch(x/60)
{case 0:y=x/10;break;default:y=6;}
printf(“x=%d,y=%dn”,x,y);} 7.源程序:
main()
{unsigned m;float n;scanf(“%d”,&m);if(m<100)n=0;
else if(m>600)n=0.06;else n=(m/100+0.5)/100;
printf(“%d %.2f %.2fn”,m,m*(1-n),m*n);} 執(zhí)行結果:
450 450 429.75 20.25
8.2171天(起始日期和終止日期均算在內(nèi))
本題可利用第4小題編好的程序進行計算。把起始日期和終止日期分別打入“生日”和“今日”欄內(nèi),單擊“實足年齡”按鈕,將所得到的天數(shù)再加上1天即可。
9.源程序:
#include “math.h”;main()
{unsigned long i;scanf(“%ld”,&i);
printf(“%ld %dn”,i%10,(int)log10(i)+1);} 執(zhí)行結果:
99887 7 5
10.源程序:
main()
{unsigned long i;unsigned j[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);} 執(zhí)行結果:
6987 8109
(注:要加密的數(shù)值不能是0或以0開頭。如果要以0開頭需用字符串而不能是整數(shù)。)第6章 循環(huán)結構程序設計
一、單項選擇題(第142頁)1-4.BCCB 5-8.CBCA
二、填空題(第143頁)
1.原題可能有誤。如無誤,是死循環(huán) 2.原題有誤。如果把b=1后面的逗號改為分號,則結果是8。3.20 4.11 5.2.400000 6.*#*#*#$ 7.8 5 2 8.①d=1.0 ②++k ③k<=n 9.①x>=0 ②x 三、編程題(第145頁)1.源程序: main() {int i=1,sum=i; while(i<101){sum+=i=-i-2;sum+=i=-i+2;} printf(“%dn”,sum);} 執(zhí)行結果: 51 2.源程序: main() {double p=0,n=0,f;int i;for(i=1;i<=10;i++){scanf(“%lf”,&f); if(f>0)p+=f;else n+=f;} printf(“%lf %lf %lfn”,p,n,p+n);} 3.源程序: main() {unsigned a;scanf(“%ld”,&a); for(;a;printf(“%d,”,a%10),a/=10);printf(“b n”);} 執(zhí)行結果: 23456 6,5,4,3,2 4.源程序: main() {unsigned long a,b,c,i;scanf(“%ld%ld”,&a,&b);c=a%1000; for(i=1;i 57 009 5.略 6.原題提供的計算e的公式有誤(前面漏了一項1)。正確的公式是e= 1 + 1 + 1/2!+ 1/3!+ … + 1/n!+ …(1)源程序: main() {double e=1,f=1;int n; for(n=1;n<=20;n++){f/=n;e+=f;} printf(“e=%.14lfn”,e);} 執(zhí)行結果: e=2.7***05(2)源程序: main() {double e=1,f=1;int n; for(n=1;f>1e-4;n++){f/=n;e+=f;} printf(“e=%.4fn”,e);} 執(zhí)行結果: e=2.7183 7.源程序: main() {unsigned long a=0,b=1,c=0;int i,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));} 本題還可以用遞歸算法(效率很低),源程序如下: unsigned long fun(int i) {return i<=3?i:fun(i-1)+fun(i-2)+fun(i-3);} main() {int i,d;scanf(“%d”,&d);for(i=1;i<=d;i++) printf(“%10ld”,fun(i));} 執(zhí)行結果: 68 230 423 778 1431 2632 4841 8.源程序: main(){int i; 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);} 執(zhí)行結果: 1024 1026 1028 1032 1034 1036 …… …… 9874 9876 9.源程序: main(){int i,j,k; printf(“apple watermelon pearn”);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);} 執(zhí)行結果: apple watermelon pear 5 5 90 24 4 72 43 3 54 62 2 36 81 1 18 10.源程序: #include “stdio.h”; #define N 4 /* N為階數(shù),可以改為其他正整數(shù) */ main(){int m=N*2,i,j; for(i=1;i putchar(N-abs(i-N)<=abs(j++-N)?' ':'*'));} 如果把N值改為5,則執(zhí)行結果如下: * *** ***** ******* ********* ******* ***** *** * 作者:寧西貫通 2006-5-7 23:41 回復此發(fā)言 ------------------說明 注意:上面最后一題的輸出結果應該是由星號組成的一個菱形,第7章 數(shù) 組 一、單項選擇題(第192頁)1-4.BBCC 5-8.AABA 二、填空題(第194頁) 1.1 2 4 8 16 32 64 128 256 512 2.①a[age]++ ②i=18;i<26 3.①break ②i==8 4.①a[i]>b[j] ②i<3 ③j<5 5.①b[j]=a[j][0] ②b[j] 三、編程題(第196頁)1.源程序: main() {int a[4][4],i,j,s=0;for(i=0;i<4;i++)for(j=0;j<4;j++)scanf(“%d”,&a[i][j]);for(i=0;i<4;i++)for(j=0;j<4;j++) if(i==j||i+j==3)s+=a[i][j]; printf(“%dn”,s);} /* 注:5×5矩陣不能照此計算!*/ 執(zhí)行結果: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 68 2.源程序: main() {int i,a[36];a[0]=2; for(i=1;i<=29;i++)a[i]=a[i-1]+2;for(;i<=35;i++)a[i]=a[(i-30)*5+2];for(i=0;i<=35;i++)printf(“%dt”,a[i]);} 執(zhí)行結果: 4 6 8 10 12 14 16 18 20 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 6 16 26 36 46 56 3.源程序: #include “stdlib.h” #include “time.h” main() {int a[30],i,m=0;randomize();