大學程序設計課本答案
1. C語言程序設計教程答案~有追加懸賞100分!
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 */
printf("cock hen chick\n");
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 %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;
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));}
執行結果:
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;
x=1.5;
do {x0=pow(x+1,1./3);
deltax=fabs(x0-x);
x=x0;
}while(deltax>1e-12);
printf("%.10f\n",x);}
執行結果:
1.3247179572
5.源程序略。(分子、分母均構成斐波那契數列)
結果是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<b){m=a;a=b;b=m;}
if(a<c){m=a;a=c;c=m;}
if(b<c){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;
scanf("%d",&a);
printf(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;
scanf("%d %d",&a,&b);
c=a;a=b;b=c;
printf("%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
0
0
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;
scanf("%d:%d",&h,&m);
printf("%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;
printf("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;
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=%.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;
printf("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;
scanf("%d %d %d",&a,&b,&c);
m=a;a=b;b=c;c=m;
printf("%d %d %d\n",a,b,c);}
執行結果:
5 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 %.2f\n",a,b,c,(a+b+c)/3.);
執行結果:
6 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=%d\n",a,b,c);
printf("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>=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=%d\n",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);}
執行結果:
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("%d\n",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("%d\n",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("%d\n",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("%d\n",y);}
4.本題為了避免考慮每月的天數及閏年等問題,故採用面向對象的程序設計。
現給出Delphi源程序和C++ Builder源程序。
Delphi源程序:
procere TForm1.Button1Click(Sender: TObject);
begin
edit3.Text:=format('%.0f天',[strtodate(edit2.text) -strtodate(edit1.text)]);
end;
procere 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下) http://img378.photo.163.com/nxgt/41463572/1219713927.jpg
5.源程序:
main()
{unsigned a,b,c;
printf("請輸入三個整數:");
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");}
執行結果:
請輸入三個整數: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=%d\n",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 %.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;
scanf("%ld",&i);
printf("%ld %d\n",i%10,(int)log10(i)+1);}
執行結果:
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("%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 ②x<amin
三、編程題(第145頁)
1. 源程序:
main()
{int i=1,sum=i;
while(i<101){sum+=i=-i-2;sum+=i=-i+2;}
printf("%d\n",sum);}
執行結果:
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 %lf\n",p,n,p+n);}
3.源程序:
main()
{unsigned a;
scanf("%ld",&a);
for (;a;printf("%d,",a%10),a/=10);
printf("\b \n");}
執行結果:
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<b;i++)c=c*a%1000;
if(c<100)printf("0");
if(c<10)printf("0");
printf("%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;
for(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;
for(n=1;f>1e-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;
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));}
執行結果:
15
1 2 3 6 11 20 37 68
125 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);}
執行結果:
1024 1026 1028 1032 1034 1036 …… …… 9874 9876
9.源程序:
main()
{int i,j,k;
printf("apple watermelon pear\n");
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%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;
for(i=1;i<m;printf("\n"),i++)
for(j=1;j<m;
putchar(N-abs(i-N)<=abs(j++-N)?' ':'*'));}
如果把N值改為5,則執行結果如下:
*
***
*****
*******
*********
*******
*****
***
*
作者:寧西貫通 2006-5-7 23:41 回復此發言
--------------------------------------------------------------------------------
8 說明
注意:上面最後一題的輸出結果應該是由星號組成的一個菱形,
9 第7章 數 組
一、單項選擇題(第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]<a[j][k] 6.a[k++]=a[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("%d\n",s);} /* 注:5×5矩陣不能照此計算! */
執行結果:
1 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("%d\t",a[i]);}
執行結果:
2 4 6 8 10 12 14 16 18 20
22 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();
for(i=0;i<=29;i++)
{a[i]=rand();
if(m<a[i])m=a[i];
printf("%d\t",a[i]);}
for(i=0;i<=29;i++)if(a[i]==m)a[i]=-1;
printf("\n-----------------\n");
for(i=0;i<=29;i++)
if(~a[i])printf("%d\t",a[i]);
printf("\n");}
執行結果:
20679 29377 18589 9034 27083 4959 3438 5241 32278 23344
32499 29305 22340 5927 13031 2161 2583 31855 22977 14283
4851 22038 6992 11394 20887 27381 6293 18347 16414 10210
-----------------
20679 29377 18589 9034 27083 4959 3438 5241 32278 23344
29305 22340 5927 13031 2161 2583 31855 22977 14283 4851
22038 6992 11394 20887 27381 6293 18347 16414 10210
4.源程序:
main()
{int i,n=0,b[16];
scanf("%d",&i);
for(;i;i>>=1)b[n++]=i&1;
for(;n;)printf("%d",b[--n]);}
執行結果:
9876
10011010010100
本題也可以不用數組。源程序如下:
#include "stdio.h"
main()
{int i,n;
scanf("%d",&i);
for(n=16;n;n--)
{asm ROL i,1
putchar(i&1|48);}
} /* ROL是循環左移的匯編指令 */
5. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 6
main()
{int a[M][N],i,j,t[M];
randomize();
/*生成M行N列隨機數*/
for(i=0;i<M;printf("\n"),t[i++]=0)
for(j=0;j<N;j++)
printf("%4d",a[i][j]=random(50));
/*找出每行的最小數,t[M]是第M行的最小數所在的列數*/
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(a[i][t[i]]>a[i][j])t[i]=j;
/*比較每個最小數在其所在的列上是否也是最小*/
for(j=0;j<M;j++)
for(i=0;i<M;i++)
{if(i==j)continue;
if(a[j][t[j]]>a[i][t[j]])
{t[j]=-1;break;}
}
printf("-------------------\n");
/*輸出在行和列上均為最小的數*/
for(i=0;i<M;i++)
if(t[i]!=-1)
printf("a[%d,%d]=%d\n",i,t[i],a[i][t[i]]);
}
執行結果:
13 19 13 20 0 1
20 41 6 16 35 30
3 5 37 8 23 15
6 36 24 29 18 1
1 5 28 21 46 34
-------------------
a[0,4]=0
a[1,2]=6
a[3,5]=1
a[4,0]=1
6. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 7
main()
{int a[M][N],i,j,t=0;
randomize();
for(i=0;i<M;i++)
{a[i][N-1]=0;
for(j=0;j<N-1;j++)
{printf("%4d",a[i][j]=random(91)+10);
a[i][N-1]+=a[i][j];}
printf("%4d\n",a[i][N-1]);}
for(i=1;i<M;i++)
if(a[i][N-1]>a[t][N-1])t=i;
if(t)for(j=0;j<N;j++)
{i=a[0][j];a[0][j]=a[t][j];a[t][j]=i;}
printf("-----------------\n");
for(i=0;i<M;printf("\n"),i++)
10 第7章 數 組
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
}
執行結果:
89 17 32 95 35 20 288
39 48 22 27 73 22 231
51 87 39 71 84 46 378
84 94 97 77 27 26 405
69 50 56 89 37 46 347
-----------------
84 94 97 77 27 26 405
39 48 22 27 73 22 231
51 87 39 71 84 46 378
89 17 32 95 35 20 288
69 50 56 89 37 46 347
7. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 6
main()
{int a[M][N],i,j;
struct data{int value,x,y;}max,min;
max.value=0;min.value=100;
randomize();
for(i=0;i<M;printf("\n"),i++)
for(j=0;j<N;j++)
{printf("%4d",a[i][j]=random(100)+1);
if(max.value<a[i][j])
{max.value=a[i][j];max.x=i;max.y=j;}
if(min.value>a[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;
i=a[M-1][0];a[M-1][0]=min.value;a[min.x][min.y]=i;
for(i=0;i<M;printf("\n"),i++)
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
}
執行結果:
51 53 74 65 30 40
30 26 50 6 61 27
47 16 54 58 76 19
57 74 44 92 71 48
73 57 60 32 73 67
-----------------
51 53 74 65 30 92
30 26 50 73 61 27
47 16 54 58 76 19
57 74 44 40 71 48
6 57 60 32 73 67
9. 源程序:
main()
{char s[255];int i,j,b=1;
printf("Input a string:");
scanf("%s",s);
i=strlen(s);
for(j=1;j<=i/2;j++)
b=b&&(s[j-1]==s[i-j]);
printf(b?"Yes\n":"No\n");}
執行結果:
Input a string:level
Yes
10. 源程序:
main()
{char s[255],t,max=0,min=0,l,i;
printf("Input a string(length>4):");
gets(s);
l=strlen(s);
for(i=0;i<l;i++)
{if(s[max]<s[i])max=i;if(s[min]>s[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("%s\n",s);}
執行結果:
Input a string(length>4):C++Builder
Cu+Beild+r
11. 源程序:
main()
{char m[13][10]={"****","January","February","March",
"April","May","June","July","August","September",
"October","November","December"};
int i,j,k,a,s,n;
printf("Please input an integer(100..999):");
scanf("%d",&n);
printf("%d:%d+%d+%d=%d, %d%%13=%d, %s\n", n,i,j,k,s,s,a,m[a=((s=(i=n/100)+(j=n/10%10)+(k=n%10))%13)]);}
執行結果:
Please input an integer(100..999):539
539:5+3+9=17, 17%13=4, April
11 第8章 函 數
一、單項選擇題(第241頁)
1-5.BCCAA 6-10.CCDDD 11-15.ACACB
二、填空題(第243頁)
1.看不出原題的意圖。因為要計算1~n的累加和,n應是一個≥1的正整數。可是題目中卻出現了n=0的情況。除非另加規定當n=0時1~n的累加和為0,或者把原題中的計算式改為計算0~n的累加和。據此猜測,原題應填為:①return(0) ②return(n+sum(n-1))
根據題意,如下程序較為合理:
int sum(int n)
{if(n<=0)return(-1); /* -1是出錯標志 */
else if(n==1)return(1);
else return(n+sum(n-1));}
2. ①return(1) ②return(n*facto(n-1))
三、編程題(第244頁)
3.源程序:
main()
{int i,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("%d\t",i);}
執行結果:
153 370 371 407
8.源程序(非遞歸演算法):
#define P 13 /* P可以改為其他正整數 */
main()
{int a[P],r,c;
for(r=0;r<=P;r++)
{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");}
}
執行結果:
(應該排列成一個三角形,是貼吧造成現在這個樣子的,不是程序有問題)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
9.源程序(遞歸演算法):
#include "stdio.h"
void printOCT(unsigned long n)
{unsigned long i;
if(i=n>>3)printOCT(i);
putchar((n&7)+48);}
main()
{unsigned long i;
scanf("%ld",&i);
printOCT(i);}
執行結果:
1234567890
11145401322
本題也可以不用遞歸演算法,源程序請參考第7章第三題4。
12 回復:【C語言】《C語言程序設計教程(第二版)》習題答案
但是不同時間印刷的版本課後題不太一樣呢,象我們的是1999年12月第2版,2005年12月第69次印刷的。沒有選擇填空,應用題和樓主不知道有多少相同的,因為看不到原題。這個比較麻煩呢。
作者:210.77.204.* 2006-5-9 18:38 回復此發言
--------------------------------------------------------------------------------
13 回復:【C語言】《C語言程序設計教程(第二版)》習題答案
你對照一下主編和出版社,看看對嗎?(見說明的第一條。)
我不是說叫你有問題另發帖子嗎?
14 第9章 指 針
一、單項選擇題(第276頁)
1-5.DCDAC 6-10.CCABC 11-16.AABBB 16-20.DCDBD
二、填空題(第278頁)
1.①int * ②*z
2.*p++
3.①'\0' ②++
4.①q=p+1 ②q<p+10 ③*q>max ④*q<min
三、編程題(第280頁)
7.源程序:
main()
{int i=0;char c[20];
do{scanf("%s",&c);i++;}
while(strcmp(c,"stop"));
printf("%d\n",i);}
執行結果:
This car ran form Nanyang
to Luoyang without a stop
10
9.源程序:
main()
{char s[255],c[255]={0};int i;
gets(s);
for(i=0;s[i];c[s[i++]]++);
for(i=0;i<255;i++)
if(c[i])printf("%c=%d\t",i,c[i]);}
執行結果:
abcedabcdcd
a=2 b=2 c=3 d=3 e=1
2. c++程序設計基礎教程課後答案(清華大學出版社鄭莉 董淵著)
第 一 章 概述
1-1 簡述計算機程序設計語言的發展歷程。
解:
迄今為止計算機程序設計語言的發展經歷了機器語言、匯編語言、高級語言等階段,C++語言是一種面向對象的編程語言,也屬於高級語言。
1-2 面向對象的編程語言有哪些特點?
解:
面向對象的編程語言與以往各種編程語言有根本的不同,它設計的出發點就是為了能更直接的描述客觀世界中存在的事物以及它們之間的關系。面向對象的編程語言將客觀事物看作具有屬性和行為的對象,通過抽象找出同一類對象的共同屬性(靜態特徵)和行為(動態特徵),形成類。通過類的繼承與多態可以很方便地實現代碼重用,大大縮短了軟體開發周期,並使得軟體風格統一。因此,面向對象的編程語言使程序能夠比較直接地反問題域的本來面目,軟體開發人員能夠利用人類認識事物所採用的一般思維方法來進行軟體開發。C++語言是目前應用最廣的面向對象的編程語言。
1-3 什麼是結構化程序設計方法?這種方法有哪些優點和缺點?
解:
結構化程序設計的思路是:自頂向下、逐步求精;其程序結構是按功能劃分為若干個基本模塊;各模塊之間的關系盡可能簡單,在功能上相對獨立;每一模塊內部均是由順序、選擇和循環三種基本結構組成;其模塊化實現的具體方法是使用子程序。結構化程序設計由於採用了模塊分解與功能抽象,自頂向下、分而治之的方法,從而有效地將一個較復雜的程序系統設計任務分解成許多易於控制和處理的子任務,便於開發和維護。
雖然結構化程序設計方法具有很多的優點,但它仍是一種面向過程的程序設計方法,它把數據和處理數據的過程分離為相互獨立的實體。當數據結構改變時,所有相關的處理過程都要進行相應的修改,每一種相對於老問題的新方法都要帶來額外的開銷,程序的可重用性差。
由於圖形用戶界面的應用,程序運行由順序運行演變為事件驅動,使得軟體使用起來越來越方便,但開發起來卻越來越困難,對這種軟體的功能很難用過程來描述和實現,使用面向過程的方法來開發和維護都將非常困難。
1-4 什麼是對象?什麼是面向對象方法?這種方法有哪些特點?
解:
從一般意義上講,對象是現實世界中一個實際存在的事物,它可以是有形的,也可以是無形的。對象是構成世界的一個獨立單位,它具有自己的靜態特徵和動態特徵。面向對象方法中的對象,是系統中用來描述客觀事物的一個實體,它是用來構成系統的一個基本單位,由一組屬性和一組行為構成。
面向對象的方法將數據及對數據的操作方法放在一起,作為一個相互依存、不可分離的整體--對象。對同類型對象抽象出其共性,形成類。類中的大多數數據,只能用本類的方法進行處理。類通過一個簡單的外部介面,與外界發生關系,對象與對象之間通過消息進行通訊。這樣,程序模塊間的關系更為簡單,程序模塊的獨立性、數據的安全性就有了良好的保障。通過實現繼承與多態性,還可以大大提高程序的可重用性,使得軟體的開發和維護都更為方便。
面向對象方法所強調的基本原則,就是直接面對客觀存在的事物來進行軟體開發,將人們在日常生活中習慣的思維方式和表達方式應用在軟體開發中,使軟體開發從過分專業化的方法、規則和技巧中回到客觀世界,回到人們通常的思維。
1-5 什麼叫做封裝?
解:
封裝是面向對象方法的一個重要原則,就是把對象的屬性和服務結合成一個獨立的系統單位,並盡可能隱蔽對象的內部細節。
1-6 面向對象的軟體工程包括哪些主要內容?
解:
面向對象的軟體工程是面向對象方法在軟體工程領域的全面應用,它包括面向對象的分析(OOA)、面向對象的設計(OOD)、面向對象的編程(OOP)、面向對象的測試(OOT)和面向對象的軟體維護(OOSM)等主要內容。
1-7 簡述計算機內部的信息可分為幾類?
解:
計算機內部的信息可以分成控制信息和數據信息二大類;控制信息可分為指令和控制字兩類;數據信息可分為數值信息和非數值信息兩類。
1-8 什麼叫二進制?使用二進制有何優點和缺點?
解:
二進制是基數為2,每位的權是以2 為底的冪的進制,遵循逢二進一原則,基本符號為0和1。採用二進制碼表示信息,有如下幾個優點:1.易於物理實現;2.二進制數運算簡單;3.機器可靠性高;4.通用性強。其缺點是它表示數的容量較小,表示同一個數,二進制較其他進制需要更多的位數。
1-9 請將以下十進制數值轉換為二進制和十六進制補碼:
(1)2 (2)9 (3)93
(4)-32 (5)65535 (6)-1
解:
(1) (2)10 = (10)2 = (2)16
(2) (9)10 = (1001)2 = (9)16
(3) (93)10 = (1011101)2 = (5D)16
(4) (-32)10 = (11100000)2 = (E0)16
(5) (65535)10 = (11111111 11111111)2 = (FFFF)16
(6) (-1)10 = (11111111 11111111)2 = (FFFF)16
1-10 請將以下數值轉換為十進制:
(1)(1010)2 (2)(10001111)2 (3)(01011111 11000011)2
(4)(7F)16 (5)(2D3E)16 (6)(F10E)16
解:
(1)(1010)2 = (10)10
(2)(10001111)2 = (143)10
(3)(01011111 11000011)2 = (24515)10
(4)(7F)16 = (127)10
(5)(2D3E)16 = (11582)10
(6)(F10E)16 = (61710)10
1-11 簡要比較原碼、反碼、補碼等幾種編碼方法。
解:
原碼:將符號位數字化為 0 或 1,數的絕對值與符號一起編碼,即所謂"符號——絕對值表示"的編碼。
正數的反碼和補碼與原碼表示相同。
負數的反碼與原碼有如下關系:
符號位相同(仍用1表示),其餘各位取反(0變1,1變0)。
補碼由該數反碼的最末位加1求得。
第 二 章 C++簡單程序設計
2-1 C++語言有那些主要特點和優點?
解:
C++語言的主要特點表現在兩個方面,一是全面兼容C,二是支持面向對象的方法。C++是一個更好的C,它保持了C的簡潔、高效、接近匯編語言、具有良好的可讀性和可移植性等特點,對C的類型系統進行了改革和擴充,因此C++比C更安全,C++的編譯系統能檢查出更多的類型錯誤。 C++語言最重要的特點是支持面向對象。
2-2 下列標識符哪些是合法的?
Program, -page, _lock, test2, 3in1, @mail, A_B_C_D
解:
Program, _lock, test2, A_B_C_D是合法的標識符,其它的不是。
2-3 例2.1中每條語句的作用是什麼?
#include <iostream.h>
void main(void)
{
cout<<"Hello!\n";
cout<<"Welcome to c++!\n";
}
解:
#include <iostream.h> //指示編譯器將文件iostream.h中的代碼
//嵌入到該程序中該指令所在的地方
void main() //主函數名,void 表示函數沒有返回值
{ //函數體標志
cout<<"Hello!\n"; //輸出字元串Hello!到標准輸出設備(顯示器)上。
cout<<"Welcome to c++!\n"; //輸出字元串Welcome to c++!
}
在屏幕輸出如下:
Hello!
Welcome to c++!
2-4 使用關鍵字const而不是#define語句的好處有哪些?
解:
const定義的常量是有類型的,所以在使用它們時編譯器可以查錯;而且,這些變數在調試時仍然是可見的。
2-5 請寫出C++語句聲明一個常量PI,值為3.1416;再聲明一個浮點型變數a,把PI的值賦給a。
解:
const float PI = 3.1416;
float a = PI;
2-6 在下面的枚舉類型中,Blue的值是多少?
enum COLOR ;
解:
Blue = 102
2-7 注釋有什麼作用?C++中有哪幾種注釋的方法?他們之間有什麼區別?
解:
注釋在程序中的作用是對程序進行註解和說明,以便於閱讀。編譯系統在對源程序進行編譯時不理會注釋部分,因此注釋對於程序的功能實現不起任何作用。而且由於編譯時忽略注釋部分,所以注釋內容不會增加最終產生的可執行程序的大小。適當地使用注釋,能夠提高程序的可讀性。在C++中,有兩種給出注釋的方法:一種是延用C語言方法,使用"/*"和"*/"括起注釋文字。另一種方法是使用"//",從"//"開始,直到它所在行的行尾,所有字元都被作為注釋處理。
2-8 什麼叫做表達式?x = 5 + 7是一個表達式嗎?它的值是多少?
解:
任何一個用於計算值的公式都可稱為表達式。x = 5 + 7是一個表達式,它的值為12。
2-9 下列表達式的值是多少?
1. 201 / 4
2. 201 % 4
3. 201 / 4.0
解:
1. 50
2. 1
3. 50.25
2-10 執行完下列語句後,a、b、c三個變數的值為多少?
a = 30;
b = a++;
c = ++a;
解:
a:32 ; b:30 ; c:32;
2-11 在一個for循環中,可以初始化多個變數嗎?如何實現?
解:
在for循環設置條件的第一個";"前,用,分隔不同的賦值表達式。
例如:
for (x = 0, y = 10; x < 100; x++, y++)
2-12 執行完下列語句後,n的值為多少?
int n;
for (n = 0; n < 100; n++)
3. C語言程序設計教程(第二版) 周宇 課後答案
二、 1. I love China! printf("we are students.\n") 2. 6 項目實訓題參考答案 1.編寫一個C程序,輸出以下信息: * * * * * * * * * * * * * * * * * * * * I am a student! * * * * * * * * * * * * * * * * * * * * main() { printf("********************\n"); printf(" I am a student!\n "); printf("********************\n"); } 2222....已知立方體的長、寬、高分別是10cm、20cm、15cm,編寫程序,求立方體體積。 解: main() { int a,b,c,v; a=10; b=20; c=15; v=a*b*c; printf("v=%d",v); } 本程序運行結果為: v=3000 第第第第2章章章章 編制編制編制編制C程序的基礎知識程序的基礎知識程序的基礎知識程序的基礎知識 一 選擇題 C B A B A C C 二 操作題 2 21. 3,2,-8,2 3.000000,2.500000,-8.000000 2. ABC DE FGH why is 21+35 equal 52 3. 3 1 4 3 2 3 1 2 4. aa bb cc abc A N 項目實訓題 1.定義一個符號常量M為5和一個變數n值為2,把它們的乘積輸出。 #define M 5 main() { int n,c; n=2; c=M*n; printf("%d\n",c); } 2.編程求下面算術表達式的值。 (1)x+a%3*(int)(x+y)%2/4,設x=2.5,a=7,y=4.7; (2)(float)(a+b)/2+(int)x%(int)y,設a=2,b=3,x=3.5,y=2.5。 (1)main() { int a=7; float x=2.5,y=4.7; printf("%f\n",x+a%3*(int)(x+y)%2/4); } (2)main() { int a=2,b=3; float x=3.5,y=2.5; printf("%f\n",(float)(a+b)/2+(int)x%(int)y); 第三章第三章第三章第三章 順序結構程序設計順序結構程序設計順序結構程序設計順序結構程序設計 一 選擇題 A C D C C 二 操作題 1. x=3,a=2,b=3 2. z=12.700000 3. 1 2 1 a 2 1 2 三三三三....編程題 編程題編程題編程題編程題 1. 某工種按小時計算工資,每月勞動時間(小時)×每小時工資=總工資,總工資中扣除10%公積金,剩餘的為應發工資。編寫一個程序從鍵盤輸入勞動時間和每小時工資,列印出應發工資。 解: #include <stdio.h> main() { float sj,gz,yfgz; printf("time,salary:"); scanf("%f,%f",&sj,&gz); yfgz=sj*gz*0.9; printf("total salary:%f\n",yfgz); } 本程序運行結果為: time,salary:4,3<CR> total salary:10.800000 2.編寫一個程序求出任意一個輸入字元的ASCII碼 解: #include <stdio.h> main() { char c; printf("Input a string:"); scanf("%c",&c); printf("%c ASCII is %d\n",c,c); } 本程序運行結果為: Input a string:a<CR> a ASCII is 97 3、編寫一個程序用於水果店售貨員算帳:已知蘋果每斤2.50元,鴨梨每斤1.80元,香蕉每斤2元,橘子每斤1.6元,要求輸入各類水果的重量,列印出應付第四章第四章第四章第四章 選擇結構程序設計選擇結構程序設計選擇結構程序設計選擇結構程序設計 一、略 二、B B A B C B A 三、1. 1 0 2. 2 3 2 2 3. 10 20 0 4. ch>=』A』&&ch<=』Z』||ch>=』a』&&ch<=』z』 ch>=』0』&&ch<=』9』 ch==』 』 5. -1 四、上機操作 1. 從鍵盤輸入一個英文字母,如果是大寫字母,則將它變為小寫字母輸出;如果是小寫字母,則將其變為大寫字母輸出。 #include<stdio.h> main() {char ch; ch=getchar(); if(ch>='A'&&ch<='Z') ch+=32; else if(ch>='a'&&ch<='z') ch-=32; putchar(ch); putchar('\n'); } 2. 根據輸入的x值依據下列表達式,計算y的值。 2x (x>-1) y = 3 (x=-1) 4+x (x<-1) 解: main() { float x,y; scanf("%f",&x); if(x>-1) y=2*x; else if(x==1) y=3; else y=4+x; printf("y=%f",y); } 本程序運行結果為: -2<CR> y=2.000000 3.編寫程序,輸入一個整數,判斷它是奇數還是偶數,若是奇數,輸出「Is Odd「;若是偶數,輸出「Is Even「。 main() { int x; scanf("%d",&x); if(x%2==0) printf("Is Even\n"); else printf("Is Odd\n"); } 4.設計應用程序,求二次方程ax2+bx+c=0的解。 #include<math.h> main() { float a,b,c,disc,x1,x2,p,q; scanf("%f,%f,%f",&a,&b,&c); if(fabs(a)<=1e-6) printf(" The equation is not a quadratic\n"); else { disc=b*b-4*a*c; if(fabs(disc)< 1e-6) printf("x1=x2=%8.4f\n",-b/(2*a)); else if(disc>1e-6) {x1=(-b+sqrt(disc)/(2*a)); x2=(-b-sqrt(disc)/(2*a)); printf("x1=%8.4f,x2=%8.4f\n",x1,x2); } else { p=-b/(2*a); q=sqrt(-disc/(2*a)); printf("%8.4f+%x8.4fi\n",p,q); printf("%8.4f-%8.4fi\n",p,q);} } } 5555....按托運規則,行李不超過50公斤時,運費為0.15元/公斤,如超過50公斤,超過部分的運費為0.22元/公斤,現有行李w公斤,編寫一個程序計算運費。 解: #include <stdio.h> main() { float w,f,x; printf("weight:"); scanf("%f",&w); if(w<=50) x=0.15*w; else x=0.15*50+0.22*(w-50); printf("money:%6.2f yuan\n",x); } 本程序運行結果為: weight:20<CR> money:3.00 yuan weight:60<CR> money:9.70 yuan 6. 某商場給與顧客購物的折扣率如下: 購物金額<200元 不打折 500元>購物金額>=200元 9折 1000元>購物金額>=500元 8折 購物金額>=1000元 7.5折 輸入一個購物金額,輸出打折率、購物實際付款金額。 #include<stdio.h> main() { float x,y,realx; scanf("%f",&x); if(x<=0) { printf("Error! You input a worry number!\n"); y=0;} else { if(x<200) y=1.0; else if(x<500) y=0.9; else if(x<1000) y=0.8; else y=0.75;} if(y!=0) {realx=x*y; printf("y=%f, the realx=%5.2f\n", y,realx);} } 第五章第五章第五章第五章 循環結構程序設計循環結構程序設計循環結構程序設計循環結構程序設計 一、選擇題 C C A A D D第六章第六章第六章第六章 數組數組數組數組 、選擇題 D A D A A C C A D 二、程序閱讀題 13 13 13 13 13 13第七章第七章第七章第七章 函數函數函數函數 一、選擇題 B D C B B D A A D第第第第8888章章章章 指針指針指針指針 一、選擇題 D A C C(D) D C D 二、填空題 1. m 2. 指針數組名 3. ABCDCD 4.49 5. 25
4. 跪求《C語言程序設計》課本習題答案!!!
習題1參考答案
一、選擇題 1. A 2. D
二、填空題
1. BASIC、FORTRAN、AL_GOL60和COBOL 2. 8
3. 關鍵字
4. 編輯、編譯、鏈接和運行
三、簡答題 1.答:
(1)C語言具有結構化的控制語句。C語言提供了結構化程序所必需的基本控制語句,實現了對邏輯流的有效控制。
(2)C語言具有豐富的數據結構類型。C語言除提供整型、實型、字元型等基本數據類型外,還提供了用基本數據類型構造出的各種復雜的數據結構,如數組、結構、聯合等。C語言還提供了與地址密切相關的指針類型。此外,用戶還可以根據需要自定義數據類型。 (3)C語言具有豐富的運算符。C語言提供了多達34種運算符,豐富的數據類型與豐富的運算符相結合,使C語言的表達力更具靈活性,同時也提高了執行效率。
(4)C語言簡潔、緊湊,使用方便、靈活,程序書寫自由,有9種控制語句。
(5)C語言既具有高級語言的功能,又具有低級語言的許多功能,通常被稱為中級計算機語言。它既是成功的系統描述語言,又是通用的程序設計語言。 (6)C語言與匯編語言相比,可移植性好。
(7)功能強大。C語言具有低級語言的一些功能,所以,生成目標代碼質量高,程序執行效率高。現在許多系統軟體都用C語言來描述,可以大大提高了編程效率。
2.答:運行一個C語言程序,一般需要經過如下幾個步驟:①上機輸入並編輯源程序;②編譯源程序;③與庫函數連接;④生成可執行目標程序;⑤運行目標程序。 3.答:
(1)操作系統的設計與實現。C語言是一種應用非常廣泛的結構化高級程序設計語言,既適合編寫應用軟體,又適合編寫系統軟體。