C语言课后习题答案新版完整版.docx

上传人:b****7 文档编号:11209321 上传时间:2023-02-25 格式:DOCX 页数:49 大小:52.10KB
下载 相关 举报
C语言课后习题答案新版完整版.docx_第1页
第1页 / 共49页
C语言课后习题答案新版完整版.docx_第2页
第2页 / 共49页
C语言课后习题答案新版完整版.docx_第3页
第3页 / 共49页
C语言课后习题答案新版完整版.docx_第4页
第4页 / 共49页
C语言课后习题答案新版完整版.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

C语言课后习题答案新版完整版.docx

《C语言课后习题答案新版完整版.docx》由会员分享,可在线阅读,更多相关《C语言课后习题答案新版完整版.docx(49页珍藏版)》请在冰豆网上搜索。

C语言课后习题答案新版完整版.docx

C语言课后习题答案新版完整版

习题答案

习题1(参考答案)

1.程序与算法的概念及二者的区别是什么?

程序:

为了实现特定目标或解决特定问题而用计算机语言偏写的指令序列,它由算法和数据结构组成。

算法:

(Algorithm)是在有限步骤内求解某一问题所使用的一组定义明确的规则。

通俗地讲,就是计算机解题的步骤。

算法与程序的区别:

计算机程序是算法的一个实例,同一个算法可以用不同的计算机语言来表达。

2.简述程序设计语言发展的过程

程序设计语言经过最初的机器代码到今天接近自然语言的表达,经过了四代的演变。

一般认为机器语言是第一代,符号语言即汇编语言为第二代,面向过程的高级语言为第三代,面对象的编程语言为第四代。

3.简述高级程序设计语言中面向过程与面向对象的概念。

“面向过程”是一种以过程为中心的编程思想。

首先分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步地实现,使用的时候依次调用函数即可。

一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。

“面向对象”是一种以事物为中心的编程思想。

面向对象的方法主要是将事物对象化,对象包括属性与行为。

面向过程与面向对象的区别:

在面向过程的程序设计中,程序员把精力放在计算机具体执行操作的过程上,编程关注的是如何使用函数去实现既定的功能;而在面向对象的程序设计中,技术人员将注意力集中在对象上,把对象看做程序运行时的基本成分。

编程关注的是如何把相关的功能(包括函数和数据)有组织地捆绑到一个对象身上。

4.C语言程序的特点是什么?

(1)C语言非常紧凑、简洁,使用方便、灵活,有32个关键字,有9种流程控制语句。

(2)C语言运算符丰富,共有45个标准运算符,具有很强的表达式功能,同一功能表达式往往可以采用多种形式来实现。

(3)数据类型丰富。

C语言的数据类型有整型、实型、字符型、数组类型、结构类型、共用类型和指针类型,而且还可以用它们来组成更复杂的数据结构,加之C语言提供了功能强大的控制结构,因而使用C语言能非常方便地进行结构化和模块化程序设计,适合于大型程序的编写、调试。

(4)用C语言可直接访问物理地址,能进行二进制位运算等操作,即可直接同机器硬件打交道。

它具有“高级语言”和“低级语言”的双重特征,既能用于系统软件程序设计,又能用于通用软件程序设计。

(5)C语言生成的目标代码质量高、程序执行速度快。

一般只比用汇编语言生成的目标代码的效率低20%左右。

(6)可移植性好。

5.源程序执行过程中,有哪些步骤?

C语言源程序的执行要经过:

编辑、编译、链接、运行等步骤。

6.简述MATLAB的主要应用领域有哪些?

MATLAB软件是矩阵实验室(MatrixLaboratory)的简称,是美国MathWorks公司开发的商业数学软件,主要包括MATLAB和Simulink两大部分。

它和Mathematica、Maple并称为三大数学软件。

MATLAB软件可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序,主要应用于工程计算、控制设计、信号处理与通信、图像处理、信号检测、金融建模设计与分析等领域,代表了当今国际科学计算软件的先进水平。

1.计算的本质是什么?

计算的本质就是基于规则的符号串变换。

2.三大科学思维是指什么?

三大科学思维是:

理论思维、实验思维与计算思维

3.什么是计算思维?

计算思维的基本特征有哪些?

计算思维是指运用计算机科学的思想、方法和技术进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。

它属于三大科学思维(理论思维、实验思维与计算思维)之一,不仅仅属于计算机科学家,应当是每个人的基本技能,等同3R(Reading、wRiting、aRithmetic)。

从计算科学的角度来看,计算思维包括6个方面的特征:

抽象性、数字化、构造性、系统化、虚拟化和网络化。

4.什么是算法?

算法的基本特征有哪些?

算法:

(Algorithm)是在有限步骤内求解某一问题所使用的一组定义明确的规则。

通俗地讲,就是计算机解题的步骤。

