第二章程序设计基础一、选择题1.下列叙述中正确的是A)程序设计就是编制程序 B)程序的测试必须由程序员自己去完成C)程序经调试改错后还应进行再测试 D)程序经调试改错后不必进行再测试【答案】C【解析】软件测试仍然是保证软件可靠性的主要手段,测试的目的是要尽量发现程序中的错误,调试主要是推断错误的原因,从而进一步改正错误。
测试和调试是软件测试阶段的两个密切相关的过程,通常是交替进行的。
选项C正确。
2. 下列叙述中,不符合良好程序设计风格的是( )A)程序的效率第一,清晰第二 B)程序的可读性好C)程序中有必要的注释 D)输入数据前要有提示信息【答案】A【解析】本题考查软件工程的程序设计风格。
软件在编码阶段,力求程序语句简单、直接,不能只为了追求效率而使语句复杂化。
除非对效率有特殊的要求,程序编写要做到清晰第一、效率第二。
人们在软件生存期要经常阅读程序,特别是在软件测试和维护阶段,编写程序的人和参与测试、维护的人都要阅读程序,因此要求程序的可读性要好。
正确的注释能够帮助读者理解程序,可为后续阶段进行测试和维护提供明确的指导。
所以注释不是可有可无的,而是必须的,它对于理解程序具有重要的作用。
I/O信息是与用户的使用直接相关的,因此它的格式应当尽可能方便用户的使用。
在以交互式进行输入/输出时,要在屏幕上使用提示符明确提示输入的请求,指明可使用选项的种类和取值范围。
经过上述分析可知,选项A是不符合良好程序设计风格要求的。
3.对建立良好的程序设计风格,下面描述正确的是A)程序应简单、清晰、可读性好 B)符号名的命名只要符合语法C)充分考虑程序的执行效率 D)程序的注释可有可无【答案】A【解析】程序设计应该简单易懂,语句构造应该简单直接,不应该为提高效率而把语句复杂化。
故本题答案应该为选项A)。
4.下列选项中不符合良好程序设计风格的是A)源程序要文档化 B)数据说明的次序要规范化C)避免滥用goto 语 D)模块设计要保证高耦合、高内聚【答案】D【解析】编程风格是在不影响性能的前提下,有效地编排和组织程序,以提高可读性和可维护性。
更直接的说,风格就是意味着要按照规则进行编程。
这些规则包括:(1)程序文档化。
就是程序文档包含恰当的标识符.适当的注解和程序的视觉组织等。
(2)数据说明。
出于阅读理解和维护的需要,最好使模块前的说明语句次序规范化。
此外,为方便查找,在每个说明语句的说明符后,数据名应按照字典顺序排列。
(3)功能模块化。
即把源程序代码按照功能划分为低耦合、高内聚的模块。
(4)注意goto语句的使用。
合理使用goto语句可以提高代码的运行效率.但goto语句的使用会破坏程序的结构特性。
因此,除非确实需要,否则最好不使用goto语,因此,本题的正确答案是D。
5.在设计程序时,应采纳的原则之一是A)不限制goto语句的使用 B)减少或取消注解行C)程序越短越好 D)程序结构应有助于读者理解【答案】D【解析】滥用goto 语句将使程序流程无规律,可读性差,因此A)不选;注解行有利于对程序的理解,不应减少或取消,B)也不选;程序的长短要依照实际情况而论,而不是越短越好,C)也不选。
故本题答案应该为选项D)。
6.下面不属于软件设计原则的是A)抽象B)模块化C)自底向上D)信息隐藏【答案】C【解析】软件设计的原则包括:抽象、模块化、信息隐蔽和模块独立性。
所以自底向上不是软件设计原则。
答案为C。
7.下列选项中不属于结构化程序设计方法的是A)自顶向下B)逐步求精 C)模块化 D)可复用【答案】D【解析】结构化程序设计方法的主要原则有4点:自顶向下(先从最上层总目标开始设计,逐步使问题具体化)、逐步求精(对于复杂问题,设计一些子目标作为过渡,逐步细化)、模块化(将程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,每个小目标作为一个模块)、限制使用GOTO语句。
没有可复用原则,所以选项D为答案。
8.在面向对象设计中,对象有很多基本特点,其中“从外面看只能看到对象的外部特性,而对象的内部对外是不可见的”这一性质指的是对象的A)分类性B)标识惟一性C)多态性D)封装性【答案】D【解析】从外面看只能看到对象的外部特性,而对象的内部,即处理能力的实行和内部状态,指的是对象的封装性。
9.结构化程序设计的一种基本方法是A)筛选法B)递归法C)归纳法D)逐步求精法【答案】D【解析】在结构化程序设计中通常采取自上而下、逐步求精的方法,其总的思想是先全局后局部、先整体后细节、先抽象后具体。
而筛选法、递归法和归纳法指的都是程序的某种具体算法。
10.在结构化程序设计中,模块划分的原则是( )A)各模块应包括尽量多的功能 B)各模块的规模应尽量大C)各模块之间的联系应尽量紧密 D)模块内具有高内聚度、模块间具有低耦合度【答案】D【解析】本题考查软件工程中软件设计的概念和原理。
人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得到如下的启发式规则:1).改进软件结构,提高模块独立性。
通过模块的分解或合并,力求降低耦合提高内聚。
低耦合也就是降低不同模块间相互依赖的紧密程度,高内聚是提高一个模块内各元素彼此结合的紧密程度。
2).模块的规模应适中。
一个模块的规模不应过大,过大的模块往往是由于分解不够充分;过小的模块开销大于有益操作,而且模块过多将使系统接口复杂。
因此过小的模块有时不值得单独存在。
3).模块的功能应该可以预测,但也要防止模块功能过分局限。
如果模块包含的功能太多,则不能体现模块化设计的特点;如果模块的功能过分的局限,使用范围就过分狭窄。
经过上述分析,本题的正确答案是选项D。
11.结构化程序设计的3种结构是A)顺序结构、选择结构、转移结构 B)分支结构、等价结构、循环结构C)多分支结构、赋值结构、等价结构 D)顺序结构、选择结构、循环结构【答案】D【解析】顺序结构、选择结构和循环结构(或重复结构)是结构化程序设计的3种基本结构。
故本题答案应该为选项D)。
12.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率,现在,与程序的效率相比,人们更重视程序的A)安全性 B)一致性 C)可理解性 D)合理性【答案】C13.结构化程序设计主要强调的是A)程序的规模 B)程序的效率 C)程序设计语言的先进性 D)程序易读性【答案】D【解析】结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化及限制使用goto语句,总的来说可使程序结构良好、易读、易理解、易维护。
故本题答案应该为选项D)。
14.编制一个好的程序,首先要保证它的正确性和可靠性,还应强调良好的编程风格,在书写功能性注释时应考虑A)仅为整个程序作注释 B)仅为每个模块作注释 C)为程序段作注释 D)为每个语句作注释【答案】C【解析】功能性注释是嵌在源程序体中的,用以描述其后的语句或程序段是在做什么工作,或者执行了下面的语句会怎么样。
所以它描述的是一段程序,是为程序段做注释,而不是每条语句。
15.下面选项中不属于面向对象程序设计特征的是( )A)继承性B)多态性C)类比性D)封装性【答案】C【解析】通常认为,面向对象方法具有封装性、继承性、多态性几大特点。
就是这几大特点,为软件开发提供了一种新的方法学。
封装性:所谓封装就是将相关的信息、操作与处理融合在一个内含的部件中(对象中)。
简单地说,封装就是隐藏信息。
这是面向对象方法的中心,是面向对象程序设计的基础。
继承性:子类具有派生它的类的全部属性(数据)和方法,而根据某一类建立的对象也都具有该类的全部,这就是继承性。
继承件自动在类与子类间共享功能与数据,当某个类作了某项修改,其子类会自动改变,子类会继承其父类所有特性与行为模式,继承有利于提高软件开发效率,容易达到一致性。
多态性:多态性就是多种形式。
不同的对象在接收到相同的消息时,采用不同的动作。
例如,一个应用程序包括许多对象,这些对象也许具有同一类型的工作,但是却以不同的做法来实现。
不必为每个对象的过程取一过程名,造成复杂化,可以使过程名复用。
同一类型的工作有相同的过程名,这种技术称为多态性。
经过上述分析可知,选项C的说法是错误的。
16.在面向对象方法中,实现信息隐蔽是依靠( )A)对象的继承 B)对象的多态 C)对象的封装 D)对象的分类【答案】C【解析】通常认为,面向对象方法具有封装性、继承性、多态性几大特点。
就是这几大特点,为软件开发提供了一种新的方法学。
封装性:所谓封装就是将相关的信息、操作与处理融合在一个内含的部件中(对象中)。
简单地说,封装就是隐藏信息。
这是面向对象方法的中心,也是面向对象程序设计的基础。
继承性:子类具有派生它的类的全部属性(数据)和方法,而根据某一类建立的对象也都具有该类的全部,这就是继承性。
继承性自动在类与子类间共享功能与数据,当某个类作了某项修改,其子类会自动改变,子类会继承其父类所有特性与行为模式。
继承有利于提高软件开发效率,容易达到一致性。
多态性;多态性就是多种形式。
不同的对象在接收到相同的消息时,采用不同的动作。
例如,一个应用程序包括许多对象,这些对象也许具有同一类型的工作.但是却以不同的做法来实现。
不必为每个对象的过程取一过程名,造成复杂化,可以使过程名复用。
同一类型的工作有相同的过程名,这种技术称为多态性。
经过上述分析可知,在面向对象方法中,实现信息隐蔽是依靠对象的封装。
正确答案是选项c。
17. 下面概念中,不属于面向对象方法的是______。
A)对象 B)继承 C)类 D)过程调用【答案】D。
【解析】面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。
面向对象方法从对象出发,发展出对象,类,消息,继承等概念。
18. 面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是______。
A)模拟现实世界中不同事物之间的联系B)强调模拟现实世界中的算法而不强调概念C)使用现实世界的概念抽象地思考问题从而自然地解决问题D)鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考【答案】C。
【解析】面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是,使用现实世界的概念抽象地思考问题从而自然地解决问题。
它强调模拟现实世界中的概念而不强调算法,它鼓励开发者在软件开发的绝大部分中都用应用领域的概念去思考。
19.下面对对象概念描述错误的是______。
A)任何对象都必须有继承性 B)对象是属性和方法的封装体C)对象间的通讯靠消息传递 D)操作是对象的动态性属性【答案】A。
【解析】对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系。
对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。