【计算机类职业资格】全国计算机等级考试二级C++真题2007年4月及答案解析.doc

上传人:figureissue185 文档编号:1329629 上传时间:2019-10-17 格式:DOC 页数:18 大小:98.50KB
下载 相关 举报
【计算机类职业资格】全国计算机等级考试二级C++真题2007年4月及答案解析.doc_第1页
第1页 / 共18页
【计算机类职业资格】全国计算机等级考试二级C++真题2007年4月及答案解析.doc_第2页
第2页 / 共18页
【计算机类职业资格】全国计算机等级考试二级C++真题2007年4月及答案解析.doc_第3页
第3页 / 共18页
【计算机类职业资格】全国计算机等级考试二级C++真题2007年4月及答案解析.doc_第4页
第4页 / 共18页
【计算机类职业资格】全国计算机等级考试二级C++真题2007年4月及答案解析.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、全国计算机等级考试二级 C+真题 2007年 4月及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.下列叙述中正确的是(分数:2.00)A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.算法的时间复杂度是指执行算法所需要的计算工作量C.数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关2.在结构化程序设计中,模块划分的原则是(分数:2.00)A.各模块应包括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度、模块间具有低耦合度3.下列叙述中正确的是(分数:2.00

2、)A.软件测试的主要目的是发现程序中的错误B.软件测试的主要目的是确定程序中错误的位置C.为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作D.软件测试是证明软件没有错误4.下面选项中不属于面向对象程序设计特征的是(分数:2.00)A.继承性B.多态性C.类比性D.封装性5.下列对队列的叙述正确的是(分数:2.00)A.队列属于非线性表B.队列按“先进后出”原则组织数据C.队列在队尾删除数据D.队列按“先进先出”原则组织数据6.对下列二叉树 (分数:2.00)A.DYBEAFCZXB.YDEBFZXCAC.ABDYECFXZD.ABCDEFXYZ7.某二叉树中有 n个度为 2的结

3、点,则该二叉树中的叶子结点数为(分数:2.00)A.n+1B.n-1C.2nD.n/28.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是(分数:2.00)A.并B.交C.投影D.笛卡儿乘积9.在 E-R图中,用来表示实体之间联系的图形是(分数:2.00)A.矩形B.椭圆形C.菱形D.平行四边形10.下列叙述中错误的是(分数:2.00)A.在数据库系统中,数据的物理结构必须与逻辑结构一致B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持11.为了取代 C中带参数的宏,在 C+中使用(分数:2.00

4、)A.重载函数B.内联函数C.递归函数D.友元函数12.下列关于类定义的说法中,正确的是(分数:2.00)A.类定义中包括数据成员和函数成员的声明B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义13.下列关于派生类构造函数和析构函数的说法中,错误的是(分数:2.00)A.派生类的构造函数会隐含调用基类的构造函数B.如果基类中没有缺省构造函数,那么派生类必须定义构造函数C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数14.通过运算符重载,可以改变运算符原有的(分数

5、:2.00)A.操作数类型B.操作数个数C.优先级D.结合性15.有如下函数模板:templateclass TT square(T x)return x*x;其中 T是(分数:2.00)A.函数形参B.函数实参C.模板形参D.模板实参16.使用输入输出操作符 setw,可以控制(分数:2.00)A.输出精度B.输出宽度C.对齐方式D.填充字符17.下列字符串中,不可以用作 C+标识符的是(分数:2.00)A.y_2006B._TEST_HC.ReturnD.switch18.字面常量 42、4.2、42L 的数据类型分别是(分数:2.00)A.long、double、intB.long、fl

