大学C语言程序设计第2版电子工业出版社17章参考答案Word下载.docx
- 文档编号:22940746
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:31
- 大小:46KB
大学C语言程序设计第2版电子工业出版社17章参考答案Word下载.docx
《大学C语言程序设计第2版电子工业出版社17章参考答案Word下载.docx》由会员分享,可在线阅读,更多相关《大学C语言程序设计第2版电子工业出版社17章参考答案Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
16
17
18
19
20
D?
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
B?
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
二、填空题
1.
255
2.
a/(b*c)
3.
4.
1.0
5.
x==0
6.
x<
-5||x>
7.
97或字符‘a’
8.
9.
2.5
10.
3.5
11.
MATLAB
12.
9,11,9,10
13.
a+=a;
24,a-=2;
10,a*=2+3;
60,a%=(n%=2);
0,a/=a+a;
0,a+=a-=a*=a;
0
14.
15.
习题3(参考答案)
1.编程实现:
用字符输入/输出函数输入3个字符,将它们反向输出。
参考代码(尽量运用本章所学知识)
#include<
stdio.h>
main(
)
{charc1,c2,c3;
c1=getchar();
c2=getchar();
c3=getchar();
putchar(c3);
putchar(c2);
putchar(c1);
}
2.编程实现:
用格式输入/输出函数输入3个字符,将它们反向输出并输出它们的ASCII值。
scanf("
%c%c%c"
&
c1,&
c2,&
c3)
;
printf("
%c%d,%c%d,%c%d"
c3,c3,c2,c2,c1,c1)
3.变量k为float类型,调用函数:
scanf("
%d"
k);
不能使变量k得到正确数值的原因是:
中的格式控制类型与变量k的定义类型不匹配,应将%d改为%f.
4.(略)
习题4答案
一选择题
1-20DBDCACBDDAACABCBCBBC
二、写出下列程序的运行结果
1.z=36
2.200
3.12
4.48,48
5.13
6.02
三编程题(参考答案)
1.输入4个整数a,b,c,d,编写程序,将它们按从大到小顺序输出。
#include<
main()
{inta,b,c,d,t;
%d%d%d%d"
&
a,&
b,&
c,&
d);
if(a<
b){t=a;
a=b;
b=t;
c){t=a;
a=c;
c=t;
d){t=a;
a=d;
d=t;
if(b<
c){t=b;
b=c;
d){t=b;
b=d;
if(c<
d){t=c;
c=d;
printf("
%4d%4d%4d%4d"
a,b,c,d);
2.据所输入的3条边长值,判断它们能否构成三角形,如能构成,再判断是等腰三角形、直角三角形还是一般三角形?
源程序:
#include"
math.h"
{floata,b,c,s,area;
%f%f%f"
c);
if((a+b>
c)&
&
(a+c>
b)&
(b+c>
a)&
(fabs(a-b)<
(fabs(a-c)<
(fabs(b-c)<
a))
{
if(a==b&
b==c)
等边三角形"
);
elseif(a==b||b==c||a==c)
等腰三角形"
elseif((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
直角三角形"
elseprintf("
一般三角形"
}
elseprintf("
不能组成三角形"
3.输入一个整数,如果能被3,4,5同时整除,则输出“YES”,否则输出“NO”。
{intt,flag;
scanf("
%d"
t);
if(t%3==0&
t%4==0&
t%5==0)
YES"
else
NO"
4.输入年号,判断是否为闰年。
判别闰年的条件是:
能被4整除但不能被100整除,或者能被400整除。
{intyear;
inputtheyear:
"
year);
if(year%4==0&
year%100!
=0||year%400==0)
%disleapyear\n"
year);
else
printf("
%dis'
tleapyear\n"
5.编写程序。
根据以下函数关系,对输入的每个x值进行计算,并输出相应的y值。
x
y
x>
3x+10
1<
x≤10
x(x+2)
x≤1
x2-3x+10
{doublex,y;
%lf"
x);
if(x>
10)y=3*x+10;
elseif(x>
1)y=x*x+2*x;
elsey=x*x-3*x+10;
%lf\n"
y);
习题5答案
1-10CDABCDABDC
11-20DDDBDB(AC)CDC17题有2个答案AC
1.6420
2.20
3.5
4.ACEG
5.###
6.2,4,6,8,10
7.46.0
8.852
9.asDhEF
10.12,72
三、编程题(参考答案)
1.利用近似公式
求π的值,直到最后一项的绝对值小于10-6为止。
math.h>
{doublepi=0,i=1,j=1,k;
do
{
k=i/j;
pi=pi+k;
i=-i;
j=j+2;
}while(fabs(k)>
1.0e-6);
piis%lf"
4*pi);
2.输入一行字符,分别统计出其中英文字母、数字、空格的个数。
{chart;
intn1=0,n2=0,n3=0;
do
{scanf("
%c"
if(t=='
\n'
)break;
else
{if((t>
='
A'
t<
Z'
)||(t>
a'
z'
))n1++;
'
)n2++;
if(t>
0'
9'
)n3++;
}
}while
(1);
字符个数为:
%d,空格个数为:
%d,数字个数为:
n1,n2,n3);
3.从3个红球、5个白球、6个黑球中任意取出6个球,且其中必须有白球,编程输出所有可能的组合。
inti,j,k;
\nhongbaihei\n"
for(i=0;
i<
=3;
i++)
for(j=1;
j<
=5;
j++)
{k=6-i-j;
if(k>
=0)printf("
%3d%3d%3d\n"
i,j,k);
4.如果一个数等于其所有真因子(不包括该数本身)之和,则该数为完数。
例如:
6的真因子有1、2、3,且6=1+2+3,故6为完数。
求[2,1000]内的:
(1)最大的完数;
(2)完数数目。
{inta,i,m,number=0,max=0;
for(a=1;
a<
=1000;
a++)
{m=0;
for(i=1;
=a/2;
if(a%i==0)m=m+i;
if(m==a){number++,max=m;
numberis%d,maxis%d\n"
number,max);
习题6答案
1.D2.A3.A4.C5.B6.B7.C
8.B9.B10.C11.B12.B13.A14.B
15.C16.C17.C18.D19.A20.B21.C
22.B23.C24.B25.C26.D27.C28.D
1.72.t=75313.1364.8,175.56
6.8,87.369128.109.39,18
10.645411.-2012.1513.214.y=923
三、编程题(以下各题均用函数实现)
1.超级素数:
一个素数依次从低位去掉一位、两位……若所得的数依然是素数,如239就是超级素数。
试求100~9999之内:
(1)超级素数的个数;
(2)所有超级素数之和;
(3)最大的超级素数。
解:
(1)spn=30
(2)sps=75548(3)spm=7393
{inti,s=0,k=0,m,max=100;
for(i=9999;
i>
=100;
i--)
{m=i;
while(m>
1)
if(fun(m))m=m/10;
elsebreak;
if(m<
=0)
if(max<
i)max=i;
k++;
s=s+i;
超级素数的个数为:
%5d,所有超级素数之和为:
%5d,最大的超级素数为%5d\n"
k,s,max);
intfun(intn)
intk,i;
k=sqrt(n);
for(i=2;
=k;
if(n%i==0)break;
if(i>
=k+1)return1;
elsereturn0;
2.其平方等于某两个整数平方和的正整数称为弦数,例如因52=32+42,故5是弦数,求(121,130)这间的弦数个数以及最大和最小的弦数。
n=4max=130min=122
参考程序1(用函数方法实现):
intk,maxnum,minnum;
k=count(121,130);
maxnum=max(121,130);
minnum=min(121,130);
弦数的个数为:
%d,最大的弦数为:
%d,最小的弦数为:
%d\n"
k,maxnum,minnum);
intcount(intm,intn)
{inti,j,k,t=0,flag;
for(i=m;
=n;
{flag=0;
for(j=1;
i;
for(k=j;
k<
k++)
if(i*i==j*j+k*k)
{
flag=1;
printf("
%4d,%4d,%4d\n"
j,k,i);
//显示出不重复的弦数的组合情况
if(flag==1)t++;
returnt;
intmin(intm,intn)
{inti,j,k,t=0;
最小的弦数为:
%4d\n"
i);
returni;
intmax(intm,intn)
for(i=n;
=m;
最大的弦数为:
3.有一个8层灯塔,每层所点灯数都等于该层上一层的两倍,一共有765盏灯,求塔底的灯数。
384
main()
inti,t;
t=fun(8);
8;
t=t*2;
t=%d\n"
t);
intfun(intm)
inti,j,n=1,sum;
=765;
{sum=i;
n=i;
m;
{n=n*2;
sum=sum+n;
if(sum==765)break;
4.编写程序,求
的结果。
4037913
参考程序1:
inti;
longs=0;
=10;
s=s+fun(i);
s=%ld\n"
s);
longfun(intn)
intj;
longt=1;
t=t*j;
参考程序2(递归算法):
longt;
if(n==1)t=1;
elset=n*fun(n-1);
5.已知y=
,其中,f(x,n)=1-x2/2!
+x4/4!
-…(-1)nx2n/(2n)!
(n≥0),当x=5.6,n=7时,求y的值。
0.007802
doublefun(doublex,intn)
{
inti,t=1,m=1;
doubles=1.0,w=1.0;
=2*n;
{
w=w*x;
t=t*i;
if(i%2==0)
{m=-m;
s=s+m*w/t;
returns;
doublex=5.6;
intn=7;
doublep,q,t,s;
p=fun(x,n);
q=fun(x+2.3,n);
t=fun(x-3.2,n+3);
s=p/(q+t);
%lf\n"
6.编写程序,求三个数的最小公倍数。
intfun(intx,inty,intz)
{intj,t,m,n;
j=1;
t=j%x;
m=j%y;
n=j%z;
while(t!
=0||m!
=0||n!
{j=j+1;
m=j%y;
n=j%z;
returnj;
intx1,x2,x3,j;
Inputx1x2x3:
"
%d%d%d"
x1,&
x2,&
x3);
x1=%d,x2=%d,x3=%d\n"
x1,x2,x3);
j=fun(x1,x2,x3);
Theminimalcommonmultipleis:
%d\n"
j);
7.已知:
,编写程序,求S的值。
例如,当k为10时,S的值应为:
1.533852。
doublefun(intk)
intn;
doubles,w,p,q;
n=1;
s=1.0;
while(n<
=k)
{w=2.0*n;
p=w-1.0;
q=w+1.0;
s=s*w*w/p/q;
n++;
%f\n"
fun(10));
习题7答案
1.C2.A3.C4.B5.D6.C7.D
8.C9.A10.B11.C12.D13.D14.C
15.C16.D17.D18.D19.B20.B21.B
22.C23.A24.A25.A26.D27.D28.D29.C
1.3692.4
3.1,2,3,8,7,6,5,4,9,10,4.70
5.572
三、程序填空
1.
(1)k
(2)-1
2.
(1)i-1
3.
(1)x[i++]或y[i++]
(2)i++
4.
(1)‘a’+h-10
(2)s[i]=’\0’
5.
(1)s[i]!
=’\0’
(2)s[j++]=s[i]
6.
(1)s[j]!
=’\0’&
t[k]!
=’\0’
(2)t[k]==’\0’
四、编程题(每个程序的数据结构均用数组)
1.编写程序:
从键盘上输入一个字符,用折半查找法找出该字符在已排序的字符串a中的位置。
若该字符不在a中则输出**。
charc,a[10]="
abcdefghi"
inttop,bot,mid;
inputc:
\n"
c=\'
%c\'
c);
for(top=0,bot=10;
top<
=bot;
mid=(top+bot)/2;
if(c==a[mid])
Thepositionis%d\n"
mid+1);
break;
elseif(c>
a[mid])top=mid+1;
elsebot=mid-1;
if(top>
bot)printf("
**\n"
2.编写程序:
输出某数列的前20项,该数列第1、2项分别为0和1,以后每个奇数编号的项是前两项之和,每个偶数编号的项是前两项之差的绝对值。
生成的20个数存在一维数组x中,并按每行4项的形式输出。
intx[21],i;
x[1]=0,x[2]=1;
i=3;
x[i]=x[i-2]+x[i-1];
x[i+1]=fabs((double)(x[i-1]-x[i]));
i=i+2;
}while(i<
=20);
=20;
%6d"
x[i]);
if(i%4==0)printf("
3.编写程序:
将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。
若s所指字符串中的内容为:
“ABCDEFG12345”,则最后t所指的数组中的内容应是:
“135”。
string.h>
voidfun(char
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 语言程序设计 电子 工业出版社 17 参考答案