程序设计基础基于C语言第2版课后习题参考答案.docx

上传人:b****5 文档编号:6431452 上传时间:2023-01-06 格式:DOCX 页数:67 大小:205.70KB
下载 相关 举报
程序设计基础基于C语言第2版课后习题参考答案.docx_第1页
第1页 / 共67页
程序设计基础基于C语言第2版课后习题参考答案.docx_第2页
第2页 / 共67页
程序设计基础基于C语言第2版课后习题参考答案.docx_第3页
第3页 / 共67页
程序设计基础基于C语言第2版课后习题参考答案.docx_第4页
第4页 / 共67页
程序设计基础基于C语言第2版课后习题参考答案.docx_第5页
第5页 / 共67页
点击查看更多>>
下载资源
资源描述

程序设计基础基于C语言第2版课后习题参考答案.docx

《程序设计基础基于C语言第2版课后习题参考答案.docx》由会员分享,可在线阅读,更多相关《程序设计基础基于C语言第2版课后习题参考答案.docx(67页珍藏版)》请在冰豆网上搜索。

程序设计基础基于C语言第2版课后习题参考答案.docx

程序设计基础基于C语言第2版课后习题参考答案

习题1参考答案

1.1解释以下术语

(1)计算机软件:

计算机软件是一系列按照特定结构组织的程序、数据(Data)和文档(Document)的集合。

(2)计算机程序:

用计算机语言所编写的一系列指令的集合。

(3)数据:

数据是程序加工和处理的对象。

(4)算法:

算法是一组有穷的规则,它们规定了为解决某一特定问题而采取的一系列运算步骤。

(5)数据结构:

数据结构是存在一种或多种特定关系的数据元素的集合,其外在表现为数据的组织形式。

(6)数据类型:

数据类型是一个值的集合和定义在这个值集上的操作的总称。

(7)程序设计:

程序设计是给出解决特定问题程序的方法和过程,是软件构造活动中的重要组成部分。

1.2简答题

(1)简述内存的组织结构形式?

计算机系统把内存看作是由若干个连续的存储单元(StorageLocation)组成的,每个存储单元的大小为一个字节(Byte)。

为了能唯一标志每个存储单元,在计算机系统中给每个存储单元指定一个唯一的编号,该编号被称为存储单元的地址(Address),计算机在读写内存时就是按照存储单元的地址进行的。

(2)为什么计算机系统是一个通用的计算系统?

在计算机硬件相对固定不变的前提下,计算机的通用性主要表现在通过运行不同的程序来完成不同的计算任务。

(3)简述结构化程序设计的基本思想?

在程序设计过程中,如果仅仅使用顺序、选择和循环这三种基本控制结构,并且使每个代码块只有一个入口和一个出口,则这样的程序设计方法被称为结构化程序设计(StructuredProgramming)。

(4)简述计算机语言的发展史?

程序设计语言经历了从机器语言、汇编语言、高级语言到超高级语言的发展历程。

(5)简述利用计算机进行问题求解的过程?

1、理解问题特征

2、设想解决方案

3、优化解决方案

4、描述解决方案

5、执行并分析解决方案

(6)简述各个程序质量要素的含义?

1、正确性(Correctness):

正确性是指一个计算机程序的正确程度,即程序在预定的运行环境下能正确完成预期功能的程度。

2、鲁棒性(Robustness):

鲁棒性也称为健壮性,是指在硬件发生故障、输入数据无效或操作错误等意外情况下,程序能做出响应的程度。

3、效率(Efficiency):

效率是指为了完成预定的功能,系统需要的计算资源(主要包括计算时间和存储空间)的多少。

4、易用性(Usability):

易用性又称为可用性,是指在完成预定功能时人机交互的难易程度。

易用性高的程序容易被程序用户理解和掌握,使用户操作简单方便。

5、可理解性(Understandability):

可理解性是指理解程序的难易程度。

可理解性高的程序才容易测试和维护。

如果程序难以读懂,就会给测试和维护带来巨大的困难。

6、可测试性(Testability):

可测试性是一个计算机程序能够被测试的容易程度。

为了提高程序的可靠性,必须通过测试尽可能多得发现并改正程序中的错误。

程序的可测试性直接影响测试的质量和效率。

7、可维护性(Maintainability):

诊断和改正程序错误以及功能扩充和性能提高的容易程度。

程序设计是一个迭代过程,要开发出高质量的程序需要对程序进行多次修改和完善。

程序的可维护性决定了上述工作的质量和效率。

8、可重用性(Reusability):

可重用性是指在其它应用中该程序可以被再次使用的容易程度。

如果我们在开发新程序时,能够直接或稍加修改就能利用原有的程序,则会大大提高新程序开发的质量和效率。