6、oat、intC.int、double、longD.int、float、long19.执行下列语句段后,输出字符“*”的个数是 for(int i=50;i1;-i)cout*;(分数:2.00)A.48B.49C.50D.5120.有如下程序段 int i=0,j=1;int void dispa() coutx,; private: int x; ; class B: public A public: B(int i): A(i+10) x=i; void dispb() (dispa(); coutxendl; private: int x; ; int main() B b(2); b

7、.dispb(); return 0; 运行时输出的结果是(分数:2.00)A.10,2B.12,10C.12,2D.2,232.虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数。而非虚函数不支持多态调用。有如下程序; #include iostream using namespace std; class Base public: virtual void f() cout“f0+“; void g() cout“g0+“; ; class Derived: public Base public: void f()

8、cout“f+“; void g() cout“g+“; ; int main() Derived d; Base *p= P-f(); P-g(); return 0; 运行时输出的结果是(分数:2.00)A.f+g+B.f0+g+C.f+g0+D.f0+g0+33.下面程序中对一维坐标点类 Point进行运算符重载 #include iostream using namespace std; class Point public: Point(int val) x=val; Point return *this; Point operator+(int) Point old = *this

9、; +(*this); return old; int GetX() const return x; private: int x; ; int main() Point a(10); cout (+a).GetX(); cout a+.GetX();return 0; 编译和运行情况是(分数:2.00)A.运行时输出 1011B.运行时输出 1111C.运行时输出 1112D.编译有错34.有如下程序: #include iostream using namespace std; int main() char str100, *p; cout“Please input a string:“

10、; cinstr; p=str; for (int i=0; *p!=/0; p+,i+); coutiendl; return 0; 运行这个程序时,若输入字符串为 abcdefgabcd 则输出结果是(分数:2.00)A.7B.12C.13D.10035.有如下程序: #include iostream using namespace std; class Sample friend long fun(Sample s); public: Sample(long a) x=a; private: long x; ; long fun(Sample s) if(s.x 2) return 1

11、; return s.x * fun(Sample(s.x-1); int main() int stun = 0; for (int i=0; i6; i+) sum += fun(Sample(i); cout sum; return 0; 运行时输出的结果是(分数:2.00)A.120B.16C.154D.34二、B填空题/B(总题数:15,分数:30.00)36.在深度为 7的满二叉树中,度为 2的结点个数为U 【1】 /U。(分数:2.00)填空项 1:_37.软件测试分为白箱(盒)测试和黑箱(盒)测试。等价类划分法属于U 【2】 /U测试。(分数:2.00)填空项 1:_38.在数

12、据库系统中,实现各种数据管理功能的核心软件称为U 【3】 /U。(分数:2.00)填空项 1:_39.软件生命周期可分为多个阶段。一般分为定义阶段、开发阶段和维护阶段。编码和测试属于U 【4】 /U阶段。(分数:2.00)填空项 1:_40.在结构化分析使用的数据流图(DFD) 中,利用U 【5】 /U对其中的图形元素进行确切解释。(分数:2.00)填空项 1:_41.C+中只有两个逻辑常量:true 和U 【6】 /U。(分数:2.00)填空项 1:_42.若要访问指针变量 p所指向的数据,应使用表达式U 【7】 /U。(分数:2.00)填空项 1:_43.己知一个函数的原型是: int f

13、n(double x); 若要以 5.27为实参调用该函数,应使用表达式U 【8】 /U。(分数:2.00)填空项 1:_44.有如下定义: class MA int value; public: MA(int n=0):value(n) ; MA*ta,tb; 其中MA类的对象名标识符是U 【9】 /U。(分数:2.00)填空项 1:_45.如下类定义中包含了构造函数和拷贝构造函数的原型声明,请在横线处填写正确的内容,使拷贝构造函数的声明完整。 Class myClass private: int data; public: myClass(int value);/构造函数 myClass(

14、constU 【10】 /UanotherObject);/拷贝构造函数 (分数:2.00)填空项 1:_46.用来派生新类的类称为U 【11】 /U,而派生出的新类称为它的子类或派生类。(分数:2.00)填空项 1:_47.有如下程序: #includeiostream using namespace std; class CA public: CA()coutA;) ; class CB:private CA public: CB()coutB; ; int main() CA a; CB b; return 0; 这个程序的输出结果是U 【12】 /U。(分数:2.00)填空项 1:_4

15、8.若将一个二元运算符重载为类的成员函数,其形参个数应该是U 【13】 /U个。(分数:2.00)填空项 1:_49.有如下程序: #includeiostream using namespace std; class DA int k; public: DA(int x=1):k(x) DA()coutk; ; int main() DA d=DA(3),DA(3),DA(3); DA*p=new DA2; delete p; return 0; 这个程序的输出结果是U 【14】 /U。(分数:2.00)填空项 1:_50.C+语言中的多态性分为编译时的多态性和U 【15】 /U时的多态性。

16、(分数:2.00)填空项 1:_全国计算机等级考试二级 C+真题 2007年 4月答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.下列叙述中正确的是(分数:2.00)A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.算法的时间复杂度是指执行算法所需要的计算工作量 C.数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关解析:解析 本题考查数据结构中有关算法的基本知识和概念。数据的结构,直接影响算法的选择和效率。而数据结构包括两方面,即数据的逻辑结构和数据的存储结构。因此,数据的逻辑结构和存储结构都影响算

17、法的效率。选项 A的说法是错误的。算法的时间复杂度是指算法在计算机内执行时所需时间的度量;与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。因此,选项 B的说法是正确的。 数据之间的相互关系称为逻辑结构。通常分为四类基本逻辑结构,即集合、线性结构、树型结构、图状结构或网状结构。存储结构是逻辑结构在存储器中的映象,它包含数据元素的映象和关系的映象。存储结构在计算机中有两种,即顺序存储结构和链式存储结构。可见,逻辑结构和存储结构不是一一对应的。因此,选项 C的说法是错误的。 有时人们为了提高算法的时间复杂度,而以牺牲空间复杂度为代价。但是,这两者之间没有必然的联系。因此,选项

18、 D的说法是错误的。2.在结构化程序设计中,模块划分的原则是(分数:2.00)A.各模块应包括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度、模块间具有低耦合度 解析:解析 本题考查软件工程中软件设计的概念和原理。人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得到如下的启发式规则: (1)改进软件结构,提高模块独立性。通过模块的分解或合并,力求降低耦合提高内聚。低耦合也就是降低不同模块间相互依赖的紧密程度,高内聚是提高一个模块内各元素彼此结合的紧密程度。 (2)模块的规模应适中。一个模块的规模不应过大,过大的模块往往是由于分解不够充分:

19、过小的模块开销大于有益操作,而且模块过多将使系统接口复杂。因此过小的模块有时不值得单独存在。 (3)模块的功能应该可以预测,但也要防止模块功能过分局限。如果模块包含的功能太多,则不能体现模块化设计的特点;如果模块的功能过分的局限,使用范围就过分狭窄。 经过上述分析,本题的正确答案是选项 D。3.下列叙述中正确的是(分数:2.00)A.软件测试的主要目的是发现程序中的错误 B.软件测试的主要目的是确定程序中错误的位置C.为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作D.软件测试是证明软件没有错误解析:解析 本题考查软件工程中测试的目的和方法。仅就软件测试而言,它的目的是发现软件

20、的中的错误,但是,发现错误并不是最终目的,最终目的是通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。 由于测试的目标是暴露程序中的错误,从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在软件测试阶段通常由其他人员组成测试小组来完成测试工作。因此,经过上述分析可知选项 A的说法是正确的,而选项 B、C、D 的说法是错误的。4.下面选项中不属于面向对象程序设计特征的是(分数:2.00)A.继承性B.多态性C.类比性 D.封装性解析:解析 通常认为,面向对象方法具有封装性、继承性、多态性几大特点。就是这几大特点,为软件开发提供了一种新的方法学。 封装性:所谓封装就是将相关的信

21、息、操作与处理融合在一个内含的部件中(对象中)。简单地说,封装就是隐藏信息。这是面向对象方法的中心,是面向对象程序设计的基础。 继承性:子类具有派生它的类的全部属性(数据)和方法,而根据某一类建立的对象也都具有该类的全部,这就是继承性。继承性自动在类与子类间共享功能与数据,当某个类作了某项修改,其子类会自动改变,子类会继承其父类所有特性与行为模式。继承有利于提高软件开发效率,容易达到一致性。 多态性:多态性就是多种形式。不同的对象在接收到相同的消息时,采用不同的动作。例如,一个应用程序包括许多对象,这些对象也许具有同一类型的工作,但是却以不同的做法来实现。不必为每个对象的过程取一过程名,造成复

22、杂化,可以使过程名复用。同一类型的工作有相同的过程名,这种技术称为多态性。 经过上述分析可知,选项 C的说法是错误的。5.下列对队列的叙述正确的是(分数:2.00)A.队列属于非线性表B.队列按“先进后出”原则组织数据C.队列在队尾删除数据D.队列按“先进先出”原则组织数据 解析:解析 本题考查数据结构中队列的基本知识。队列是一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出的特性。在队列中,允许插入元素的一端叫做队尾,允许删除的一端则称为队头。这与日常生活中的排队是一致的,最早进入队列的人最早离开,新来的人总是加入到队尾。因此,本题中只有选项 D的说法是

23、正确的。6.对下列二叉树 (分数:2.00)A.DYBEAFCZXB.YDEBFZXCAC.ABDYECFXZ D.ABCDEFXYZ解析:解析 本题考查数据结构中二叉树的遍历。根据对二叉树根的访问先后顺序不同,分别称为前序遍历、中序遍历和后序遍历。这三种遍历都是递归定义的,即在其子树中也按照同样的规律进行遍历。下面就是前序遍历方法的递归定义。 当二叉树的根不为空时,依次执行如下 3个操作: (1)访问根结点 (2)按先序遍历左子树 (3)按先序遍历右子树 根据如上前序遍历规则,来遍历本题中的二叉树。首先访问根结点,即 A,然后遍历 A的左子树。遍历左子树同样按照相同的规则首先访问根结点 B,

24、然后遍历 B的左子树。遍历 B的左子树,首先访问 D,然后访问 D的左子树,D 的左子树为空,接下来访问 D的右子树,即Y。遍历完 B的左子树后,再遍历 B的右子树,即 E。到此遍历完 A的左子树,接下来遍历 A的右子树。按照同样的规则,首先访问 C,然后遍历 C的左子树,即 F。C 的左子树遍历完,接着遍历 C的右子树。首先访问右子树的根结点 X,然后访问 X的左子树,X 的左子树,即 Z,接下来访问 X的右子树,右子树为空。到此,把题目的二叉树进行了一次前序遍历。遍历的结果为 ABDYECFXZ,故本题的正确答案为选项C。7.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为(分

25、数:2.00)A.n+1 B.n-1C.2nD.n/2解析:解析 本题考查数据结构中二叉树的性质。二叉树满足如下一条性质,即:对任意一棵二叉树,若终端结点(即叶子结点)数为 n0,而其度数为 2的结点数为 n 2则 n0=n2+1。根据这条性质可知,若二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为 n+1。因此,本题的正确答案是选项 A。8.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是(分数:2.00)A.并B.交 C.投影D.笛卡儿乘积解析:解析 本题考查数据库的关系运算。两个关系的并运算是指将第一个关系的元组加到第二个关系中,生成新的关系。因此,并运算不改变关

26、系表中的属性个数,也不能减少元组个数。 两个关系的交运算是包含同时出现在第一和第二个关系中的元组的新关系。因此,交运算不改变关系表中的属性个数,但能减少元组个数。 投影是一元关系操作。投影操作选取关系的某些属性,这个操作是对一个关系进行垂直分割,消去某些属性,并重新安排属性的顺序,再删除重复的元组。因此,投影运算既可以减少关系表中的属性个数,也可以减少元组个数。 两个关系的笛卡儿乘积是指一个关系中的每个元组和第二个关系的每个元组连接。因此,笛卡儿乘积运算能够增加元组属性的个数。 经过上述分析可知,在上述四种运算中,交运算不改变关系表中的属性个数但能减少元组个数。因此,正确答案是选项 B。9.在

27、 E-R图中,用来表示实体之间联系的图形是(分数:2.00)A.矩形B.椭圆形C.菱形 D.平行四边形解析:解析 E-R 模型中,有三个基本的抽象概念:实体、联系和属性。E-R 图是 E-R模型的图形表示法,在 E-R图中,用矩形框表示实体,菱形框表示联系,椭圆形框表示属性。因此,本题的正确答案是选项C。10.下列叙述中错误的是(分数:2.00)A.在数据库系统中,数据的物理结构必须与逻辑结构一致 B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持解析:解析 本题考查数据库系统的基本概念和知识。数据的逻辑结构,

28、是数据间关系的描述,它只抽象地反映数据元素之间的逻辑关系,而不管其在计算机中的存储方式。数据的存储结构,又叫物理结构,是逻辑结构在计算机存储器里的实现。这两者之间没有必然的联系。因此,选项 A的说法是错误的。 数据库可以看成是长期存储在计算机内的、大量的、有结构的和可共享的数据集合。因此,数据库具有为各种用户所共享的特点。不同的用户可以使用同一个数据库,可以取出它们所需要的子集,而且容许子集任意重叠。数据库的根本目标是要解决数据的共享问题。因此,选项 B的说法是正确的。 数据库设计是在数据库管理系统的支持下,按照应用的要求,设计一个结构合理、使用方便、效率较高的数据库及其应用系统,数据库设计包

29、含两方面的内容:一是结构设计,也就是设计数据库框架或数据库结构;二是行为设计,即设计基于数据库的各类应用程序、事务等。因此,选项 C的说法是错误的。 数据库系统除了数据库管理软件之外,还必须有其他相关软件的支持。这些软件包括操作系统、编译系统、应用软件开发工具等。对于大型的多用户数据库系统和网络数据库系统,还需要多用户系统软件和网络系统软件的支持。因此,选项 D的说法是正确的。 因此,本题的正确答案是选项 A。11.为了取代 C中带参数的宏,在 C+中使用(分数:2.00)A.重载函数B.内联函数 C.递归函数D.友元函数解析:解析 本题考查的知识点是;内联函数。C+引入内联(inline)函

30、数的原因是用它来取代 C中的预处理宏函数,即带参数的宏。故本题应该选择 B。12.下列关于类定义的说法中,正确的是(分数:2.00)A.类定义中包括数据成员和函数成员的声明 B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义解析:解析 本题考查的知识点是:类的定义。类中缺省的访问权限是私有的(private),所以选项 B) 不正确:类的数据成员和函数成员的访问控制权限均可被声明为公有 (public)、私有(priate)和保护(protected)中的任意一种,所以选项 C) 不正确;成员函数的实现即可以在类体内定义,也可以在类体外定义,所以选项

31、 D) 不正确。故本题应该选择 A。13.下列关于派生类构造函数和析构函数的说法中,错误的是(分数:2.00)A.派生类的构造函数会隐含调用基类的构造函数B.如果基类中没有缺省构造函数,那么派生类必须定义构造函数C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 解析:解析 本题考查的知识点是;派生类的构造函数和析构函数。在销毁派生类对象时,析构函数的执行;过程与构造函数严格相反,即;(1)对派生类新增普通成员进行清理; (2)调用成员对象析构函数,对派生类新增的成员对象进行清理;(3)调用基类析构函数,对基

