本文目錄一覽:
c語言程序設計能力教程答案
1 【C語言】《C語言程序設計教程(第二版)》習題答案
說 明
1. 本文所指的《C語言程序設計教程(第二版)》是李鳳霞主編、北京理
工大學出版社出版的,綠皮。
2 第1章 程序設計基礎知識
一、單項選擇題(第23頁)
1-4.CBBC 5-8.DACA
二、填空題(第24頁)
1.判斷條件 2.面向過程編程 3.結構化 4.程序 5.面向對象的程序設計語言 7.有窮性 8.直到型循環 9.算法 10.可讀性 11.模塊化 12.對問題的分析和模塊的劃分
三、應用題(第24頁)
2.源程序:
main()
{int i,j,k; /* i:公雞數,j:母雞數,k:小雞數的1/3 */ brprintf(“cock hen chick\n”); brfor(i=1;i=20;i++) brfor(j=1;j=33;j++) brfor(k=1;k=33;k++) brif (i+j+k*3==100i*5+j*3+k==100) brprintf(” %d %d %d\n”,i,j,k*3);}
執行結果:
cock hen chick
4 18 78
8 11 81
12 4 84
3.現計算斐波那契數列的前20項。
遞推法 源程序:
main()
{long a,b;int i; bra=b=1; brfor(i=1;i=10;i++) /*要計算前30項,把10改為15。*/ br{printf(“%8ld%8ld”,a,b); bra=a+b;b=b+a;}}
遞歸法 源程序:
main()
{int i; brfor(i=0;i=19;i++) brprintf(“%8d”,fib(i));}
fib(int i)
{return(i=1?1:fib(i-1)+fib(i-2));}
執行結果:
1 1 2 3 5 8 13 21 34 55
89 144 233 377 610 987 1597 2584 4181 6765
4.源程序:
#include “math.h”;
main()
{double x,x0,deltax; brx=1.5; brdo {x0=pow(x+1,1./3); brdeltax=fabs(x0-x); brx=x0; br}while(deltax1e-12);
printf(“%.10f\n”,x);}
執行結果:
1.3247179572
5.源程序略。(分子、分母均構成斐波那契數列)
結果是32.66026079864
6.源程序:
main()
{int a,b,c,m; brprintf(“Please input a,b and c:”); brscanf(“%d %d %d”,a,b,c); brif(ab){m=a;a=b;b=m;}
if(ac){m=a;a=c;c=m;}
if(bc){m=b;b=c;c=m;}
printf(“%d %d %d\n”,a,b,c);}
執行結果:
Please input a,b and c:123 456 789
789 456 123
7.源程序:
main()
{int a; brscanf(“%d”,a); brprintf(a%21==0?”Yes”:”No”);}
執行結果:
42
Yes
3 第2章 C語言概述
一、單項選擇題(第34頁)
1-4.BDCB 5-8.AABC
二、填空題(第35頁)
1.主 2.C編譯系統 3.函數 函數 4.輸入輸出 5.頭 6. .OBJ 7.庫函數 8.文本
三、應用題(第36頁)
5.sizeof是關鍵字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是標識符。
8.源程序:
main()
{int a,b,c; brscanf(“%d %d”,a,b); brc=a;a=b;b=c; brprintf(“%d %d”,a,b);}
執行結果:
12 34
34 12
4 第3章 數據類型與運算規則
一、單項選擇題(第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(整數) 4.單目 自右相左 5.函數調用 6.a或b 7.1 8.65,89
三、應用題(第78頁)
1.10 9
2.執行結果:
11
12
1
5 第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; brscanf(“%d:%d”,h,m); brprintf(“%d\n”,h*60+m);}
執行結果:
9:23
563
3.源程序:
main()
{int a[]={-10,0,15,34},i;
for(i=0;i=3;i++)
printf(“%d\370C=%g\370F\t”,a[i],a[i]*1.8+32);}
執行結果:
-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F
4.源程序:
main()
{double pi=3.14159265358979,r=5; brprintf(“r=%lg A=%.10lf S=%.10lf\n”,r,2*pi*r,pi*pi*r);}
執行結果:
r=5 A=31.4159265359 S=49.3480220054
5.源程序:
#include “math.h”;
main()
{double a,b,c; brscanf(“%lf%lf%lf”,a,b,c); brif (a+bca+cbb+ca) br{double s=(a+b+c)/2; brprintf(“SS=%.10lf\n”,sqrt(s*(s-a)*(s-b)*(s-c)));}
else printf(“Data error!”);}
執行結果:
4 5 6
SS=9.9215674165
6.源程序:
main()
{int a=3,b=4,c=5;float d=1.2,e=2.23,f=-43.56; brprintf(“a=%3d,b=%-4d,c=**%d\nd=%g\ne=%6.2f\nf=%-10.4f**\n”,a,b,c,d,e,f);}
7.源程序:
main()
{int a,b,c,m; brscanf(“%d %d %d”,a,b,c); brm=a;a=b;b=c;c=m; brprintf(“%d %d %d\n”,a,b,c);}
執行結果:
5 6 7
6 7 5
8.源程序:
main()
{int a,b,c; brscanf(“%d %d %d”,a,b,c); brprintf(“average of %d,%d and %d is %.2f\n”,a,b,c,(a+b+c)/3.); br執行結果: br6 7 9 braverage of 6,7 and 9 is 7.33 br9.不能。修改後的源程序如下: brmain() br{int a,b,c,x,y; brscanf(“%d %d %d”,a,b,c); brx=a*b;y=x*c; brprintf(“a=%d,b=%d,c=%d\n”,a,b,c); brprintf(“x=%d,y=%d\n”,x,y);}
6 第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=1x=10||x=200x=210)x1)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; brscanf(“%d,%d,%d”,a,b,c); brprintf(“min=%d\n”,ab?bc?c:b:ac?c:a);}
2.源程序:
main()
{unsigned long a; brscanf(“%ld”,a); brfor(;a;printf(“%d”,a%10),a/=10);}
執行結果:
12345
54321
3.(1)源程序:
main()
{int x,y; brscanf(“%d”,x); brif (x-5×0)y=x; brif (x=0x5)y=x-1; brif (x=5×10)y=x+1; brprintf(“%d\n”,y);}
(2)源程序:
main()
{int x,y; brscanf(“%d”,x); brif(x10) if(x-5) if(x=0) if(x=5)y=x+1; brelse y=x-1; else y=x; brprintf(“%d\n”,y);}
(3)源程序:
main()
{int x,y; brscanf(“%d”,x); brif(x10) if(x=5)y=x+1; brelse if(x=0)y=x-1; brelse if(x-5)y=x; brprintf(“%d\n”,y);}
(4)源程序:
main()
{int x,y; brscanf(“%d”,x); brswitch(x/5) br{case -1:if(x!=-5)y=x;break; brcase 0:y=x-1;break; brcase 1:y=x+1;}
printf(“%d\n”,y);}
4.本題為了避免考慮每月的天數及閏年等問題,故採用面向對象的程序設計。
現給出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);
}
執行結果:(運行於Windows下)
5.源程序:
main()
{unsigned a,b,c; brprintf(“請輸入三個整數:”); brscanf(“%d %d %d”,a,b,c); brif(abca==ba==c)printf(“構成等邊三角形\n”); brelse if(a+bca+cbb+ca) brif(a==b||a==c||b==c)printf(“構成等腰三角形\n”); brelse printf(“構成一般三角形\n”); brelse printf(“不能構成三角形\n”);}
執行結果:
請輸入三個整數:5 6 5
構成等腰三角形
6.源程序:
main()
{int x,y; brscanf(“%d”,x); brif(x20)y=1; brelse switch(x/60) br{case 0:y=x/10;break; brdefault:y=6;}
printf(“x=%d,y=%d\n”,x,y);}
7.源程序:
main()
{unsigned m;float n; brscanf(“%d”,m); brif(m100)n=0; brelse if(m600)n=0.06; brelse n=(m/100+0.5)/100; brprintf(“%d %.2f %.2f\n”,m,m*(1-n),m*n);}
執行結果:
450
450 429.75 20.25
8. 2171天(起始日期和終止日期均算在內)
本題可利用第4小題編好的程序進行計算。把起始日期和終止日期分別打入「生日」和「今日」欄內,單擊「實足年齡」按鈕,將所得到的天數再加上1天即可。
9.源程序:
#include “math.h”;
main()
{unsigned long i; brscanf(“%ld”,i); brprintf(“%ld %d\n”,i%10,(int)log10(i)+1);}
執行結果:
99887
7 5
10.源程序:
main()
{unsigned long i;unsigned j[10],m=0; brscanf(“%ld”,i); brfor(;i;){j[m++]=(i+2)%10;i/=10;}
for(;m;m–)i=i*10+j[m-1];
printf(“%ld\n”,i);}
執行結果:
6987
8109
(註:要加密的數值不能是0或以0開頭。如果要以0開頭需用字符串而不能是整數。)
7 第6章 循環結構程序設計
一、單項選擇題(第142頁)
1-4.BCCB 5-8.CBCA
二、填空題(第143頁)
1.原題可能有誤。如無誤,是死循環 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 ②xamin
三、編程題(第145頁)
1. 源程序:
main()
{int i=1,sum=i; brwhile(i101){sum+=i=-i-2;sum+=i=-i+2;}
printf(“%d\n”,sum);}
執行結果:
51
2.源程序:
main()
{double p=0,n=0,f;int i; brfor(i=1;i=10;i++) br{scanf(“%lf”,f); brif (f0)p+=f; else n+=f;}
printf(“%lf %lf %lf\n”,p,n,p+n);}
3.源程序:
main()
{unsigned a; brscanf(“%ld”,a); brfor (;a;printf(“%d,”,a%10),a/=10); brprintf(“\b \n”);}
執行結果:
23456
6,5,4,3,2
4.源程序:
main()
{unsigned long a,b,c,i; brscanf(“%ld%ld”,a,b); brc=a%1000; brfor(i=1;ib;i++)c=c*a%1000; brif(c100)printf(“0”); brif(c10)printf(“0”); brprintf(“%ld\n”,c);}
執行結果:
129 57
009
5.略
6.原題提供的計算e的公式有誤(前面漏了一項1)。正確的公式是e= 1 + 1 + 1/2! + 1/3! + … + 1/n! + …
(1)源程序:
main()
{double e=1,f=1;int n; brfor(n=1;n=20;n++){f/=n;e+=f;}
printf(“e=%.14lf\n”,e);}
執行結果:
e=2.71828182845905
(2)源程序:
main()
{double e=1,f=1;int n; brfor(n=1;f1e-4;n++){f/=n;e+=f;}
printf(“e=%.4f\n”,e);}
執行結果:
e=2.7183
7.源程序:
main()
{unsigned long a=0,b=1,c=0;int i,d; brscanf(“%d”,d); brfor (i=1;i=(d+2)/3;i++) brprintf(“%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); brfor(i=1;i=d;i++) brprintf(“%10ld”,fun(i));}
執行結果:
15
1 2 3 6 11 20 37 68
125 230 423 778 1431 2632 4841
8.源程序:
main()
{int i; brfor(i=1010;i=9876;i+=2) brif(i/100%11i%100%11i/10%100%11i/1000!=i%10i/1000!=i/10%10i/100%10!=i%10)printf(” %d”,i);}
執行結果:
1024 1026 1028 1032 1034 1036 …… …… 9874 9876
9.源程序:
main()
{int i,j,k; brprintf(“apple watermelon pear\n”); brfor(i=1;i=100;i++) brfor(j=1;j=10;j++) brif((k=100-i-j)*2==400-i*4-j*40) brprintf(“%4d%7d%9d\n”,i,j,k);}
執行結果:
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為階數,可以改為其他正整數 */
main()
{int m=N*2,i,j; brfor(i=1;im;printf(“\n”),i++) brfor(j=1;jm; brputchar(N-abs(i-N)=abs(j++-N)?’ ‘:’*’));}
如果把N值改為5,則執行結果如下:
*
***
*****
*******
*********
*******
*****
***
*
原創文章,作者:JIXL,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/132406.html