c++程序设计基础教程课后答案(清华大学出版社郑莉 董渊著)

c++程序设计基础教程课后答案(清华大学出版社郑莉 董渊著),第1张

第 一 章 概述

1-1 简述计算机程序设计语言的发展历程。

解:

迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。

1-2 面向对象的编程语言有哪些特点?

解:

面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。C++语言是目前应用最广的面向对象的编程语言。

1-3 什么是结构化程序设计方法?这种方法有哪些优点和缺点?

解:

结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。

虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。

由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。

1-4 什么是对象?什么是面向对象方法?这种方法有哪些特点?

解:

从一般意义上讲,对象是现实世界中一个实际存在的事物,它可以是有形的,也可以是无形的。对象是构成世界的一个独立单位,它具有自己的静态特征和动态特征。面向对象方法中的对象,是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位,由一组属性和一组行为构成。

面向对象的方法将数据及对数据的 *** 作方法放在一起,作为一个相互依存、不可分离的整体--对象。对同类型对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口,与外界发生关系,对象与对象之间通过消息进行通讯。这样,程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。通过实现继承与多态性,还可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。

面向对象方法所强调的基本原则,就是直接面对客观存在的事物来进行软件开发,将人们在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到客观世界,回到人们通常的思维。

1-5 什么叫做封装?

解:

封装是面向对象方法的一个重要原则,就是把对象的属性和服务结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。

1-6 面向对象的软件工程包括哪些主要内容?

解:

面向对象的软件工程是面向对象方法在软件工程领域的全面应用,它包括面向对象的分析(OOA)、面向对象的设计(OOD)、面向对象的编程(OOP)、面向对象的测试(OOT)和面向对象的软件维护(OOSM)等主要内容。

1-7 简述计算机内部的信息可分为几类?

解:

计算机内部的信息可以分成控制信息和数据信息二大类;控制信息可分为指令和控制字两类;数据信息可分为数值信息和非数值信息两类。

1-8 什么叫二进制?使用二进制有何优点和缺点?

解:

二进制是基数为2,每位的权是以2 为底的幂的进制,遵循逢二进一原则,基本符号为0和1。采用二进制码表示信息,有如下几个优点:1.易于物理实现;2.二进制数运算简单;3.机器可靠性高;4.通用性强。其缺点是它表示数的容量较小,表示同一个数,二进制较其他进制需要更多的位数。

1-9 请将以下十进制数值转换为二进制和十六进制补码:

(1)2 (2)9 (3)93

(4)-32 (5)65535 (6)-1

解:

(1) (2)10 = (10)2 = (2)16

(2) (9)10 = (1001)2 = (9)16

(3) (93)10 = (1011101)2 = (5D)16

(4) (-32)10 = (11100000)2 = (E0)16

(5) (65535)10 = (11111111 11111111)2 = (FFFF)16

(6) (-1)10 = (11111111 11111111)2 = (FFFF)16

1-10 请将以下数值转换为十进制:

(1)(1010)2 (2)(10001111)2 (3)(01011111 11000011)2

(4)(7F)16 (5)(2D3E)16 (6)(F10E)16

解:

(1)(1010)2 = (10)10

(2)(10001111)2 = (143)10

(3)(01011111 11000011)2 = (24515)10

(4)(7F)16 = (127)10

(5)(2D3E)16 = (11582)10

(6)(F10E)16 = (61710)10

1-11 简要比较原码、反码、补码等几种编码方法。

解:

原码:将符号位数字化为 0 或 1,数的绝对值与符号一起编码,即所谓"符号——绝对值表示"的编码。

正数的反码和补码与原码表示相同。

负数的反码与原码有如下关系:

符号位相同(仍用1表示),其余各位取反(0变1,1变0)。

补码由该数反码的最末位加1求得。

第 二 章 C++简单程序设计

2-1 C++语言有那些主要特点和优点?

解:

C++语言的主要特点表现在两个方面,一是全面兼容C,二是支持面向对象的方法。C++是一个更好的C,它保持了C的简洁、高效、接近汇编语言、具有良好的可读性和可移植性等特点,对C的类型系统进行了改革和扩充,因此C++比C更安全,C++的编译系统能检查出更多的类型错误。 C++语言最重要的特点是支持面向对象。

2-2 下列标识符哪些是合法的?

Program, -page, _lock, test2, 3in1, @mail, A_B_C_D

解:

Program, _lock, test2, A_B_C_D是合法的标识符,其它的不是。

2-3 例2.1中每条语句的作用是什么?

#include <iostream.h>