32、类进行清理。故本题应该选择 D。14.通过运算符重载,可以改变运算符原有的(分数:2.00)A.操作数类型 B.操作数个数C.优先级D.结合性解析:解析 本题考查的知识点是:运算符重载。重载的运算符具有保持其原有的操作数个数、优先级和结合性不变的特性。故本题应该选择 A。15.有如下函数模板:templateclass TT square(T x)return x*x;其中 T是(分数:2.00)A.函数形参B.函数实参C.模板形参 D.模板实参解析:解析 本题考查的知识点是:函数模板。声明一个函数模板的格式是: template模板形参表声明函数声明 其中的模板形参表声明是由一个或多个模板形

33、参组成。每个模板形参具有下面几种形式: (1)typename参数名 (2)class参数名 (3)类型修饰参数名 由此可见,题中的 T是模板形参。故本题应该选择 C。16.使用输入输出操作符 setw,可以控制(分数:2.00)A.输出精度B.输出宽度 C.对齐方式D.填充字符解析:解析 本题考查的知识点是:C+流的操作符。在 C+流中,操作符 setw的作用是设置输入输出宽度。故本题应该选择 B。17.下列字符串中,不可以用作 C+标识符的是(分数:2.00)A.y_2006B._TEST_HC.ReturnD.switch 解析:解析 本题考查的知识点是:标识符。在 C+中,标识符的组成

