二级C++真题2006年4月答案.doc

上传人:周芸 文档编号:1473705 上传时间:2020-07-12 格式:DOC 页数:13 大小:52.50KB
下载 相关 举报
二级C++真题2006年4月答案.doc_第1页
第1页 / 共13页
二级C++真题2006年4月答案.doc_第2页
第2页 / 共13页
二级C++真题2006年4月答案.doc_第3页
第3页 / 共13页
二级C++真题2006年4月答案.doc_第4页
第4页 / 共13页
二级C++真题2006年4月答案.doc_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、二级C+真题2006年4月答案真题 120一、选择题(每小题2分,共70分) 下列各题A、B、C、D 四个选项中,只有一个选项是正确的。第1题:参考答案:D答案解析:结构化程序设计方法的主要原则有4点:自顶向下(先从最上层总目标开始设计,逐步使问题具体化)、逐步求精(对于复杂问题,设计一些子目标作为过渡,逐步细化)、模 块化(将程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,每个小目标作为一个模块)、限制使用GOTO语句。没有可复用原则,所以选项D为答案。第2题:参考答案:A答案解析:本题考核模块独立性的评价。评价模块独立性的主要标准有两个:一是模块之间的耦合,它表明两个模块之间互

2、相独立的程度,也可以说是两个或两个以上模块之间关联的 紧密程度(所以,本题的正确答案为选项A);二是模块内部之间的关系是否紧密,称为内聚。一般来说,要求模块之间的耦合尽可能地弱,即模块尽可能独立,而要求模块的内聚 程度尽量地高。第3题:参考答案:D答案解析:本题考核软件测试、软件调试和软件维护的概念。软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。软件测试具有挑剔性, 测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,其目的是设法暴露程序中的错误和缺陷,就是说,测试是程序执行的过程,目的在于发现错误;一个好 的测试在于能发现至今未发现的错误

3、;一个成功的测试是发现了至今未发现的错误。由于测试的这一特征,一般应当避免由开发者测试自己的程序。所以,选项A的说法错误。 调试也称排错,目的是发现错误的位置,并改正错误,经测试发现错误后,可以立即进行调试并改正错误:经过调试后的程序还需进行回归测试,以检查调试的效果,同时也 可防止在调试过程中引进新的错误。所以,选项B的说法错误。 软件维护通常有4类:为纠正使用中出现的错误而进行的改正性维护;为适应环境变化而进行的适应性维护;为改进原有软件而进行的完善性维护;为将来的可维护和可靠而进 行的预防性维护。软件维护不仅包括程序代码的维护,还包括文档的维护。文档可以分为用户文档和系统文档两类。但无论

4、是哪类文档,都必须与程序代码同时维护。只有与程序 代码完全一致的文档才有意义和价值。所以,选项C的说法错误。 综上所述,选项A、B、C的说法都错误,所以,选项D为正确答案。第4题:参考答案:B答案解析:“后进先出”表示最后被插入的元素最先能被删除。选项A中,队列是指允许在一端进行插入、而在另一端进行删除的线性表,在队列这种数据结构中,最先插入的元素将 最先能够被删除,反之,最后插入的元素将最后才能被删除,队列又称为“先进先出”的线性表,它体现了“先来先服务”的原则;选项B中,栈顶元素总是最后被插入的元素, 从而也是最先能被删除的元素,栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。

5、队列和栈都属于线性表,它们具有顺序存储的特点,所以才有“先进先出”和 “后进先出”的数据组织方式。双向链表使用链式存储方式,二叉树也通常采用链式存储方式,它们的存储数据的空间可以是不连续的,各个数据结点的存储顺序与数据元素之间 的逻辑关系可以不一致。所以选项C和选项D错误。第5题:参考答案:A答案解析:一个非空的数据结构如果满足下列两个条件:(1)有且只有一个根结点; (2)每一个结点最多有一个前件,也最多有一个后件。则称为线性结构。线性链表是线性表的链式 存储结构,选项A的说法是正确的。栈与队列是特殊的线性表,它们也是线性结构,选项B的说法是错误的;双向链表是线性表的链式存储结构,其对应的逻

