C++语言程序设计(第5版-郑莉)-第一章课后习题
- 1、简述计算机程序设计语言的发展历程
- 机器语言:纸带打孔用0和1组成的程序,不需要翻译,计算机直接执行。
- 汇编语言:可以使用助记符表示01组成的机器指令,更容易记忆,但抽象层次和机器语言一样,并没有本质上的变化。需要汇编程序翻译成机器语言,CPU等硬件不同,指令系统不同,汇编语言也不同。
- 高级语言:机器语言和汇编语言都是使用硬件提供的指令系统进行思维的,程序的结构也受制于硬件提供了JMP等跳转指令,还要直接处理内存地址等。因此,系统开发者设计了复杂的翻译系统,尽量不按照硬件指令系统来思维,把硬件语言尽可能的向人类习惯的语言靠拢,也可以说提高了抽象层次,就是所谓的高级语言。高级语言提供了顺序、选择、循环三种控制结构,避免使用复杂的JMP跳转指令;可使用标识符定义变量,不再直接处理内存地址;通过针对不同机型设计不同的翻译系统,使得一个高级语言源程序,可以不修改或少量修改,就直接在不同机型的翻译系统上翻译成机器语言,然后执行;还将最常用的一些功能,尤其是和硬件相关的功能,写成公共子程序库,方便使用。
- 面向对象语言:通过改进翻译系统,进一步提高了语言的抽象层次,将变量和函数包装成对象,将struct进化到class,实现继承、多态来提高软件的复用。
- 2、面向对象编程的语言有哪些特点?
- 高级语言
- 将程序的实体描述成具有属性和行为(也叫服务)的对象,将相似的对象抽象成类
- 数据封装,实现数据保护
- 继承、多态,实现程序重用
- 3、什么是结构化程序设计方法?这种方法有什么优点和缺点?
- 20世纪60年代发生软件危机:50年代发明计算机后主要从事数值计算,到60年代计算机要完成更加复杂的非数值计算类的任务,程序规模和复杂度大幅提高,汇编语言和机器语言一样,对程序结构完全没有要求,是非结构化的语言。不同的人编写的汇编语言程序逻辑性、条理性不一,导致软件的升级维护几乎不可能。因此,结构化程序设计方法应运而生。
- 结构化程序设计语言,提供了顺序、选择、循环三种基本结构,并要求尽量避免使用goto语句;提供了以函数或子程序进行功能包装的语言机制,其主要思想是自顶向下、逐步求精,将一个大功能逐步分解成一个个的小功能,通过main函数调用其他函数,其他函数继续调用其他函数,这样就形成了一个功能调用的树状结构。
- 优点是结构清晰,条理清楚,可维护性和汇编语言相比要强很多
- 结构化程序设计的基本模型是程序设计=数据结构+算法,其本意是将数据结构和函数分离,这也是它的缺点。数据结构和函数分离,一旦数据结构的定义发生变化,与之关联的所有函数都要重新写,工作量很大,还容易遗漏。
- 4、什么是对象?什么是面向对象方法?这种方法有哪些特点?
- 对象:人类思维会很自然的把一个具有属性和行为的事物看作对象,而在计算机系统里,也可以把一个程序实体看成是一个具有属性和行为的对象。
- 面向对象方法:这个方法的核心是把所有的东西都看成一个对象,可以是实际的,比如一个球,也可以是虚拟的,比如一项计划;然后把相似的对象看作类。
- 这个方法的特点是将数据结构和函数,也就是属性和方法,打包到一个对象中,用这种方法就能模拟现实世界中的对象。
- 5、什么叫封装?
- 将一个程序实体的数据和相关的函数都放在对象里,通过访问控制设置访问权限,提供接口和外部通信,有些内部的数据和函数对外不可见。从外面看,对象就像一个黑匣子,只有操作面板上的一些按钮可以操作。
- 6、面向对象软件工程包含哪些内容?
- 面向对象分析:分析用户需求里都涉及到了哪些对象,然后将对象的属性和行为分析出来,将用户的问题转化成模型。
- 面向对象设计:分成初步设计和详细设计,要细致的描述算法。
- 面向对象编程:将人类语言+数学语言+伪代码表达的算法,用C++再说一遍。
- 面向对象测试:以类为单位进行测试。
- 面向对象维护:面向对象语言具有继承、封装、多态等特性,扩充功能相对简单。
- 7、计算机内部的信息可以分为几类?简述之。
- 控制信息
- 数据信息
- 数值信息
- 整型:short int long + signed unsigned
- 浮点型:float double
- 非数值信息
- 布尔类型
- 字符类型
- 二进制信息:图像、声音、视频等
- 8、什么叫二进制?二进制有哪些优点和缺点?
- 用0和1两个符号的进位制计数方法叫二进制
- 优点:计算机的高低电平恰好可以表示0和1,非常稳定
- 缺点:人类习惯的是十进制而不是二进制
- 11、简要比较原码、反码、补码几种编码方法
- 原码、反码、补码在表示正数的时候没有区别
- 原码不能表示负数
- 反码在原码的基础上,按位取反,表示对应的负数,但有+0和-0,也就是0有两种表示
- 补码在原码的基础上,按位取反再+1,表示对应的负数,这样只有一个0