34、要符合以下 4个规定: (1)标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字符串; (2)标识符不能与任意一个关键字同名; (3)标识符中的字母区分大小写: (4)标识符不宜过长,C+语言一般设定一个标识符的有效长度为 32个字符。 在选项 D) 中,switch 是 C+开关语句的关键字,因此不能用作标识符。故本题应该选择 D。18.字面常量 42、4.2、42L 的数据类型分别是(分数:2.00)A.long、double、intB.long、float、intC.int、double、long D.int、float、long解析:解析 本题考查的知识点是:字面常量。对于

35、整型字面常量,只要没有超出 C+中整数所能表示的范围,C+将自动按整数(int)来存储此数。也可以通过在整型字面常量后添加 u或 1(大、小写均可),来指定按无符号整数(unsigned)或长整数(long)来存储,也可同时使用 u和 1(对排列无要求),来指定按无符号长整数(unsigned long)来存储。对于实型字面常量,C+自动按双精度数(double)来存储。也可通过在实型字面常量后添加 f(大、小写均可),来指定按单精度数(float)来存储。故本题应该选择 C。19.执行下列语句段后,输出字符“*”的个数是 for(int i=50;i1;-i)cout*;(分数:2.00)A

36、.48B.49 C.50D.51解析:解析 本题考查的知识点是:for 循环语句。 for 语句的执行过程是: (1)计算第 1个表达式(在本题中是“int i=50”)的值: (2)计算第 2个表达式(在本题中是“i1”)的值,如果此值不等于 0(结果为真),则转向步骤(3);否则转向步骤(5); (3)执行一遍循环体(在本题中是“cout*;”); (4)计算第 3个表达式(在本题中是“-i”)的值,然后转向步骤(2); (5)结束 for循环。 由此可见,本题循环中 i从 50开始逐次递减,直到 i=1时退出,而此时没有机会执行到循环体,因此执行了 49遍循环体。而循环体中的语句是输出