6、辑结构也是线性结构, 而不是非线性结构,选项C的说法是错误的;二叉树是非线性结构,而不是线性结构,选项D的说法是错误的。因此,本题的正确答案为A。第6题:参考答案:D答案解析:二叉树后序遍历的简单描述如下:若二叉树为空,则结束返回。否则(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。 也就是说,后序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后遍历右子树,最后访问根结点,并且,在遍历左、右子树时,仍然先遍历左 子树,然后遍历右子树,最后访问根结点。根据后序遍历的算法,后序遍历的结果为DEBFCA。第7题:参考答案:C答案解析:在二叉树的第k层上,最多有

7、2k-1(k1)个结点。对于满二叉树来说,每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点。因此,在深度为7的满二叉 树中,所有叶子结点在第7层上,即其结点数为 2k-1=27-1=64 因此,本题的正确答案为C。第8题:参考答案:D答案解析:本题考核实体集之间的联系。实体集之间的联系有3种:一对一、一对多和多对多。因为一种商品可以由多个顾客购买,而一个顾客可以购买多种商品,所以,“商品”与 “顾客”两个实体集之间的联系一般是“多对多”,选项D正确。第9题:参考答案:A答案解析:在E-R图中,用三种图框分别表示实体、属性和实体之间的联系,其规定如下:用矩形框表示实体,框内标

8、明实体名;用椭圆状框表示实体的属性,框内标明属性名;用菱 形框表示实体间的联系,框内标明联系名。所以,选项A正确。第10题:参考答案:C答案解析:数据库管理系统DBMS是数据库系统中实现各种数据管理功能的核心软件。它负责数据库中所有数据的存储、检索、修改以及安全保护等,数据库内的所有活动都是在其控制 下进行的。所以,DBMS包含数据库DB。操作系统、数据库管理系统与应用程序在一定的硬件支持下就构成了数据库系统。所以,DBS包含DBMS,也就包含DB。综上所述,选项C正 确。第11题:参考答案:C答案解析:本题考查了函数的一些概念。内联函数是在一般函数定义之前加上关键字 inline声明的函数,

9、其作用类似于预处理宏函数,而不是定义在另一个函数体内部的函数,所以 选项A不正确。在无返回值函数中,执行完最后一条语句后将自动返回,而不必加入return语句,所以选项B也是错误的。如果函数只是返回值类型不同,而其他完全相同(参数个 数及类型),则不能作为重载函数宋使用,所以选项D不正确。故应该选择C。第12题:参考答案:A答案解析:本题考查了常对象与常成员函数的概念。使用const关键字修饰的对象称为常对象,它的特点是不能被更新;使用const关键字声明的成员函数称为常成员函数,它的特点也 是不能更新对象的数据成员。因为其他成员函数没有这个限制,即可以更新对象的数据成员,所以通过常对象只能调

10、用常成员函数而不能调用其他成员函数,而且常成员函数也只 能调用常成员函数而不能调用其他成员函数,否则它们的特性就会被打破。故应该选择A。第13题:参考答案:B答案解析:本题考查的是虚函数的概念。在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。虚函数可以是另一个类的友员函数,但不得是静态成员函数。故应该选 择B。第14题:参考答案:C答案解析:本题考查的是运算符重载的概念。“运算符重载”是针对C+中原有运算符进行的,不可能通过重载创造出新的运算符。故应该选择C。第15题:参考答案:B答案解析:本题考查了类模板实例化的概念。在定义对象的过程中,编译系统会自动地根据需要生成相应的

11、类定义,这种依据类模板生成类定义的过程称为类模板的实例化。故应该选 择B。第16题:参考答案:A答案解析:本题考查的是C+流的一些概念。从输入流中提取数据赋给一个变量的操作称为提取操作;而把表达式的值插入到输出流中的操作称为插入操作。故选项B的说法不正确。 cin是一个预定义的输入流对象而不是流类,故选项C不正确。只有文件流中有一个open成员函数,用来打开一个文件,而输入、输出流中没有open成员函数,选项D的说法不正 确。所以,只有选项A是正确的,应该选择A。第17题:参考答案:A答案解析:本题考查C+语言中的标识符的定义。标识符不是一个随意的字符序列,定义标识符时一般应注意如下几点:第一

12、个字符必须是字母或下划线,中间不能有卒格,所以选项D 是错误的:在第一个字母后,可以是任意字母、下划线和数字组成的字符序列,所以选项B不正确:标识符的长度是任意的,但特定的编译系统能够识别的标识符长度是有限的。 一般不要超过31个字符:标识符中大小写字母是有区别的:用户定义标识符时,不要采用系统的保留字,else是系统保留字所以选项C是错误的。故应该选择A。第18题:参考答案:B答案解析:本题考查了符号常量的特点。符号常量必须在声明的同时为其赋初值。因此选项B是错误的。选项C定义的是一个指向常量的指针变量,即通过该指针不能改变它所指向的内 容,而它自己的内容是可以改变的。定义指针符号常量的格式

13、应该是:double*const point;。所以选项C是合法的,它可以不用在声明时赋初值。故应该选择B。第19题:参考答案:C答案解析:本题考查的是do-while循环。题目首先让x=3,然后进入do-while循环体, x被减去2,接下来的语句输出x的值1。下面计算do-while循环的条件表达式!(-x),由于-运算 符为前缀形式,所以-X的值为0,而!0的结果为“真”,此时x的值变为0,开始第二次执行循环体。x又被减2,输出x的值-2,此时-x的值为-3,!(-3)的值为“假”,所以循环 结束。最后程序的输出结果是1-2,故应该选择C。第20题:参考答案:D答案解析:本题考查的是指针

14、的运用。在使用任何指针变量之前必须先给它赋一个所指合法具体对象的地址值。本题中,在给*p赋值前,指针变量p并没有指向一个具体对象。此时可 以通过编译,但运行时由于p中为随机值,该赋值可能会破坏内存中某个重要的地址空间中的内容,导致程序运行出错。故应该选择D。第21题:参考答案:D答案解析:本题考查的是函数参数的传递。在C+中,函数在传递参数时,总是将实参值的副本传递(拷贝)给被调用函数的形参,即传值调用。因此,在函数中对形参所作的任何操作 都不会改变函数外的实参。故本题function()函数不会对主函数中的 val变量造成任何改变,val也没有被初始化,所以输出的是一个不确定的值:故应该选择

15、D。第22题:参考答案:B答案解析:本题考查了常成员函数和友员函数的一些概念。getRef()函数返回的是a的地址值&a,而函数类型却定义为int,C+中不允许隐式的将一个地址值类型转换为int类型,故选 项A不正确。set()函数被定义为常成员函数,但在函数中给a赋值,改变了数据成员的值这是不允许的,故选项C错误。show()函数被定义为AA类的友员函数,它不属于AA类而是一 个全局函数。所以同时被定义为常成员函数是错误的。所以选项D不正确。故应该选择B。第23题:参考答案:B答案解析:本题考查的知识点是继承的运用。题目中要求的两行输出结果分别在基类的成员函数fun()与派生类的成员函数fu

16、n()中给出,而主函数中只通过派生类对象d调用fun()函 数,即只调用了派生类的成员函数fun()。所以,横线处应该填入对基类成员函数fun()的调用语句,此处只能使用作用域运算符“:”才能调用到基类中的同名函数,故应该选择 B。第24题:参考答案:C答案解析:本题考查的知识点是运算符重载。C+中规定,“”运算符只能作为成员函数重载,故本题的选项C是错误的。第25题:参考答案:D答案解析:本题考查的知识点是模板函数的调用。在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信 息:从模板的实参表(用括起来的参数表)或从模板函数实参

17、表 (用(和)括起来的参数表),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中 部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空 表也可以不要。本题中cast()函数的实参 i只能确定模板参数u的类型为int,而不能确定另外一个模板参数T。故选项A与B不正确。选项C希望将int转型为char*,C+中不允许 隐式的这样转换类型,所以也不正确。故应该选择D。第26题:参考答案:A答案解析:本题考查的知识点是转义字符。在C+的字符常量或字符串中,以“”开头的一系列字

18、符被看作一个特殊的字符,即转义字符。要表示字符时,必须使用转义字符。故本题应该选择A。第27题:参考答案:D答案解析:本题考查了类的定义。C+语言规定,在类体中不允许对所定义的数据成员进行初始化。故本题应该选择D。第28题:参考答案:C答案解析:本题考查的知识点是类的构造函数。构造函数在对象被创建的时候由系统自动调用。在Point a(2),b3,*c4;语句中:a(2)是定义一个对象并传入构造参数2,所以此 时会调用1次构造函数:b3是定义一个包含3个对象的数组,所以构造函数会被调用3次;而*c4定义的是一个包含4个Point类对象指针的数组,它并没有创建任何Point对象, 故构造函数一次

19、也不会被调用。故应该选择C。第29题:参考答案:D答案解析:本题考查了类的定义。一个类的常数据成员的初始化只能在成员初始化列表中进行,所以选项A不正确。常成员函数不能更新对象的数据成员,所以选项B不正确。静态成员 函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员,所以选项C也不正确。故应该选择D。第30题:参考答案:B答案解析:本题考查的是派生类对象的构造与析构。建立派生类对象时,构造函数的执行顺序如下: (1)执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右); (2)执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下); (

20、3)执行派生类的构造函数。 所以本题在建立派生类B的对象。obj时会先调用基类A的构造,然后调用自身的构造。注意:B类中定义的成员p是A类的指针而不是一个对象,故在调用自身构造函数前不需要 构造。而在B类构造函数中使用new操作符动态构造了一个A类的对象,所以整个构造结果是输出:ABA。派生类对象的析构与构造严格相反,即先析构自身,然后析构自身所包含的 成员对象,最后调用基类的析构函数。故本题中,当main()函数返回时,析构B类的对象obj:首先会调用B(),接着再调用A()。但是,在B()函数中使用delete操作符释放 了动态创建的A类对象,故整个析构所输出的结果是:BAA。所以应该选择