算法的基本特征有:

有穷性、确定性、可行性、有0个或多个输入、有一个或多个输出。

5.算法的复杂度分为哪两种?

算法的复杂度分为时间复杂度和空间复杂度两种。

6.什么是程序?

程序与算法的区别是什么?

程序:

为了实现特定目标或解决特定问题而用计算机语言偏写的指令序列,它由算法和数据结构组成。

算法:

(Algorithm)是在有限步骤内求解某一问题所使用的一组定义明确的规则。

通俗地讲,就是计算机解题的步骤。

算法与程序的区别:

计算机程序是算法的一个实例,同一个算法可以用不同的计算机语言来表达。

7.简述程序设计语言发展的过程。

程序设计语言经过最初的机器代码到今天接近自然语言的表达,经过了四代的演变。

一般认为机器语言是第一代,符号语言即汇编语言为第二代,面向过程的高级语言为第三代,面对象的编程语言为第四代。

8.程序执行过程中,有哪些基本步骤?

C语言源程序的执行要经过:

编辑、编译、链接、运行等步骤。

习题2(参考答案)

一、选择题

1

2

3

4

5

6

7

8

9

10

C

A

C

C

C

C

C

B

B

D

11

12

13

14

15

16

17

18

19

20

C

C

D

A

B

B

B

A

D

B

21

22

23

24

25

26

27

28

29

30

C

D

A

D

B

C

C

C

A

D

31

32

33

34

35

36

37

38

39

40

C

C

B

C

A

D

B

C

D

A

41

42

43

44

45

46

47

48

49

50

B

D

B

B

A

B

B

A

C

D

51

52

53

54

55

C

A

A

D

B

二、填空题

1.

255

2.

a/(b*c)

3.

20

4.

1.0

5.

x==0

6.

x<-5||x>5

7.

97或字符‘a’

8.

0

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.

8

15.

2

习题3(参考答案)

1.编程实现:

用字符输入/输出函数输入3个字符,将它们反向输出。

参考代码(尽量运用本章所学知识)

#include

main( )

{charc1,c2,c3;

c1=getchar();c2=getchar();c3=getchar();

putchar(c3);putchar(c2);putchar(c1);

}

2.编程实现:

用格式输入/输出函数输入3个字符,将它们反向输出并输出它们的ASCII值。

参考代码(尽量运用本章所学知识)

#include

main( )