因此,提高程序的可重用性是提高程序设计质量和效率的根本途径。

1.3计算题

(1)计算-1的8位原码、反码、补码和Excess_127码。

分别为:

10000001B、11111110B、11111111B、01111110B

(2)计算机内存中相邻四个字节的值为10111110000000000000000000000000,试问该值表示的实数、有符号数和无符号数各为多少?

分别是:

实数0.125、有符号数-1107296256(负数在计算机中用补码表示)无符号数3187671040

(3)字符‘A'、‘a'、‘1'的ASCII值是多少,给出将大写字母的ASCII转换成对应小写字母ASCII值得计算公式。

‘A’:

41H‘a’:

61H‘1’:

31H

大写转化为小写:

大写字母的ASCII值+20H=小写字母的ASCII值

1.4为下列问题求解设计算法,并分别用程序流程图、N—S盒图和PAD图加以描述。

(1)有两个调料盒S1和S2,分别盛有糖和盐,要求将它们互换(即S1盒原来盛糖,现在改盛盐;S2同理)。

算法思想:

这是一个两个变量交换值的问题,可以设置一个临时变量,首先把S1的值放入临时变量中,然后将S2的值放入S1中,最后将临时变量的值放入S1中即可。

程序流程图:

N-S盒图:

PAD图:

(2)依次输入6个整数,要求输出其中最小的数。

算法思想:

定义一个临时变量用来存放最小的数,首先输入第一个数赋值于临时变量,然后循环输入其余的整数,比较输入的整数和临时变量的大小,如果大于临时变量则继续输入,反之,则给临时变量赋值为次此数。

最后临时变量中存放的数输入的数中的最小数,输入临时变量即可。

程序流程图:

N-S盒图:

PAD图:

(3)输入3个整数,按从大到小的顺序输出。

算法思想:

输入三个数a、b、c,首先比较a和b,如果a>b,则比较c和a,如果c>a则输出c、a、b;如果cb,输出a、c、b,否则输出a、b、c;对于a

程序流程图:

N-S盒图:

PAD图:

(4)求1*2*3*……*10。

算法思想:

定义一个变量用来存放最后的值,赋初值为1,做十次循环,每次循环在原来变量的基础上乘循环变量值(即1-10),最后输出这个变量即可。

程序流程图:

N-S盒图:

PAD图:

(5)输入两个整数,求其最大公约数。

算法思想:

选取两个数中较小的数作为起始值,让这两个数分别除以这个值,如果可以整除,则这个数就是最后结果,如果不能整除则将起始值减一之后再用原来的两个数对其做除法运算,知道整除为止,得到的起始值的最后值就是结果。

程序流程图:

N-S盒图:

PAD图:

1.5算法思考题

(1)钞票换硬币:

把一元钞票换成一分、二分、五分硬币(每种至少一枚),有哪些种换法?

分析:

1元相当于100分,设5分、2分、1分的硬币数分别为X、Y、Z,求换法就是在寻找这样一种组合,使得5*X+2*Y+Z=100,所以每当找到1种组合时,将个数记录下来,就可知换法有多少种,算法描述如下:

Count=0;//用于记录个数,初始为0

for(X=1;X<=20;X++)

for(Y=1;Y<=50;Y++)

for(Z=1;Z<=100;Z++)

{

if(5*X+2*Y+Z==100)//可实现交换

Count++;

}

输出Count

(2)百钱买百鸡:

一只公鸡值5元,一只母鸡值3元,3只小鸡值1元,现用一百元要买一百只鸡,问有什么方案?

分析:

由题意可知,假设公鸡、母鸡、小鸡分别有X、Y、Z只,那么X、Y、Z满足:

X+Y+Z=100,而且要满足钱数限定:

5*X+3*Y+1/3*Z=100,由于3只小鸡1元钱,所以小鸡的个数必须是3的整数倍,即:

Z是3的整数倍。

可通过限制条件,筛选出满足条件的X,Y,Z。

当然X、Y、Z还满足以下条件:

5*X<=100;3*Y<=100;Z<=100。

以下是算法描述:

for(X=0;X<=100;X++)

for(Y=0;Y<=100;Y++)

for(Z=0;Z<=100;Z++)

{

if(5*X<=100and3*Y<=100andz%3==0)

{

if(X+Y+Z==100and5*X+3*Y+Z/3==100)

{

输出X、Y、Z;

}

}

}

(3)斐波那契兔子的问题:

某人有一对兔子饲养在围墙中,如果它们每个月生一对兔子,且新生的兔子在第二个月后也是每个月生一对兔子,问一年后围墙中共有多少对兔子。

分析:

第一个月是最初的一对兔子生下一对兔子,围墙内共有两对兔子。

第二个月仍是最初的一对兔子生下一对兔子,共有3对兔子。

到第三个月除最初的兔子新生一对兔子外,第一个月生的兔子也开始生兔子,因此共有5对兔子。

继续推下去,第12个月时最终共有对377对兔子。

由分析知,每个月的兔子都是上个月的兔子与新增兔子之和,而上个月新生的兔子到下个月才会生兔子,所以新增的兔子都是上两月的兔子生的。

设每个月的兔子数为F(n),则可列出下列式子:

F(0)=F

(1)=1

F(n)=F(n-1)+F(n-2)

显然可用递归的方法解出此题,算法流程图如下:

 

习题2参考答案

(1)请简要描述C语言的发展历史。

答:

C语言是一种目前世界上普遍流行、使用广泛的高级程序设计语言,它是在B语言的基础上发展起来的,1972—1973年间,贝尔实验室设计出了C语言。

1983年,美国国家标准化协会制定了C语言的标准,称为ANSIC。

(2)略。

(3)C语言的主要特点是什么?

答:

C语言的主要特点如下。

①C程序是由函数组成的。

②函数由函数头和函数体组成。

③C程序总是从main函数开始执行。

④每个语句和数据声明的最后必须有一个“;”。

⑤C语言没有自己的输入/输出语句,它的输入/输出由库函数printf和scanf完成。

⑥可以添加注释。

⑦C语言程序中的变量必须先声明后使用。

(4)如何使用VisualC++6.0开发控制台程序?

使用VC6开发控制台程序的方法如下:

答:

①在MiscrosoftVisualC++6.0环境下,首先建立一个空的工程。

②而后建立一个C源程序文件,并在该文件中输入源代码。

③使用Bulid命令或者快捷键F7,进行编译连接。

④如果没有错误,选择Execute命令或者快捷键Ctrl+F5,进行执行。

习题3参考答案:

3.1选择题

1.B2.D3.D4.A5.A6.A7.C8.C9.C10.B

3.2写出下列程序的输出结果

1.200310c8

2.a=100,b=200

3.97,141,61,a

4.

5.aabbcabc

4,3

6.6,6,6,7

3.3编程题

1.

#include

voidmain()

{

inta=500;

printf("%d,%o,%x\n",a,a,a);

}

输出结果:

500,764,1f4

2.

#include

voidmain()

{

floatx;

scanf("%f",&x);

printf("a=%.3f,a=%.3e\n",x,x);

}

输入:

66

输出结果:

a=66.000,a=6.60000e+001

3.

#include

voidmain()

{

charch1='a',ch2=ch1;

printf("%c,%d,%o,%x\n",ch1,ch1,ch1,ch1);

printf("%c,%d,%o,%x\n",ch2,ch2,ch2,ch2);

}

输出结果:

A,65,101,41

a,97,141,61

4.

#include

voidmain()

{

floatx,y,z,s,v;

scanf("%f%f%f",&x,&y,&z);

s=2*(x*y+x*z+y*z);

v=x*y*z;

printf("Area=%.lf,Volume=%.lf\n",s,v);

}

输入:

345

输出结果:

Area=94,Volume=60

5.

#definePI3.14

#include

#include

voidmain()

{

floatr,s,l;

scanf("%f",&r);

s=(float)PI*r*r;

l=2*(float)PI*r;

printf("r=%4.1f,s=%4.1f,l=%4.1f\n",r,s,l);

}

输入:

3

输出结果:

r=3.0,s=28.3,l=18.8

6.

#include

#include

voidmain()

{

floatx1,y1,x2,y2,x3,y3,a,b,c,p,s;

scanf("%f%f%f%f%f%f",&x1,&y1,&x2,&y2,&x3,&y3);

a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));

c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));

p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c));

printf("Area=%f\n",s);

}

输入:

5638023

输出结果:

Area=12.000013

习题4参考答案

4.1选择题。

(1)D

(2)A(3)A(4)C(5)C(6)B(7)B(8)B(9)C(10)A

4.2填空题。

(1)261

(2)16(3)0(4)2,1

4.3编程题。

(1)

#include

voidmain()