21、B。第31题:参考答案:B答案解析:本题考查的知识点是保护继承。题目中的Derived类保护继承了Base类,因此Base类中的公有成员与保护成员均成了Derived类的保护成员,而Base类的私有成员Derived类 不可访问。所以,主函数中通过Derived类的对象只能够访问到 Derived类的公有成员,即只能调用fun4()函数。故应该选择B。第32题:参考答案:B答案解析:本题考查的是虚函数的概念。在C+中,一个派生类的对象可以被它的任何一个基类的指针所指向(或被基类类型的引用所引用)。若基类和派生类中存在一模一样的成员函 数,那么通过该基类指针(或引用)调用这样的成员函数,究竟是应

22、该调用基类中的还是调用派生类中的呢?答案是:若这个成员函数被定义成虚函数,那么就调用派生类中的;否 则会调用基类中的。本题是一个典型的例子,funl()是一般成员函数,fun2()是虚函数,而且在派生类与基类中都存在两个这样的函数。在f()函数中,形参b是一个基类的引用, 它引用的是主函数中定义的派生类对象obi。所以在调用fun()时,运行的是基类的版本,而fun2()运行的是派生类的版本。故选项 B中的结果是正确的。第33题:参考答案:D答案解析:本题考查了运算符重载的综合应用。解本题的关键是要弄明白cout(x+=y)endl;语句是怎么执行的。因为x和y都是Complex类的对象,而C