{charc1,c2,c3;

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得到正确数值的原因是:

scanf("%d",&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;

scanf("%d%d%d%d",&a,&b,&c,&d);

if(a

if(a

if(a

if(b

if(b

if(c

printf("%4d%4d%4d%4d",a,b,c,d);

}

2.据所输入的3条边长值,判断它们能否构成三角形,如能构成,再判断是等腰三角形、直角三角形还是一般三角形?

源程序:

#include

#include"math.h"

main()

{floata,b,c,s,area;

scanf("%f%f%f",&a,&b,&c);

if((a+b>c)&&(a+c>b)&&(b+c>a)&&(fabs(a-b)

{

if(a==b&&b==c)

printf("等边三角形");

elseif(a==b||b==c||a==c)

printf("等腰三角形");

elseif((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))

printf("直角三角形");

elseprintf("一般三角形");

}

elseprintf("不能组成三角形");

}

3.输入一个整数,如果能被3,4,5同时整除,则输出“YES”,否则输出“NO”。

#include

main()

{intt,flag;

scanf("%d",&t);

if(t%3==0&&t%4==0&&t%5==0)

printf("YES");

else

printf("NO");

}

4.输入年号,判断是否为闰年。

判别闰年的条件是:

能被4整除但不能被100整除,或者能被400整除。

#include

main()

{intyear;

printf("inputtheyear:

");

scanf("%d",&year);

if(year%4==0&&year%100!

=0||year%400==0)

printf("%disleapyear\n",year);

else

printf("%dis'tleapyear\n",year);

}

5.编写程序。

根据以下函数关系,对输入的每个x值进行计算,并输出相应的y值。

x

y

x>10

3x+10

1

x(x+2)

x≤1

x2-3x+10

#include

main()

{doublex,y;

scanf("%lf",&x);

if(x>10)y=3*x+10;

elseif(x>1)y=x*x+2*x;

elsey=x*x-3*x+10;

printf("%lf\n",y);

}

习题5答案

一、选择题

1-10CDABCDABDC

11-20DDDBDB(AC)CDC17题有2个答案AC

二、写出下列程序的运行结果

1.64202.203.54.ACEG

5.###6.2,4,6,8,107.46.0

8.8529.asDhEF10.12,72

三、编程题(参考答案)

1.利用近似公式

求π的值,直到最后一项的绝对值小于10-6为止。

#include

#include

main()

{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);

printf("piis%lf",4*pi);

}

2.输入一行字符,分别统计出其中英文字母、数字、空格的个数。

#include

main()

{chart;

intn1=0,n2=0,n3=0;

do

{scanf("%c",&t);

if(t=='\n')break;

else

{if((t>='A'&&t<='Z')||(t>='a'&&t<='z'))n1++;

if(t=='')n2++;

if(t>='0'&&t<='9')n3++;

}

}while

(1);

printf("字符个数为:

%d,空格个数为:

%d,数字个数为:

%d",n1,n2,n3);

}

3.从3个红球、5个白球、6个黑球中任意取出6个球,且其中必须有白球,编程输出所有可能的组合。

#include

main()

{

inti,j,k;

printf("\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)完数数目。

#include

main()

{inta,i,m,number=0,max=0;

for(a=1;a<=1000;a++)

{m=0;

for(i=1;i<=a/2;i++)

if(a%i==0)m=m+i;

if(m==a){number++,max=m;}

}

printf("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.A25.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

#include

#include

main()

{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

k++;

s=s+i;

}

}

printf("超级素数的个数为:

%5d,所有超级素数之和为:

%5d,最大的超级素数为%5d\n",k,s,max);

}

intfun(intn)

{

intk,i;

k=sqrt(n);

for(i=2;i<=k;i++)

if(n%i==0)break;

if(i>=k+1)return1;

elsereturn0;

}

2.其平方等于某两个整数平方和的正整数称为弦数,例如因52=32+42,故5是弦数,求(121,130)这间的弦数个数以及最大和最小的弦数。

解:

n=4max=130min=122

参考程序1(用函数方法实现):

#include

main()

{

intk,maxnum,minnum;

k=count(121,130);

maxnum=max(121,130);

minnum=min(121,130);

printf("弦数的个数为:

%d,最大的弦数为:

%d,最小的弦数为:

%d\n",k,maxnum,minnum);

}

intcount(intm,intn)

{inti,j,k,t=0,flag;

for(i=m;i<=n;i++)

{flag=0;

for(j=1;j

for(k=j;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;

for(i=m;i<=n;i++)

for(j=1;j

for(k=j;k

if(i*i==j*j+k*k)

{

printf("最小的弦数为:

%4d\n",i);

returni;

}

}

intmax(intm,intn)

{inti,j,k,t=0;

for(i=n;i>=m;i--)

for(j=1;j

for(k=j;k

if(i*i==j*j+k*k)

{

printf("最大的弦数为:

%4d\n",i);

returni;

}

}

3.有一个8层灯塔,每层所点灯数都等于该层上一层的两倍,一共有765盏灯,求塔底的灯数。

解:

384

#include

main()

{

inti,t;

t=fun(8);

for(i=1;i<8;i++)

t=t*2;

printf("t=%d\n",t);

}

intfun(intm)

{

inti,j,n=1,sum;

for(i=1;i<=765;i++)

{sum=i;

n=i;

for(j=1;j

{n=n*2;

sum=sum+n;

}

if(sum==765)break;

}

returni;

}

4.编写程序,求

的结果。

解:

参考程序1:

#include

main()

{

inti;

longs=0;

for(i=1;i<=10;i++)

s=s+fun(i);

printf("s=%ld\n",s);

}

longfun(intn)

{

intj;

longt=1;

for(j=1;j<=n;j++)

t=t*j;

returnt;

}

参考程序2(递归算法):

#include

main()

{

inti;

longs=0;

for(i=1;i<=10;i++)

s=s+fun(i);

printf("s=%ld\n",s);

}

longfun(intn)

{

longt;

if(n==1)t=1;

elset=n*fun(n-1);

returnt;

}

5.已知y=

,其中,f(x,n)=1x2/2!

+x4/4!

(1)nx2n/(2n)!

(n≥0),当x=5.6,n=7时,求y的值。

解:

0.

#include

doublefun(doublex,intn)

{

inti,t=1,m=1;

doubles=1.0,w=1.0;

for(i=1;i<=2*n;i++)

{

w=w*x;

t=t*i;

if(i%2==0)

{m=-m;s=s+m*w/t;}

}

returns;

}

main()

{

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);

printf("%lf\n",s);

}

6.编写程序,求三个数的最小公倍数。

#include

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!

=0)

{j=j+1;

t=j%x;

m=j%y;

n=j%z;

}

returnj;

}

main()

{

intx1,x2,x3,j;

printf("Inputx1x2x3:

");

scanf("%d%d%d",&x1,&x2,&x3);

printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3);

j=fun(x1,x2,x3);

printf("Theminimalcommonmultipleis:

%d\n",j);

}

7.已知:

,编写程序,求S的值。

例如,当k为10时,S的值应为:

1.。

#include

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++;

}

returns;

}

main()

{

printf("%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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1