C语言程序设计教材答案.docx
《C语言程序设计教材答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教材答案.docx(53页珍藏版)》请在冰豆网上搜索。
C语言程序设计教材答案
第一章:
程序设计基础知识
一、单项选择题
1.C2.B3.B4.C5.D6.A7.C8.A
二、填空题
1.判断条件
2.面向过程编程
3.结构化
4.程序
5.面向对象的程序设计语言
6.基本功能操作、控制结构
7.有穷性
8.直到型循环结构
9.算法
10.可读性
11.模块化
12.对问题的分解和模块的划分
三、应用题
1、用如何一种熟悉的方法描述求N个数中最小数的算法。
2、用枚举法设计例1-4中百钱买百鸡问题的算法,并用流程图表示;
3分别用递推和递规两种算法计算斐波那契数列:
f(n+2)=f(n+1)+f(n),f
(1)=f(0)=1
的前30项,并用流程图表示
a)递推b)递规
递推公式:
f(n)=f(n-1)+f(n-2)递规公式:
f(n)=f(n-1)+f(n-2)
f
(1)=f(0)=1
b)递推b)递规
n=30
当n>0
p=f(n)
输出p
n=n-1
/*f(n)*/
n>1
YN
r=f(n-1)+f(n-2)r=1
返回r
4:
一般迭代法:
迭代公式:
x1=1-x03,收敛条件:
|x0/x1|<=1e-5
牛顿迭代法:
f(x)=x3-x-1,f’(x)=3x2-1
迭代公式:
x1=x0-f(x0)/f’(x0)
收敛条件:
|x0/x1|<=1e-5
5:
分子a,分母b,下一项分子c,某项t=a/b,和s。
第一项:
a=2,b=1,c=a,t=a/b,s=t
第i项:
c=a+b,b=a,a=c,t=a/b,s=s+t
1-26:
6
78:
第二章:
C程序的基本结构
一、单项选择题
1.B2.D3.C4.B5.A6.A7.B8.C
二、填空题
1.主函数
2.编译系统
3.函数函数
4.输入输出
5.头文件
6..obj
7.库函数
8.文本
三、应用题
5.标识符:
au_to,_auto,file,m_i_n,hello,ABC,SIN90,x1234,until,
cos2x,s_3
关键字:
sizeof
非关键字,非标识符:
3id,-min,call..menu,n*m,x.y,1234,1234hello,s+3
第三章习题参考答案
一、单项选择题
1.D2.B3.A4.C5.C
6.D7.B8.D9.B10.C
11.A12.D13.C14.C15.C
16.B17.B18.C19.C20.D
21.A22.D23.D24.D,A25.C
26.A
二、填空题
1.补码
2.±(10-308~10308)15~16位
3.实型
4.单目从右向左
5.函数调用
6.65,89
三、应用题
1.109
2.11
0
0
12
1
3.区别是:
求负:
单目,右结合
减法:
双目,左结合
取址:
单目,右结合
按位与:
双目,左结合
第四章习题参考答案
一、单项选择题
1.D2.C3.D4.A5.D
6.B7.A8.C9.B10.B
二、 填空题
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.三种可能的输入是:
(1)
(1) 100<回车>25.81<回车>1.89234<回车>
(2)
(2) 100<空格>25.81<空格>1.89234<回车>
(3)(3) 10025.811.89234<回车>
6.0,0,3
7.3
8.输入语句的格式是:
scanf("%lf%lf%lf",&a,&b,&c);
9.1313.00000013.000000
10.两种方法:
(1)增加一个临时变量t。
t=a;a=c;c=t;
(2)a=a+c;c=a-c;a=a-c;
三、编程题
1
main()
{printf("***************************\n");
printf("verygood!
\n");
printf("***************************\n");
}
2
main()
{inthour,min;
scanf("%d,%d",&hour,&min);
min=60*hour+min;
printf("%d\n",min);
}
3
main()
{floatc,f;
scanf("%f",&c);
f=32+9.0*c/5;
printf("%f\n",f);
}
按题目要求分别输入-10,0,15和34计算相应的华氏温度。
4
main()
{floatr,l,s;
scanf("%f",&r);
l=2*3.141592*r;
s=3.14159*r*r;
printf("r=%f,l=%f,s=%f\n",r,l,s);
}
5
#include
main()
{floata,b,c,s,area;
scanf("%f,%f,%f",&a,&b,&c);
if((a+b>c)||(a+c>b)||(b+c>a))/*判断两边之和大于第三边*/
{s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));/*调用开方函数,计算面积*/
printf("area=%f\n",area);
}
}
6
main()
{inta=3,b=4,c=5;
floatd=1.2,e=2.23,f=-43.56;
printf("a=%3d,b=%-4d,c=**%d\n",a,b,c);
printf("d=%3.1f\ne=%6.2f\nf=%-10.4f**",d,e,f);
}
7
main()
{inta,b,c,t;
scanf("%d,%d,%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
t=a;
a=b;
b=c;
c=t;
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
8
main()
{floata,b,c,aver;
printf(“Pleaseinputthreenumbers:
\n”);
scanf("%f,%f,%f",&a,&b,&c);
aver=(a+b+c)/3;
printf("averageof%5.2f,%5.2fand%5.2fis%5.2f",a,b,c,aver);
}
9
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=%d\n",a,b,c);
printf("x=%d,y=%d\n",x,y);
}
第五章参考答案
一、单项选择题
1.B2.D3.C4.B5.B6.D7.A8.B9.D
二、填空题
1.非00
2.k==0
3.if(x>4||x<-4)printf("%d",x);elseprintf("error!
");
或:
(x>4||x<-4)?
printf("%d",x):
printf("error!
");
4.if((x%2!
=0)&&((x>=1&&x<=10)||(x>=200&&x<=210))):
printf("d%",x);
5.1
6.K=1
7.10!
Right!
11
8.$$$a=0
9.2,1
10.a>0&&a
三、编程题
1
main()
{inta,b,c;
scanf("%d,%d,%d",&a,&b,&c);
if((a>b)&&(a>c))
if(belseprintf("min=%d\n",c);
elseif((a
elseprintf("min=%d\n",bb:
c);
}
2:
本程序使用goto语句,仅供参考,请勿模仿。
main()
{longa;
intk;
scanf("%ld",&a);
printf("%ld\n",a);
loop:
if(a!
=0)
{k=a%10;
printf("%d",k);
a=a/10;
gotoloop;
}
}
3
(1)用简单的if结构
main()
{intx,y;
scanf("%d",&x);
if(x<0&&x>-5)y=x;
if(x<5&&x=0)y=x-1;
if(x>=5&&x<10)y=x+1;
printf("%d,%d\n",x,y);
}
(2)用嵌套的if结构
main()
{intx,y;
printf("Pleaseinputx:
-5-----10\n");
scanf("%d",&x);
if(x<5)
if(x<0)
{if(x>-5)y=x;}
elsey=x-1;
else
if(x<10)y=x+1;
printf("%d,%d\n",x,y);
}
(3)用if-else分支结构
main()
{intx,y;
scanf("%d",&x);
if(x<0&&x>-5)y=x;
elseif(x<5&&x>=0)y=x-1;
elseif(x>=5&&x<10)y=x+1;
printf("%d,%d\n",x,y);
}
(4) 用switch()结构
main()
{intx,y,k;
printf("Pleaseinputx:
-5-----10\n");
scanf("%d",&x);
if(x<0)k=-1;
elsek=x/5;
switch(k)
{case1:
y=x+1;break;
case0:
y=x-1;break;
case-1:
y=x;break;
}
printf("%d,%d\n",x,y);
}
4
main()
{inty0,m0,d0,y1,m1,d1,age;
printf("Pleaseinputcurrentday:
\n");
scanf("%d,%d,%d",&y1,&m1,&d1);
printf("Pleaseinputbirthday:
\n");
scanf("%d,%d,%d",&y0,&m0,&d0);
age=y1-y0;
if(m1elseif(m1==m0&&d1printf("age=%d\n",age);
}
5
main()
{inta,b,c;
printf("Pleaseinputa,b,c:
\n");
scanf("%d,%d,%d",&a,&b,&c);/*输入三角形的三条边*/
if(a+b>c&&a+c>b&&b+c>a)/*判断两边之和大于第三边*/
if(a==b&&b==c)/*判断等边三角形*/
printf("等边三角形\n");
elseif(a==b||a==c||b==c)/*判断等腰三角形*/
printf("等腰三角形\n");
elseif(a*a+b*b=c*c||a*a+c*c=b*b||b*b+c*c=a*a)/*判断直角三角形*/
printf(“直角三角形\n”);
elseprintf("一般三角形\n");
elseprintf("不能组成三角形\n");
}
6
main()
{intx,y,k;
scanf("%d",&x);
k=x/10;
switch(k)
{case1:
y=1;break;
case2:
y=2;break;
case3:
y=3;break;
case4:
y=4;break;
case5:
y=5;break;
default:
y=6;break;
}
printf("x=%d,y=%d\n",x,y);
}
7
main()
{intm,k;
floatn;
printf("Pleaseinput购买金额m:
\n");
scanf("%d",&m);
k=m/100;
switch(k)
{case0:
n=0;break;
case1:
n=0.015;break;
case2:
n=0.025;break;
case3:
n=0.035;break;
case4:
n=0.045;break;
case5:
n=0.055;break;
default:
n=0.06;break;
}
printf("%5d,%7.2f,%7.2f",m,m-n*m,m*n);
/*输出购买金额、实际支付金额和返还金额*/
}
8:
本程序使用goto语句实现,仅供参考,请勿模仿。
main()
{intyear=1995,month,days=0;
loop:
if(year<=2000)
{
days=days+7*31+4*30+28;/*每年增加365天*/
if(year%4==0&&year%100!
=0||year%400==0)/*判断闰年*/
days++;
year++;
gotoloop;
}
days=days-21;/*仅计算到2000年12月10日*/
printf("Thetotaldaysis:
%d\n",days);
}
9:
本程序使用goto语句实现,仅供参考,请勿模仿。
main()
{longa;
intb,k=0,m;
printf("Pleaseinputa<99999:
\n");
scanf("%ld",&a);
b=a%10;
if(a/10==0)
{k=1;
printf("%ld\n",a);
}
else
{printf("%d\n",b);
m=a;
loop:
if(m!
=0)
{k++;
m=m/10;
gotoloop;
}
}
printf("%ld,%d\n",a,k);
}
10:
本程序使用goto语句实现,仅供参考,请勿模仿。
#include
main()
{longa,m,n=0;
inti=0,k;
scanf("%ld",&a);
m=a;
loop:
if(m!
=0)
{k=m%10;
k=k+2;
if(k>=9)
k=k%10;
m=m/10;
n=k*pow(10,i)+n;
i++;
gotoloop;
}
printf("%ld,%ld\n",a,n);
}
第六章习题参考答案
一、单选题
1.B2.C3.C4.B5.C6.B7.C8.A
二、填空题
1.无穷
2.8
3.20
4.11
5.2.400000
6.*#*#*#$
7.852
8.①floatd=1.0②k++③k<=n
9.①x>=0②x三、编程题
1.
main()
{inti,k,s=0;
for(i=1,k=1;i<=101;i+=2,k*=-1)
s=s+i*k;
printf("%d\n",s);
}
2.
main()
{inti,k,p=0,n=0,s=0;
for(i=1;i<=10;i++)
{printf("i=%d:
",i);
scanf("%d",&k);
s+=k;
if(k>0)p+=k;
if(k<0)n+=k;
}
printf("s=%d,p=%d,n=%d\n",s,p,n);
}
3.
main()
{inti;
printf("PleaseEnterNumber:
");
scanf("%d",&i);
while(i>0)
{printf("%d,",i%10);
i/=10;
}
}
4.
(1)注释:
此题的关键是要保证乘积不超过int型允许的最大数。
由于仅要求结果的最后三位,被乘数的后三位参加运算;则将乘数后三位的每一位分别和被乘数相乘,然后部分积再相加。
main()
{inti,a,b,c1,c2,c3,y,y1,y2,y3;
printf("PleaseEntera,b:
");
scanf("%d,%d",&a,&b);
y=a;
c1=a%10;/*c1保存乘数个位上的数*/
c2=a/10%10;/*c2保存乘数十位上的数*/
c3=a/100%10;/*c3保存乘数百位上的数*/
for(i=1;i
{y%=1000;/*被乘数保留三位*/
y1=y*c1;/*被乘数和乘数个位相乘*/
y2=y*c2%100;/*被乘数和乘数十位相乘,结果保留两位*/
y3=y*c3%10;/*被乘数和乘数百位相乘,结果保留一位*/
y=y1+y2*10+y3*100;/*部分积相加*/
}
printf("%d\n",y%1000);
}
(2)解法2。
main()
{inta,b,k;
longlast;
scanf("%d%d",&a,&b);
for(last=k=1;k<=b;k++)
last=last*(a%1000)%1000;
printf("last=%ld\n",last);
}
5.
略
6.
(1)注释:
变量t储存阶乘,60!
已经超出单精度实型数的范围,所以t被说明为double型。
main()
{inti=1;
doublet=1;
floate=0;
do
{t=t*i++;
e=e+1./t;
}while(i<=60);
printf("%f\n",e);
}
(2)
main()
{inti=1;
doublet=1;
floate=0;
do
{e=e+1./t;
t=t*++i;
}while(1/t>=1.0e-4);
printf("%f\n",e);
}
7.
main()
{intn,x1,x2,x3,xn,i;
printf("Entern:
");
scanf("%d",&n);
if(n<=3)
xn=n;
else
{x1=1;x2=2;x3=3;
for(i=4;i<=n;i++)
{xn=x1+x2+x3;
x1=x2;
x2=x3;
x3=xn;
}
}
printf("Xn=%d\n",xn);
}
8.
main()
{inti,j,k,l;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
{if(j==i)continue;
for(k=1;k<=9;k++)
{if(k==i||k==j)continue;
for(l=0;l<=9;l+=2)
{if(l==i||l==j||l==k)continue;
printf("%d\n",i*1000+j*100+k*10+l);
}
}
}
}
9.
注释:
题中水果的价格以元计价,为了避免计算中出现实数,则改为以角为计价单位。
main()
{inti,j,k;
for(i=0;i<=100;i++)
for(j=0;j<=100-i;j++)
if(i*4+j*40+(100-i-j)*2==400)
printf("apple=%dwatermelon=%dpear=%d\n",i,j,100-i-j);
}
10.
main()
{inti,j,n;
printf(”\nPleaseEntern:
”);
scanf(”%d”,&n);
for(i=1;i<=n;i++)
{for(j=1;j<=n+i-1;j++)
if(j>n-i)printf(”*”);
elseprintf(””);
printf(”\n”);
}
for(i=1;i{for(j=1;j<=2*n-i-1;j++)
if(j>i)printf(”*”);
elseprintf(””);
printf(”\n”);
}
}
第七章习题参考答案
一、单选题
1.B2.B3.C4.C5.A6.A7.B8.A
二、填空题
1.
1
2
4
8
16
32
64
128