23、omplex类中已经重载了仁 运算符,所以表达式x+=y就等价于x.operator+=(y)。该函数将y中的re、 im成员累加到x的对应成员之上,并返回x自身。故表达式(x+=y)返回的值是一个 Complex类对象,其内 容为(3,1)。因为运算符的结合性是从左至右的,所以现在要计算的表达式是cout(x+=y),cout是C+语言中预定义的输出流类ostream的对象,所以运算符两边的分 量类型正好符合上面的重载函数,故其等价于函数调用operator(cout,(x+=y)。在的重载函数中输出结果是(3,1),最后函数返回并输出一个换行符endl,程序结 束。故应该选择D。第34题:

24、参考答案:A答案解析:本题考查了输出流的格式控制。cout的fill()方法的作用是设置填充字符,若输出数据宽度小于设置宽度,则空闲位置用填充字符填满。left和endl是C+预定义的用于格 式控制的符号常量,前者使输出数据在指定宽度内左对齐,后者使输出换行。setw()函数的作用是设置输入输出宽度,不过宽度设置的效果只对一次输入或输出有效,在完成了一 个数据的输入或输出后,宽度设置自动恢复为0(表示按数据实际宽度输入输出)。所以在本题中,输出整数123时宽度为4且左对齐,空出最后一位填入填充字符*,结果是123*: 输出字符串OK时宽度自动恢复为0,结果是OK。故程序的输出结果是123*OK

25、,应该选择A。第35题:参考答案:B答案解析:本题考查了成员函数的定义格式。在类外部对成员函数定义的一般格式为:返回类型类名:成员函数名(参数表) 函数体 故本题的正确答案为选项B。二、填空题(每空2分,共30分)第36题:参考答案:45详细解答:在冒泡排序中,最坏情况下,需要比较的次数为n(n-1)/2,也就是: 10*(10-1)/2=45第37题:参考答案:类详细解答:在面向对象方法中,类描述的是具有相似属性与操作的一组对象。第38题:参考答案:关系 或 关系表详细解答:在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。 因此,本题的正确答案是关系。第39题:参考答案:静态分

26、析详细解答:程序测试分为静态分析和动态测试,其中,静态分析是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。第40题:参考答案:物理独立性详细解答:数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为物理独立性。第41题:参考答案:break详细解答:本题考查的知识点是流程控制语句。在C+语言中,具备“只在循环语句或switch语句中使用”特点的流程控制语句只有break。第42题:参考答案:int*p=DATA;详细解答:本题考查的是指针变量的定义及初始化。本题的for循环中,循环变量i取

27、值范围是04,故输出的5个表达式为从*(p+0)到*(p+4),而题目要求输出int型一维数组DATA的前 5个元素。由此可知,变量p是一个指向数组DATA首地址的 int型指针,故它的定义及初始化语句是int*p=DATA;。第43题:参考答案:=3.5详细解答:本题考查了函数默认参数的应用。本题定义的函数test()仅仅是按顺序输出了三个形参值,题目中第1次调用该函数会输出1,A,10.1,但第2次调用少了一个实参却要求输 出2,B,3.5。由此可见,应该将test()函数的第3个参数声明为默认参数,且默认值为3.5。故应该填入=3.5,或加上形参名c=3.5。第44题:参考答案:2详细解

28、答:本题考查了类成员的默认访问控制权限。因为在C+语言中,类的缺省访问权限是私有的(private),所以本题中i和j都是私有成员,故应该填2。第45题:参考答案:13A23B详细解答:本题主要考查的是类的构造函数。一个类可以有多个构造函数,它们是一系列的重载函数,故创建对象时究竟应该调用哪个构造函数由传入的构造参数来决定。其中有两个 构造函数最为特殊:一个是默认构造函数,它没有任何形参;另一个是拷贝构造函数,它的参数是一个自身类型的引用。当建立对象不传入任何构造参数时会调用默认构造函数, 而用一个已创建的对象作为构造参数来创建一个新对象时会调用拷贝构造函数。在本题主函数中,先以默认构造声明了

29、一个对象c1,此时会输出一个“1,c1的ID被初始化为A。 然后调用show()函数,因为show()函数的形参c为Con类的对象,所以当show()函数被调用时,需要用实参值来实例化形参,即发生拷贝构造。故此时会输出一个“3”,然后在 show()函数中会输出形参 c的ID,即c1的ID值“A”。接下来通过一个字符B构造另一个对象c2,此时调用的是第2个构造函数,输出一个“2”,然后又调用show()函数,拷贝构 造函数再次被调用,输出一个“3”,最后在show()函数中输出c2的ID值“B”。所以执行完后输出的结果是13A23B。第46题:参考答案:2213详细解答:本题考查了派生类的构造

30、和虚函数的运用。在主函数中,首先定义了一个ONE类的一个对象aa和一个指针p。然后定义一个TWO类的对象bb,此时TWO类的默认构造函数会被执 行,输出一个“2”。接下来又定义了一个THREE类的对象 cc,因为THREE类是TWO类的派生类,所以会调用TWO类的构造函数,再输出一个“2”。然后让p指向对象cc。最后通过 ONE类指针p调用THREE类对象cc的成员函数f(),因为f()函数是虚函数,所以调用的是THREE类中的f()函数。在该函数中,首先通过作用域运算符“:”调用TWO类中的f()函数, 而TWO类自身没有定义该函数,但它从ONE类中继承了一个,所以该步实际调用的是ONE类中

31、的 f()函数,输出一个“1”,最后返回到THREE类的f()函数中,输出一个“3”结束调 用,返同主函数,整个程序运行结束。故最终输出的结果是:2213。第47题:参考答案:PARENTSON详细解答:本题考查了派生类的构造。在构造一个派生类的时候,会先构造其基类。所以主函数一开始在定义SON类的对象son时,会先执行PARENT类的构造函数再执行SON类的构造函 数,输出“PARENTSON”。接下来定义了一个PARENT类指针p,此处并未创建任何对象,所以不会调用构造函数。第3条语句让指针p指向son对象,此步只改变了指针p的值,所以也 没有输出。故最终输出的结果就是:PARENTSON

32、。第48题:参考答案:bool operator!(Bounce); (注:Bounce后可以跟一个变量名)详细解答:本题考查的是运算符重载的格式。因为“!”是一元运算符,所以将其重载为非成员函数时要有一个Bounce类型的形参(或Bounce类型的引用或常引用),题目又告知结果为 bool型数据,所以该函数的函数原型应该是:bool operator!(Bounce);或bool operator!(Bounce&);或bool operator!(const Bounce&);。在函数原型中也可以给出形参变量 名,就象这样:bool operator!(Bounce b);这些都是正确的答

33、案。第49题:参考答案:real,imag+aimag (注:加数和被加数可以交换位置)详细解答:在C+语言中,可以通过类名来创建一个临时对象,其一般形式如下: 类名(构造参数列表) 该临时对象只在当前语句内有效。在本题的+运算符重载函数中,需要返回一个“其实部等于两个操作对象实部之和,其虚部等于两个操作对象虚部之和”的complex类对象, 因此在括号内只需填入real+areal,imag+aimag就可以返回一个这样的对象。故正确答案是:real+areal,imag+aimag(其中加数与被加数可以互换)。第50题:参考答案:FUNdouble(7)或FUNdouble,int(7)详细解答:本题考查模板函数的调用。本题模板函数的返回值类型参数为T1,形参类型参数为T2。而题目要求用int型参数7调用,并返回一个double型数据。故调用格式应该为:FUN double,int(7)。而这里传递给函数的形参7的类型已经为int,故可省略传递给模板类型参数T2的类型值int,即,也可简写为:FUNdouble(7)。更多试卷请见麦多课文库

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

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1