37、1个字符“*”,所以最终输出了 49个字符“*”,故本题应该选择 B。20.有如下程序段 int i=0,j=1;int void dispa() coutx,; private: int x; ; class B: public A public: B(int i): A(i+10) x=i; void dispb() (dispa(); coutxendl; private: int x; ; int main() B b(2); b.dispb(); return 0; 运行时输出的结果是(分数:2.00)A.10,2B.12,10C.12,2 D.2,2解析:解析 本题考查的知识点是:

38、派生类的构造。执行开始,进入 main()函数。第 1句是声明一个 B类对象 b,并传入构造参数 2,所以执行进入 B的构造函数 B(int i),形参 i为 2。由于 B继承自 A,所以首先执行进入 A的构造函数 A(int,i),形参 i为 2+10=12。函数中只有一条语句 x=i,此时的 x为类 A的私有成员 x,被赋值为 12。执行返回到 B 的构造函数,也是同样一条语句 x=i;,不过这里的 x为类 B的私有成员 x,被赋值为 2。至此 b的构造完成。执行返回主函数第 2行,通过刚创建的对象 b调用其成员函数 dispb()。执行进入 dispb(),第 1条语句是 dispa()

39、;,这是基类 A的公有成员函数,执行进入dispa(),只有一条输出语句,此时由于在基类 A中,所以输出的 x为 A的成员变量 x,因此输出结果是“12,”。执行返回 dispb()函数的第 2条语句,这里输出的 x是派生类 B的成员变量 x,即接着输出的结果是“2”。执行返回到主函数第 3行,此时是一条 return语句,主函数结束,程序执行完毕。注意,如果类中还定义有析构函数的话,此时就会被执行。故本题应该选择 C。32.虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数。而非虚函数不支持多态调用。有如下程序; #i

40、nclude iostream using namespace std; class Base public: virtual void f() cout“f0+“; void g() cout“g0+“; ; class Derived: public Base public: void f() cout“f+“; void g() cout“g+“; ; int main() Derived d; Base *p= P-f(); P-g(); return 0; 运行时输出的结果是(分数:2.00)A.f+g+B.f0+g+C.f+g0+ D.f0+g0+解析:解析 本题考查的知识点是:虚

41、函数与多态性。在题目的主函数中,首先声明了一个派生类对象d,然后声明了一个基类指针 p指向它。接着通过该基类指针,分别调用了 f()函数和 g()函数。由于在基类 Base的定义中,f()函数使用了 virtual关键字,因此它是虚函数,即具有多态性,所以通过指针 p调用的 f()是派生类 Derived中定义的 f()。而 g()不是虚函数,所以通过指针 p调用的是 Base中定义的g()。由此可见,最终输出的结果是“f+g0+”。故本题应该选择 C。33.下面程序中对一维坐标点类 Point进行运算符重载 #include iostream using namespace std; cla

42、ss Point public: Point(int val) x=val; Point return *this; Point operator+(int) Point old = *this; +(*this); return old; int GetX() const return x; private: int x; ; int main() Point a(10); cout (+a).GetX(); cout a+.GetX();return 0; 编译和运行情况是(分数:2.00)A.运行时输出 1011B.运行时输出 1111 C.运行时输出 1112D.编译有错解析:解析 本

43、题考查的知识点是:重载增 1运算符“+”。+既可以是前缀运算符(前增 1),又可以是后缀运算符(后增 1)。为了区分这两种情况,重载这两个运算符时必须在格式上有所区别:重载后缀+时必须多一个虚拟参数:int。在本题中,Point int main() char str100, *p; cout“Please input a string:“; cinstr; p=str; for (int i=0; *p!=/0; p+,i+); coutiendl; return 0; 运行这个程序时,若输入字符串为 abcdefgabcd 则输出结果是(分数:2.00)A.7 B.12C.13D.100解

44、析:解析 本题考查的知识点是:默认的输入格式。C+流所识别的输入数据的类型及其默认的输入格式包括: short、int、long(signed、unsigned)与整型常量同 float、double、long double:与浮点数常量同 char(signed、unsigned):第一个非空白字符 char*(signed、unsigned):从第一个非空白字符开始到下一个空白字符结束 void*:无前缀的 16进制数 bool:VC6.0 中把 0识别为 false,其他的值均识别为 true 注意其中空白字符和非空白字符的概念。空白字符是指空格、Tab 符、回车换行等无显示的字符,否则

45、就是非空白字符。本题的输入数据类型为 char*,因此输入的数据是“从第一个非空白字符开始到下一个空白字符结束”,而输入数据为 abcdefg abcd,其中 abcdefg后有一个空格(空白字符)。所以输入后 str中为字符串“abcdefg”,主函数中接下来 for语句的作用是计算字符串 p的长度。故最终输出的结果是“abcdefg”的长度 7,本题应该选择 A。35.有如下程序: #include iostream using namespace std; class Sample friend long fun(Sample s); public: Sample(long a) x=a

46、; private: long x; ; long fun(Sample s) if(s.x 2) return 1; return s.x * fun(Sample(s.x-1); int main() int stun = 0; for (int i=0; i6; i+) sum += fun(Sample(i); cout sum; return 0; 运行时输出的结果是(分数:2.00)A.120B.16C.154 D.34解析:解析 本题考查的知识点是:友元函数、递归函数。友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但它可以访问该类的所有对象的成员,包括私有成员、保护成

47、员和公有成员。本题中的 fun函数就被声明为 Sample类的友元函数了。因此,在 fun函数中可以直接访问 Sample类对象的私有成员 x。主函数中通过一个 for循环依次以临时构造的 Sample类对象为参数,调用 fun函数,构造参数依次为 05。如果一个函数在其函数体内直接或间接地调用了自己,该函数就称为递归函数。本题中的 fun()函数直接调用了自身,所以它又是递归函数,不难分析其递归性质如下: 因为 Sample类的构造函数只是简单的将构造参数 a赋给成员 x,故可省略不看。通过上述递归定义不难看出,n 取 05 时,fun(n)的值依次为:1,1,2,6,24,120。累加之后结果为 154,故本题应该选择 C。二、B填空题/B(总题数:15,分数:30.00)36.在深度为 7的满二叉树

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

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

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