《C语言程序设计教程第二版》习题答案文档格式.docx
《《C语言程序设计教程第二版》习题答案文档格式.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计教程第二版》习题答案文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
{inti;
for(i=0;
=19;
%8d"
fib(i));
fib(inti)
{return(i<
=1?
1:
fib(i-1)+fib(i-2));
11235813213455
891442333776109871597258441816765
4.源程序:
#include"
math.h"
;
{doublex,x0,deltax;
x=1.5;
do{x0=pow(x+1,1./3);
deltax=fabs(x0-x);
x=x0;
}while(deltax>
1e-12);
%.10f\n"
x);
1.3247179572
5.源程序略。
(分子、分母均构成斐波那契数列)
结果是32.66026079864
6.源程序:
{inta,b,c,m;
Pleaseinputa,bandc:
"
scanf("
%d%d%d"
&
a,&
b,&
c);
if(a<
b){m=a;
a=b;
b=m;
c){m=a;
a=c;
c=m;
if(b<
c){m=b;
b=c;
%d%d%d\n"
a,b,c);
123456789
789456123
7.源程序:
{inta;
%d"
a);
printf(a%21==0?
Yes"
:
No"
42
Yes
3第2章C语言概述
一、单项选择题(第34页)
1-4.BDCB5-8.AABC
二、填空题(第35页)
1.主2.C编译系统3.函数函数4.输入输出5.头6..OBJ7.库函数8.文本
三、应用题(第36页)
5.sizeof是关键字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是标识符。
8.源程序:
{inta,b,c;
%d%d"
b);
c=a;
1234
3412
4第3章数据类型与运算规则
一、单项选择题(第75页)
1-5.DBACC6-10.DBDBC11-15.ADCCC16-20.CBCCD21-25.ADDBC26-27.AB
二、填空题(第77页)
1.补码2.±
(10^-308~10^308)3.int(整数)4.单目自右相左5.函数调用6.a或b7.18.65,89
三、应用题(第78页)
1.109
2.执行结果:
11
0
12
1
5第4章顺序结构程序设计
一、单项选择题(第90页)
1-5.DCDAD6-10.BACBB
二、填空题(第91页)
1.一;
2.5.1690003.
(1)-2002500
(2)I=-200,j=2500(3)i=-200
j=25004.a=98,b=765.000000,c=4321.0000005.略6.0,0,37.38.scanf("
%lf%lf%lf"
9.1313.000000,13.00000010.a=a^c;
c=c^a;
a=a^c;
(这种算法不破坏b的值,也不用定义中间变量。
)
三、编程题(第92页)
1.仿照教材第27页例2-1。
{inth,m;
%d:
h,&
m);
%d\n"
h*60+m);
9:
23
563
3.源程序:
{inta[]={-10,0,15,34},i;
=3;
%d\370C=%g\370F\t"
a[i],a[i]*1.8+32);
-10℃=14°
F0℃=32°
F15℃=59°
F34℃=93.2°
F
{doublepi=3.14159265358979,r=5;
r=%lgA=%.10lfS=%.10lf\n"
r,2*pi*r,pi*pi*r);
r=5A=31.4159265359S=49.3480220054
5.源程序:
{doublea,b,c;
if(a+b>
c&
a+c>
b&
b+c>
a)
{doubles=(a+b+c)/2;
SS=%.10lf\n"
sqrt(s*(s-a)*(s-b)*(s-c)));
elseprintf("
Dataerror!
456
SS=9.9215674165
{inta=3,b=4,c=5;
floatd=1.2,e=2.23,f=-43.56;
a=%3d,b=%-4d,c=**%d\nd=%g\ne=%6.2f\nf=%-10.4f**\n"
a,b,c,d,e,f);
m=a;
567
675
averageof%d,%dand%dis%.2f\n"
a,b,c,(a+b+c)/3.);
679
averageof6,7and9is7.33
9.不能。
修改后的源程序如下:
{inta,b,c,x,y;
x=a*b;
y=x*c;
a=%d,b=%d,c=%d\n"
x=%d,y=%d\n"
x,y);
}
6第5章选择结构程序设计
一、单项选择题(第113页)
1-4.DCBB5-8.DABD
二、填空题(第115页)
1.非002.k==0
3.if(abs(x)>
4)printf("
error!
4.if((x>
=1&
x<
=10||x>
=200&
=210)&
x&
1)printf("
5.k=1(原题最后一行漏了个d,如果认为原题正确,则输出k=%。
6.8!
Right!
117.$$$a=08.a=2,b=1
三、编程题(第116页)
1.有错。
正确的程序如下:
%d,%d,%d"
min=%d\n"
a>
b?
b>
c?
c:
b:
a>
{unsignedlonga;
%ld"
for(;
a;
a%10),a/=10);
12345
54321
3.
(1)源程序:
{intx,y;
x);
if(x>
-5&
0)y=x;
=0&
5)y=x-1;
=5&
10)y=x+1;
y);
(2)源程序:
if(x<
10)if(x>
-5)if(x>
=0)if(x>
=5)y=x+1;
elsey=x-1;
elsey=x;
(3)源程序:
elseif(x>
=0)y=x-1;
-5)y=x;
(4)源程序:
switch(x/5)
{case-1:
if(x!
=-5)y=x;
break;
case0:
y=x-1;
case1:
y=x+1;
4.本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。
现给出Delphi源程序和C++Builder源程序。
Delphi源程序:
procedureTForm1.Button1Click(Sender:
TObject);
begin
edit3.Text:
=format('
%.0f天'
[strtodate(edit2.text)-strtodate(edit1.text)]);
end;
procedureTForm1.FormCreate(Sender:
Edit2.Text:
=datetostr(now);
button1click(form1)
C++Builder源程序:
void__fastcallTForm1:
Button1Click(TObject*Sender)
{
Edit3->
Text=IntToStr(StrToDate(Edit2->
Text)-StrToDate(Edit1->
Text))+"
天"
FormCreate(TObject*Sender)
Edit2->
Text=DateToStr(Now());
Button1Click(Form1);
(运行于Windows下)
{unsigneda,b,c;
请输入三个整数:
if(a&
a==b&
a==c)printf("
构成等边三角形\n"
elseif(a+b>
if(a==b||a==c||b==c)printf("
构成等腰三角形\n"
构成一般三角形\n"
不能构成三角形\n"
565
构成等腰三角形
20)y=1;
elseswitch(x/60)
{case0:
y=x/10;
default:
y=6;
{unsignedm;
floatn;
if(m<
100)n=0;
elseif(m>
600)n=0.06;
elsen=(m/100+0.5)/100;
%d%.2f%.2f\n"
m,m*(1-n),m*n);
450
450429.7520.25
8.2171天(起始日期和终止日期均算在内)
本题可利用第4小题编好的程序进行计算。
把起始日期和终止日期分别打入“生日”和“今日”栏内,单击“实足年龄”按钮,将所得到的天数再加上1天即可。
9.源程序:
{unsignedlongi;
i);
%ld%d\n"
i%10,(int)log10(i)+1);
99887
75
10.源程序:
unsignedj[10],m=0;
i;
){j[m++]=(i+2)%10;
i/=10;
m;
m--)i=i*10+j[m-1];
%ld\n"
i);
6987
8109
(注:
要加密的数值不能是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②x<
amin
三、编程题(第145页)
1.源程序:
{inti=1,sum=i;
while(i<
101){sum+=i=-i-2;
sum+=i=-i+2;
sum);
执行结果:
51
{doublep=0,n=0,f;
{scanf("
%lf"
f);
if(f>
0)p+=f;
elsen+=f;
%lf%lf%lf\n"
p,n,p+n);
3.源程序:
{unsigneda;
for(;
%d,"
\b\n"
23456
6,5,4,3,2
{unsignedlonga,b,c,i;
%ld%ld"
c=a%1000;
b;
i++)c=c*a%1000;
if(c<
100)printf("
0"
10)printf("
c);
12957
009
5.略
6.原题提供的计算e的公式有误(前面漏了一项1)。
正确的公式是e=1+1+1/2!
+1/3!
+…+1/n!
+…
(1)源程序:
{doublee=1,f=1;
intn;
for(n=1;
n<
n++){f/=n;
e+=f;
e=%.14lf\n"
e);
e=2.71828182845905
f>
1e-4;
e=%.4f\n"
e=2.7183
{unsignedlonga=0,b=1,c=0;
inti,d;
d);
for(i=1;
=(d+2)/3;
%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);
{inti,d;
scanf("
=d;
%10ld"
fun(i));
15
123611203768
125230423778143126324841
for(i=1010;
=9876;
i+=2)
if(i/100%11&
i%100%11&
i/10%100%11&
i/1000!
=i%10&
=i/10%10&
i/100%10!
=i%10)printf("
%d"
102410261028103210341036…………98749876
applewatermelonpear\n"
=100;
if((k=100-i-j)*2==400-i*4-j*40)
%4d%7d%9d\n"
i,j,k);
applewatermelonpear
5590
24472
43354
62236
81118
stdio.h"
#defineN4/*N为阶数,可以改为其他正整数*/
{intm=N*2,i,j;
\n"
),i++)
putchar(N-abs(i-N)<
=abs(j++-N)?
'
'
*'
));
如果把N值改为5,则执行结果如下:
*
***
*****
*******
*********
*
作者:
宁西贯通
2006-5-723:
41 回复此发言
--------------------------------------------------------------------------------
8说明
注意:
上面最后一题的输出结果应该是由星号组成的一个菱形,
9第7章数组
一、单项选择题(第192页)
1-4.BBCC5-8.AABA
二、填空题(第194页)
1.1
2
4
8
16
32
64
128
256
512
2.①a[age]++②i=18;
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.源程序:
{inta[4][4],i,j,s=0;
4;
for(j=0;
a[i][j]);
if(i==j||i+j==3)s+=a[i][j];
s);
}/*注:
5×
5矩阵不能照此计算!
*/
12345678910111213141516
68
2.源程序:
{inti,a[36];
a[0]=2;
=29;
i++)a[i]=a[i-1]+2;
=35;
i++)a[i]=a[(i-30)*5+2];
i++)printf("
%d\t"
a[i]);
2468101214161820
22242628303234363840
42444648505254565860
61626364656
3.源程序:
stdlib.h"
time.h"