{

floatc,f;

printf("输入华氏温度:

\n");

scanf("%f",&f);

c=(f-32)*5/9;

printf("摄氏温度为:

%5.2f\n",c);

}

(2)

#include

#include

voidmain()

{

chars1[10],s2[10],s[20];

printf("pleaseentertwostring\n");

gets(s1);

gets(s2);

strcat(s1,s2);

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

printf("%d\n",strlen(s1));

}

(3)

#include

#include

voidmain()

{

doublex,y;

printf("pleaseentertwodata:

\n");

scanf("%lf%lf",&x,&y);

printf("%lfraisedto%lfis%lf\n",x,y,pow(x,y));

}

习题5参考答案

1.填空题

(1)n=4

(2)2*i-1(3)7(4)######

2.#include

voidmain()

{

longm,n,a,b,s;

printf("\nPleaseinputvalueofM:

");

scanf("%ld",&m);

printf("\nPleaseinputvalueofN:

");

scanf("%ld",&n);

a=(m>n)?

m:

n;

b=(m>n)?

n:

m;

while(a%b!

=0)

{

s=a%b;

a=b;

b=s;

}

printf("\nGongyueshu:

%ld\n",s);

printf("\nGongBeishu:

%ld\n",(m*n)/s);

}

3.#include

voidmain()

{

inta,b,c,d,e;

printf("Pleaseinputaninteger:

\n");

scanf("%d",&a);

if(a/1000==0)

{

printf("inputerror!

\n");

return;

}

b=a/1000;

e=a%10;

c=a%1000/100;

d=a%100/10;

if(b==e&&c==d)

printf("YES.\n");

else

printf("NO.\n");

}

4.#include

voidmain()

{

intc;

intNum1,Num2,Num3,Num4;

Num1=Num2=Num3=Num4=0;

do

{

c=getchar();

if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

Num1++;

elseif(c>='0'&&c<='9')

Num2++;

elseif(c=='')

Num3++;

else

Num4++;

}while(c!

='\n');

printf("英文字母有%d个,数字有%d个,空格有%d个,其它字符有%d个。

\n",Num1,Num2,Num3,Num4);

}

5.#include

#include

voidmain()

{

floata,b,c,disc,x1,x2,realpart,imagepart;

printf("Inputa,bandc:

");

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

printf("Theequation");

disc=b*b-4*a*c;

if(fabs(disc)<=1e-7)

printf("hastwoequalroots:

%4.2f.\n",-b/(2*a));

else

if(disc>1e-7)

{

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf("hasdistincerealroots:

%4.2fand%4.2f.\n",x1,x2);

}

else

{

realpart=-b/(2*a);

imagepart=sqrt(-disc)/(2*a);

printf("hascomplextroots:

");

printf("%4.2f+%4.2fi",realpart,imagepart);

printf("and%4.2f-%4.2fi\n",realpart,imagepart);

}

}

6.#include

voidmain()

{

inti,j;

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

{

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

printf("*");

printf("\n");

}

for(i=5;i>=1;i--)

{

for(j=i;j>=1;j--)

printf("*");

printf("\n");

}

}

7.#include

#defineEPS1e-7

voidmain()

{

intn;

doublex,an,sum;

printf("inputx:

");

scanf("%lf",&x);

x=x*3.1415926/180;

sum=0;

an=x;

n=1;

do

{

sum+=an;

n=n*(n+1)*(n+2);

an*=(-x*x)/n;

printf("an=%f\n",an);

}while(fabs(an)>=EPS);

printf("sin(%.4lf)=%.4lf\n",x,sum);

}

8.#include

voidmain()

{

unsignedintn;

charc;

n=0;

printf("inputabinaryinteger:

");

while((c=getchar())!

='\n')

{

switch(c)

{

case'0':

n=n*2+0;

break;

case'1':

n=n*2+1;

break;

}

}

printf("thedecimalis%d.\n",n);

}

9.#include

voidmain()

{

inti,j;

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

printf("\t%d",i);

printf("\n");

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

{

printf("%d",i);

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

printf("\t%d",i*j);

printf("\n");

}

}

10.#include

voidmain()

{

intn,m,z,x,y;

printf("inputn:

");

scanf("%d",&n);

m=n;

z=x=y=1;

while(n>1)

{

z=x+y;

x=y;

y=z;

n--;

}

printf("Fibonacci(%d)=%d.\n",m,z);

}

11.#include

#include

voidmain()

{

inti,j;

intflag;

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

{

flag=1;

for(j=2;j<=sqrt(i);j++)

if(i%j==0)

{

flag=0;

break;

}

if(flag==1)

printf("%d\t",i);

}

}

12.#include

voidmain()

{

inti,sum;

sum=0;

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

if(i%3==0&&i%5==0&&i%7==0)

sum+=i;

printf("sumis%d.\n",sum);

}

13.#include

voidmain()

{

intx;

longf;

printf("inputx:

");

scanf("%d",&x);

if(x>=1&&x<=3)

f=2*x+3;

elseif(x>=4&&x<=10)

f=3*(x+4);

else

f=x*x+3*x-6;

printf("f(%d)=%d\n"

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

当前位置:首页 > 医药卫生 > 临床医学

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

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