void main(void)

{

cout<<"Hello!\n"

cout<<"Welcome to c++!\n"

}

解:

#include <iostream.h>//指示编译器将文件iostream.h中的代码

//嵌入到该程序中该指令所在的地方

void main() //主函数名,void 表示函数没有返回值

{ //函数体标志

cout<<"Hello!\n"//输出字符串Hello!到标准输出设备(显示器)上。

cout<<"Welcome to c++!\n"//输出字符串Welcome to c++!

}

在屏幕输出如下:

Hello!

Welcome to c++!

2-4 使用关键字const而不是#define语句的好处有哪些?

解:

const定义的常量是有类型的,所以在使用它们时编译器可以查错;而且,这些变量在调试时仍然是可见的。

2-5 请写出C++语句声明一个常量PI,值为3.1416;再声明一个浮点型变量a,把PI的值赋给a。

解:

const float PI = 3.1416

float a = PI

2-6 在下面的枚举类型中,Blue的值是多少?

enum COLOR

解:

Blue = 102

2-7 注释有什么作用?C++中有哪几种注释的方法?他们之间有什么区别?

解:

注释在程序中的作用是对程序进行注解和说明,以便于阅读。编译系统在对源程序进行编译时不理会注释部分,因此注释对于程序的功能实现不起任何作用。而且由于编译时忽略注释部分,所以注释内容不会增加最终产生的可执行程序的大小。适当地使用注释,能够提高程序的可读性。在C++中,有两种给出注释的方法:一种是延用C语言方法,使用"/*"和"*/"括起注释文字。另一种方法是使用"//",从"//"开始,直到它所在行的行尾,所有字符都被作为注释处理。

2-8 什么叫做表达式?x = 5 + 7是一个表达式吗?它的值是多少?

解:

任何一个用于计算值的公式都可称为表达式。x = 5 + 7是一个表达式,它的值为12。

2-9 下列表达式的值是多少?

1. 201 / 4

2. 201 % 4

3. 201 / 4.0

解:

1. 50

2. 1

3. 50.25

2-10 执行完下列语句后,a、b、c三个变量的值为多少?

a = 30

b = a++

c = ++a

解:

a:32 ; b:30 ; c:32;

2-11 在一个for循环中,可以初始化多个变量吗?如何实现?

解:

在for循环设置条件的第一个""前,用,分隔不同的赋值表达式。

例如:

for (x = 0, y = 10x <100x++, y++)

2-12 执行完下列语句后,n的值为多少?

int n

for (n = 0n <100n++)

//课后3

#include <stdio.h>

int main()

{ void input(int *)

void max_min_value(int *)

void output(int *)

int number[10]

input(number)

max_min_value(number)

output(number)

return 0

}

void input(int *number)

{int i

printf("input 10 numbers:")

for (i=0i<10i++)

scanf("%d",&number[i])

}

void max_min_value(int *number)

{ int *max,*min,*p,temp

max=min=number

for (p=number+1p<number+10p++)

if (*p>*max) max=p

else if (*p<*min) min=p

temp=number[0]number[0]=*min*min=temp

if(max==number) max=min

temp=number[9]number[9]=*max*max=temp

}

void output(int *number)

{int *p

printf("Now,they are:")

for (p=numberp<number+10p++)

printf("%d ",*p)

printf("\n")

}

//课后14

#include <stdio.h>

int main()

{void sort (char *p,int m)

int i,n

char *p,num[20]

printf("input n:")

scanf("%d",&n)

printf("please input these numbers:\n")

for (i=0i<ni++)

scanf("%d",&num[i])

p=&num[0]

sort(p,n)

printf("Now,the sequence is:\n")

for (i=0i<ni++)

printf("%d ",num[i])

printf("\n")

return 0

}

void sort (char *p,int m) // 将n个数逆序排列函数

{int i

char temp, *p1,*p2

for (i=0i<m/2i++)

{p1=p+i

p2=p+(m-1-i)

temp=*p1

*p1=*p2

*p2=temp

}

}

//课后15

#include <stdio.h>

int main()

{void avsco(float *,float *)

void avcour1(char (*)[10],float *)

void fali2(char course[5][10],int num[],float *pscore,float aver[4])

void good(char course[5][10],int num[4],float *pscore,float aver[4])

int i,j,*pnum,num[4]

float score[4][5],aver[4],*pscore,*paver

char course[5][10],(*pcourse)[10]

printf("input course:\n")

pcourse=course

for (i=0i<5i++)

scanf("%s",course[i])

printf("input NO. and scores:\n")

printf("NO.")

for (i=0i<5i++)

printf(",%s",course[i])

printf("\n")

pscore=&score[0][0]

pnum=&num[0]

for (i=0i<4i++)

{scanf("%d",pnum+i)

for (j=0j<5j++)

scanf("%f",pscore+5*i+j)

}

paver=&aver[0]

printf("\n\n")

avsco(pscore,paver) // 求出每个学生的平均成绩

avcour1(pcourse,pscore) // 求出第一门课的平均成绩

printf("\n\n")

fali2(pcourse,pnum,pscore,paver) // 找出2门课不及格的学生

printf("\n\n")

good(pcourse,pnum,pscore,paver) // 找出成绩好的学生

return 0

}

void avsco(float *pscore,float *paver) // 求每个学生的平均成绩的函数

{int i,j

float sum,average

for (i=0i<4i++)

{sum=0.0

for (j=0j<5j++)

sum=sum+(*(pscore+5*i+j)) //累计每个学生的各科成绩

average=sum/5 //计算平均成绩

*(paver+i)=average

}

}

void avcour1(char (*pcourse)[10],float *pscore) // 求第一课程的平均成绩的函数

{int i

float sum,average1

sum=0.0

for (i=0i<4i++)

sum=sum+(*(pscore+5*i)) //累计每个学生的得分

average1=sum/4 //计算平均成绩

printf("course 1:%s average score:%7.2f\n",*pcourse,average1)

}

void fali2(char course[5][10],int num[],float *pscore,float aver[4])

// 找两门以上课程不及格的学生的函数

{int i,j,k,labe1

printf("==========Student who is fail in two courses======= \n")

printf("NO. ")

for (i=0i<5i++)

printf("%11s",course[i])

printf("average\n")

for (i=0i<4i++)

{labe1=0

for (j=0j<5j++)

if (*(pscore+5*i+j)<60.0) labe1++

if (labe1>=2)

{printf("%d",num[i])

for (k=0k<5k++)

printf("%11.2f",*(pscore+5*i+k))

printf("%11.2f\n",aver[i])

}

}

}

void good(char course[5][10],int num[4],float *pscore,float aver[4])

// 找成绩优秀学生(各门85以上或平均90分以上)的函数

{int i,j,k,n

printf(" ======Students whose score is good======\n")

printf("NO. ")

for (i=0i<5i++)

printf("%11s",course[i])

printf("average\n")

for (i=0i<4i++)

{n=0

for (j=0j<5j++)

if (*(pscore+5*i+j)>85.0) n++

if ((n==5)||(aver[i]>=90))

{printf("%d",num[i])

for (k=0k<5k++)

printf("%11.2f",*(pscore+5*i+k))

printf("%11.2f\n",aver[i])

}

}

}

习题1参考答案

一、选择题 1. A 2. D

二、填空题

1. BASIC、FORTRAN、AL_GOL60和COBOL 2. 8

3. 关键字

4. 编辑、编译、链接和运行

三、简答题 1.答:

(1)C语言具有结构化的控制语句。C语言提供了结构化程序所必需的基本控制语句,实现了对逻辑流的有效控制。

(2)C语言具有丰富的数据结构类型。C语言除提供整型、实型、字符型等基本数据类型外,还提供了用基本数据类型构造出的各种复杂的数据结构,如数组、结构、联合等。C语言还提供了与地址密切相关的指针类型。此外,用户还可以根据需要自定义数据类型。 (3)C语言具有丰富的运算符。C语言提供了多达34种运算符,丰富的数据类型与丰富的运算符相结合,使C语言的表达力更具灵活性,同时也提高了执行效率。

(4)C语言简洁、紧凑,使用方便、灵活,程序书写自由,有9种控制语句。

(5)C语言既具有高级语言的功能,又具有低级语言的许多功能,通常被称为中级计算机语言。它既是成功的系统描述语言,又是通用的程序设计语言。 (6)C语言与汇编语言相比,可移植性好。

(7)功能强大。C语言具有低级语言的一些功能,所以,生成目标代码质量高,程序执行效率高。现在许多系统软件都用C语言来描述,可以大大提高了编程效率。

2.答:运行一个C语言程序,一般需要经过如下几个步骤:①上机输入并编辑源程序;②编译源程序;③与库函数连接;④生成可执行目标程序;⑤运行目标程序。 3.答:

(1) *** 作系统的设计与实现。C语言是一种应用非常广泛的结构化高级程序设计语言,既适合编写应用软件,又适合编写系统软件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11186504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存