[计算机类试卷]2007年4月国家二级(C++)笔试真题试卷及答案与解析.doc

上传人:dealItalian200 文档编号:492622 上传时间:2018-11-30 格式:DOC 页数:29 大小:91KB
下载 相关 举报
[计算机类试卷]2007年4月国家二级(C++)笔试真题试卷及答案与解析.doc_第1页
第1页 / 共29页
[计算机类试卷]2007年4月国家二级(C++)笔试真题试卷及答案与解析.doc_第2页
第2页 / 共29页
[计算机类试卷]2007年4月国家二级(C++)笔试真题试卷及答案与解析.doc_第3页
第3页 / 共29页
[计算机类试卷]2007年4月国家二级(C++)笔试真题试卷及答案与解析.doc_第4页
第4页 / 共29页
[计算机类试卷]2007年4月国家二级(C++)笔试真题试卷及答案与解析.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、2007 年 4月国家二级( C+)笔试真题试卷及答案与解析 1 下列叙述中正确的是 ( A)算法的效率只与问题的规模有关,而与数据的存储结构无关 ( B)算法的时间复杂度是指执行算法所需要的计算工作量 ( C)数据的逻辑结构与存储结构是一一对应的 ( D)算法的时间复杂度与空间复杂度一定相关 2 在结构化程序设计中,模块划分的原则是 ( A)各模块应包括尽量多的功能 ( B)各模块的规模应尽量大 ( C)各模块之间的联系应尽量紧密 ( D)模块内具有高内聚度、模块间具有低耦合度 3 下列叙述中正确 的是 ( A)软件测试的主要目的是发现程序中的错误 ( B)软件测试的主要目的是确定程序中错误

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

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

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

5、的析构函数 14 通过运算符重载,可以改变运算符原有的 ( A)操作数类型 ( B)操作数个数 ( C)优先级 ( D)结合性 15 有如下函 数模板: template class T T square(T x)return x*x; 其中 T是 ( A)函数形参 ( B)函数实参 ( C)模板形参 ( D)模板实参 16 使用输入输出操作符 setw,可以控制 ( A)输出精度 ( B)输出宽度 ( C)对齐方式 ( D)填充字符 17 下列字符串中,不可以用作 C+标识符的是 ( A) y_2006 ( B) _TEST_H ( C) Return ( D) switch 18 字面常量

6、 42、 4.2、 42L的数据类型分别是 ( A) long、 double、 int ( B) long、 float、 int ( C) int、 double、 long ( D) int、 float、 long 19 执行下列语句段后,输出字符 “*”的个数是 for(int i=50; i 1; -i)cout*; ( A) 48 ( B) 49 ( C) 50 ( D) 51 20 有如下程序段 int i=0, j=1; int void dispa() cout x ,; private: int x; ; class B: public A public: B(int i

7、): A(i+10) x=i; void dispb() (dispa(); cout x endl; private: int x; ; int main() B b(2); b.dispb(); return 0; 运行时 输出的结果是 ( A) 10, 2 ( B) 12, 10 ( C) 12, 2 ( D) 2, 2 32 虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数。而非虚函数不支持多态调用。有如下程序; #include iostream using namespace std; class Base

8、 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; 运行时输出的结果是 ( A) f+g+ ( B) f0+g+ ( C) f+g0+ ( D) f0+g0+ 33 下面程序中对一维坐标点类 Point进行运算符重载 #include iostream usin

9、g namespace std; class 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; 编译和运行情况是 ( A)运行时输出 1011 ( B)运行时输出 1111 ( C)运行时

10、输出 1112 ( D)编译有错 34 有如下 程序: #include iostream using namespace std; int main() char str100, *p; cout“Please input a string:“; cin str; p=str; for (int i=0; *p!=0; p+,i+); cout i endl; return 0; 运行这个程序时,若输入字符串为 abcdefgabcd则输出结果是 ( A) 7 ( B) 12 ( C) 13 ( D) 100 35 有如下程序: #include iostream using namespa

11、ce 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; return s.x * fun(Sample(s.x-1); int main() int stun = 0; for (int i=0; i 6; i+) sum += fun(Sample(i); cout sum; return 0; 运行时输出的结果是 ( A) 120 ( B) 16 ( C) 154 ( D) 34

12、36 在深度为 7的满二叉树中,度为 2的结 点个数为【 】。 37 软件测试分为白箱 (盒 )测试和黑箱 (盒 )测试。等价类划分法属于【 】测试。 38 在数据库系统中,实现各种数据管理功能的核心软件称为【 】。 39 软件生命周期可分为多个阶段。一般分为定义阶段、开发阶段和维护阶段。编码和测试属于【 】阶段。 40 在结构化分析使用的数据流图 (DFD) 中,利用【 】对其中的图形元素进行确切解释。 41 C+中只有两个逻辑常量: true和【 】。 42 若要访问指针变量 p所指向的数据,应使用表达式【 】。 43 己知一个函 数的原型是: int fn(double x); 若要以

13、5.27为实参调用该函数,应使用表达式【 】。 44 有如下定义: class MA int value; public: MA(int n=0): value(n) ; MA*ta, tb; 其中 MA类的对象名标识符是【 】。 45 如下类定义中包含了构造函数和拷贝构造函数的原型声明,请在横线处填写正确的内容,使拷贝构造函数的声明完整。 Class myClass private: int data; public: myClass(int value); /构造函数 myClass(const【 】 anotherObject); /拷贝构造函数 46 用来派生新类的类称为【 】,而派生

14、出的新类称为它的子类或派生类。 47 有如下程序: #include iostream using namespace std; class CA public: CA() cout A; ) ; class CB:private CA public: CB()cout B; ; int main() CA a; CB b; return 0; 这个程序的输出结果是【 】。 48 若将一个二元运算符重载为类的成员函数,其形参个数应该是【 】个。 49 有如下程序: #include iostream using namespace std; class DA int k; public: DA

15、(int x=1): k(x) DA()cout k; ; int main() DA d=DA(3), DA(3), DA(3); DA*p=new DA2; delete p; return 0; 这个程序的输出结果是【 】。 50 C+语言中的多态性分为编译时的多态性和【 】时的多态性。 2007 年 4月国家二级( C+)笔试真题试卷答案与解析 1 【正确答案】 B 【试题解析】 本题考查数据结构中有关算法的基本知识和概念。数据的结构,直接影响算法的选择和效率。而数据结构包括两方面,即数据的逻辑结构和数据的存储结构。因此,数据的逻辑结构和存储结构都影响算法 的效率。选项 A的说法是错误

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

17、正确答案】 D 【试题解析】 本题考查软件工程中软件设计的概念和原理。人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得到如下的启发式规则: (1)改进软件结构,提高模块独立性。通过模块的分解或合并,力求降低耦合提高内聚。低耦合也就是降低不同模块间相互依赖的紧密程度,高内聚是提高一个模块内各元素彼此结合的紧密程度。 (2)模块的规模应适中。一个模块的规模不应过大,过大的模块往往是 由于分解不够充分:过小的模块开销大于有益操作,而且模块过多将使系统接口复杂。因此过小的模块有时不值得单独存在。 (3)模块的功能应该可以预测,但也要防止模块功能过分局限。如果模块包含的功能太多,则不能体

18、现模块化设计的特点;如果模块的功能过分的局限,使用范围就过分狭窄。 经过上述分析,本题的正确答案是选项 D。 3 【正确答案】 A 【试题解析】 本题考查软件工程中测试的目的和方法。仅就软件测试而言,它的目的是发现软件的中的错误,但是,发现错误并不是最终目的,最终目的是通过测试发现错误之后还必须诊断并 改正错误,这就是调试的目的。由于测试的目标是暴露程序中的错误,从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在软件测试阶段通常由其他人员组成测试小组来完成测试工作。因此,经过上述分析可知选项 A的说法是正确的,而选项 B、 C、 D的说法是错误的。 4 【正确答案】 C 【试题解析

19、】 通常认为,面向对象方法具有封装性、继承性、多态性几大特点。就是这几大特点,为软件开发提供了一种新的方法学。 封装性:所谓封装就是将相关的信息、操作与处理融合在一个内含的部件中 (对象中 )。简单地说,封装就是隐藏信 息。这是面向对象方法的中心,是面向对象程序设计的基础。 继承性:子类具有派生它的类的全部属性 (数据 )和方法,而根据某一类建立的对象也都具有该类的全部,这就是继承性。继承性自动在类与子类间共享功能与数据,当某个类作了某项修改,其子类会自动改变,子类会继承其父类所有特性与行为模式。继承有利于提高软件开发效率,容易达到一致性。 多态性:多态性就是多种形式。不同的对象在接收到相同的

20、消息时,采用不同的动作。例如,一个应用程序包括许多对象,这些对象也许具有同一类型的工作,但是却以不同的做法来实现。不必为每个对象的过程取 一过程名,造成复杂化,可以使过程名复用。同一类型的工作有相同的过程名,这种技术称为多态性。 经过上述分析可知,选项 C的说法是错误的。 5 【正确答案】 D 【试题解析】 本题考查数据结构中队列的基本知识。队列是一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出的特性。在队列中,允许插入元素的一端叫做队尾,允许删除的一端则称为队头。这与日常生活中的排队是一致的,最早进入队列的人最早离开,新来的人总是加入到队尾。因此,本题

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

22、, D的左子树为空,接下来访问 D的右子树,即 Y。遍历完 B 的左子树后,再遍历 B 的右子树,即 E。到此遍历完 A的左子树,接下来遍历 A的右子树。按照同样的规则,首先访问 C,然后遍历 C的左子树,即 F。 C的左子树遍历完,接着遍历 C的右子树。首先访问右子树的根结点 X,然后访问 X的左子树, X的左子树,即 Z,接下来访问 X的右子树,右子树为空。到此,把题目的二叉树进行了一次前序遍历。遍历的结果为 ABDYECFXZ,故本题的正确答案为选项 C。 7 【正确答案】 A 【试题解析】 本题考 查数据结构中二叉树的性质。二叉树满足如下一条性质,即:对任意一棵二叉树,若终端结点 (即

23、叶子结点 )数为 n0,而其度数为 2的结点数为 n2则 n0=n2+1。根据这条性质可知,若二叉树中有 n 个度为 2的结点,则该二叉树中的叶子结点数为 n+1。因此,本题的正确答案是选项 A。 8 【正确答案】 B 【试题解析】 本题考查数据库的关系运算。两个关系的并运算是指将第一个关系的元组加到第二个关系中,生成新的关系。因此,并运算不改变关系表中的属性个数,也不能减少元组个数。 两个关系的交运算是包含同时出现在第一和第二 个关系中的元组的新关系。因此,交运算不改变关系表中的属性个数,但能减少元组个数。 投影是一元关系操作。投影操作选取关系的某些属性,这个操作是对一个关系进行垂直分割,消

24、去某些属性,并重新安排属性的顺序,再删除重复的元组。因此,投影运算既可以减少关系表中的属性个数,也可以减少元组个数。 两个关系的笛卡儿乘积是指一个关系中的每个元组和第二个关系的每个元组连接。因此,笛卡儿乘积运算能够增加元组属性的个数。 经过上述分析可知,在上述四种运算中,交运算不改变关系表中的属性个数但能减少元组个数。因此,正确答案是选项 B。 9 【正确答案】 C 【试题解析】 E-R模型中,有三个基本的抽象概念:实体、联系和属性。 E-R图是 E-R模型的图形表示法,在 E-R图中,用矩形框表示实体,菱形框表示联系,椭圆形框表示属性。因此,本题的正确答案是选项 C。 10 【正确答案】 A

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

26、,设计一个结构合理、使用方便、效率较高的数据库及其应用系统,数据库设计包含两方面的内容:一是结构设计,也就是设计数据库框架或数据库结构;二是行为设计,即设计基于数据库的各类应用程序、事务等。因此,选项 C的说法是错误的。 数据库系统除了数据库管理软件之外,还必须有其他相关软件的支持。这些软件包括操作系统、编译系统、应用软件开发工具等。对于大型的多用户数据库系统和网络数据库系统,还需要多用户系统软件和网络系统软件的支持。因此,选项D的说法是正确的。 因此, 本题的正确答案是选项 A。 11 【正确答案】 B 【试题解析】 本题考查的知识点是;内联函数。 C+引入内联 (inline)函数的原因是

27、用它来取代 C中的预处理宏函数,即带参数的宏。故本题应该选择 B。 12 【正确答案】 A 【试题解析】 本题考查的知识点是:类的定义。类中缺省的访问权限是私有的(private),所以选项 B) 不正确:类的数据成员和函数成员的访问控制权限均可被声明为公有 (public)、私有 (priate)和保护 (protected)中的任意一种,所以选项 C) 不正确; 成员函数的实现即可以在类体内定义,也可以在类体外定义,所以选项D) 不正确。故本题应该选择 A。 13 【正确答案】 D 【试题解析】 本题考查的知识点是;派生类的构造函数和析构函数。在销毁派生类对象时,析构函数的执行;过程与构造

28、函数严格相反,即; (1)对派生类新增普通成员进行清理; (2)调用成员对象析构函数,对派生类新增的成员对象进行清理; (3)调用基类析构函数,对基类进行清理。故本题应该选择 D。 14 【正确答案】 A 【试题解析】 本题考查的知识点是:运算符重载。重载的运算符具有保 持其原有的操作数个数、优先级和结合性不变的特性。故本题应该选择 A。 15 【正确答案】 C 【试题解析】 本题考查的知识点是:函数模板。声明一个函数模板的格式是: template模板形参表声明函数声明 其中的模板形参表声明是由一个或多个模板形参组成。每个模板形参具有下面几种形式: (1)typename参数名 (2)cla

29、ss参数名 (3)类型修饰参数名 由此可见,题中的 T 是模板形参。故本题应该选择 C。 16 【正确答案】 B 【试题解析】 本题 考查的知识点是: C+流的操作符。在 C+流中,操作符 setw的作用是设置输入输出宽度。故本题应该选择 B。 17 【正确答案】 D 【试题解析】 本题考查的知识点是:标识符。在 C+中,标识符的组成要符合以下 4个规定: (1)标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字符串; (2)标识符不能与任意一个关键字同名; (3)标识符中的字母区分大小写: (4)标识符不宜过长, C+语言一般设定一个标识符的有效长度为 32个字符。 在选项 D)

30、 中, switch是 C+开关语句的关键字,因 此不能用作标识符。故本题应该选择 D。 18 【正确答案】 C 【试题解析】 本题考查的知识点是:字面常量。对于整型字面常量,只要没有超出 C+中整数所能表示的范围, C+将自动按整数 (int)来存储此数。也可以通过在整型字面常量后添加 u或 1(大、小写均可 ),来指定按无符号整数 (unsigned)或长整数 (long)来存储,也可同时使用 u 和 1(对排列无要求 ),来指定按无符号长整数(unsigned long)来存储。对于实型字面常量, C+自动按双精度数 (double)来存储。也可通过在实型字面常量 后添加 f(大、小写均

31、可 ),来指定按单精度数 (float)来存储。故本题应该选择 C。 19 【正确答案】 B 【试题解析】 本题考查的知识点是: for循环语句。 for语句的执行过程是: (1)计算第 1个表达式 (在本题中是 “int i=50”)的值: (2)计算第 2个表达式 (在本题中是 “i 1”)的值,如果此值不等于 0(结果为真 ),则转向步骤 (3);否则转向步骤 (5); (3)执行一遍循环体 (在本题中是 “cout *; ”); (4)计算第 3个表达式 (在本题中是 “-i”)的值,然后转向步骤 (2); (5)结束 for循环。 由此可见,本题循环中 i从 50开始逐次递减,直到

32、i=1时退出,而此时没有机会执行到循环体,因此执行了 49遍循环体。而循环体中的语句是输出 1个字符“*”,所以最终输出了 49个字符 “*”,故本题应该选择 B。 20 【正确答案】 A 【试题解析】 本题考查的知识点是:指针和引用。指针声明的一般形式为: 数据类型 *声明的指针变量名; 引用声明的一般形式为: 数据类型 &声明的引用变量名 =被引用的变量名; 引用声明时必须初始化,而指针则可有可无。通过引用来改变其 所引用的对象,直接赋值即可,而通过指针改变其所指对象则须使用一元运算符 “*”。在本题中,语句 就是一条合法的引用声明语句,使变量 i被 r所引用。语句 通过引用 r将变量 j

33、的值赋给变量 i。语句 声明了指针变量 p,并初始化指向变量 i。而语句 中的 *p代表了变量 i,欲将 &r(变量 r的地址值 )赋给 *p(变量 i),这会引起 VC6编译器产生一条类型不匹配的错误 “无法将类型 int*转换为 int”。故本题应该选择A。 21 【正确答案】 C 【试题解析】 本题考查的知识点是:函数参数的传递方式。 C+的默认参数传递方 式是传值,即将实参值的副本传递 (拷贝 )给被调用函数的形参。如果需要传地址,可通过传递指针、引用或数组类型的参数来实现。传值时,对形参的改变不会影响到实参;而传地址,则会同时改变实参。本题中形参 a是普通参数,即传值调用,函数中对

34、a增 1不会影响到实参 x的值;而形参 b 是引用,即传址调用,函数中对 b 增 1同时也改变了实参 y的值 (y 也增 1了 )。故最终结果是 0和2,应该选择 C。 22 【正确答案】 B 【试题解析】 本题是一道陷阱题,看似考查类的静态成员变量,实际考查的是:变量作用域的屏蔽效应。在 C+中,当标 识符的作用域发生重叠时,在一个函数(或块 )中声明的标识符可以屏蔽函数 (或块 )外声明的标识符或全局标识符。本题从行 “class A“到行 “int A:a=0; ”都是类 A的声明部分。行 “A obj; ”声明了一个类 A的全局对象 obj,由于没指定构造参数,所以构造时构造函数的形参

35、 a取默认值 2。构造函数中首先调用了 init函数,将静态成员变量 a赋为 1,然后将 a增 1。许多考生此时会很自然地认为是将类 A的静态成员变量 a增 1了,从而导致选择 C这个错误答案。其实,此时静态成员变量 a被构造函数的形参 a所屏蔽,所以 a+改 变的是形参 a的值,对静态成员变量 a没有影响,其值还是被 init函数所改成的值 1。故本题应该选择 B。 23 【正确答案】 C 【试题解析】 本题考查的知识点是:继承和派生。无论使用哪种继承方式,派生类中的成员都不能访问基类中的私有成员,而可以访问基类中的公有成员和保护成员,因此选项 A) 不正确。在 C+中,只有抽象类不能被实例

36、化,而虚基类不一定非得是抽象类,所以选项 B) 不正确。在派生类中可以重新定义从基类继承下来的虚函数,也可以不重新定义,因此选项 D) 不正确。故本题应该选择 C。 24 【正确 答案】 C 【试题解析】 本题考查的知识点是:运算符重载。在 C+中,只有 .、 .*、 -*、 :、 ?:这五个运算符不能重载。故本题应该选择 C。 25 【正确答案】 A 【试题解析】 本题考查的知识点是:函数模板。声明一个函数模板的格式是: template模板形参表声明函数声明 其中的模板形参表声明是由一个或多个模板形参组成。每个模板形参具有下面几种形式: (1)typename参数名 (2)class参数名

37、 (3)类型修饰参数名 故本题应该选择 A。 26 【正确答案】 C 【试题解析】 本题考查的知识点是:预定义流对象。 C+流有 4个预定义的流对象,它们的名称及与之联系的 I/0 设备如下: cin 标准输入 cout 标准输出 cerr 标准出错信息输出 clog 带缓冲的标准出错信息输出 故本题应该选择 C。 27 【正确答案】 D 【试题解析】 本题考查的知识点是:构造函数和析构函数。一个类可以有多个构造函数,但只能有一个析构函数。每一个对象在被创建的时候,都会隐含调用众多构造函数中的一个,而在被销毁的时候,又会隐含调用唯 一的那个析构函数。因此,解此类题目只要找准创建时调用的是哪个构

38、造函数,和对象何时被销毁即可。本题只有主函数中创建了一个对象 A,并使用了构造参数 3,因此会隐含调用test(int a)这个构造函数,输出一个 3。接下来主函数结束,对象 A被销毁,所以又隐含调用 test()析构函数,输出一个 destructor。故本题应该选择 D。 28 【正确答案】 B 【试题解析】 本题考查的知识点是:对象的构造。本题一共声明了 1个 MyClass对象 a, 1个包含 2个 MyClass对象的数组 b和 1个包含 2个 MyClass对象指针的数组 p。所以一共创建了 3个 MyClass类的对象 (声明对象指针时并不会创建对象 ),即调用了 3次构造函数。

39、故本题应该选择 B。 29 【正确答案】 C 【试题解析】 本题考查的知识点是:静态成员,对象的构造,对象的生存周期。静态成员的特性是不管这个类创建了多少个对象,它的静态成员都只有一个拷贝(副本 ),这个副本被所有属于这个类的对象共享。本题的 Point类中就定义了一个静态成员变量 number。其初始值为 0,每次构造则自动增 1,析构则自动减 1,所以 number是 Point 类对象的计数值。 在主函数中,第 1行定义了 1个 Point类型指针 ptr,这并不会构造 Point类对象,因此 number值为 0;第 2行定义了 2个 Point对象,所以此时 number值为 2;第

40、 3 6行是一个语句块,其中通过 new运算符又定义了 1个包含 3个 Point对象元素的数组,由于是动态创建的,所以其生命周期只能通过 delete运算符来结束,否则会一直占据内存直到程序结束,所以现在 number的值为 5:第 7行定义了 1个 Point对象 C, number的值变为6;第 8行输出 number的内容,所以最后输出的结果是 6。故本题应该 选择 C。 30 【正确答案】 A 【试题解析】 本题考查的知识点是:多态性。在 C+中,一个基类指针 (或引用 )可以用于指向它的派生类对象,而且通过这样的指针 (或引用 )调用虚函数时,被调用的是该指针 (或引用 )实际所指

41、向的对象类的那个重定义版本。基类中的实函数也可以在派生类中重定义,但重定义的函数仍然是实函数。在实函数的情况下,通过基类指针 (或引用 )所调用的只能是基类的那个函数版本,无法调用到派生类中的重定义函数。本题中的 show函数就是被重定义的实函数,所以通过基类指针pb所调用的是基类的版本,即 输出 a和 b 的值 10,20。故应该选择 A。 31 【正确答案】 C 【试题解析】 本题考查的知识点是:派生类的构造。执行开始,进入 main()函数。第 1句是声明一个 B 类对象 b,并传入构造参数 2,所以执行进入 B的构造函数 B(int i),形参 i为 2。由于 B 继承自 A,所以首先

42、执行进入 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();,这是基类 A的公有成员函数,执行进入 dispa(),只有一条输出语句,此时由于在基类 A中,所以输出的 x为 A的成员变量 x,因此输出结果是“12, ”。执行返回 dispb()函数的第

43、2条语句,这里输出的 x是派生类 B 的成员变量 x,即接着输出的结果是 “2”。执行返回到主函数第 3行,此时是一条 return语句,主函数结束,程序执行完毕。注意,如果类中还定义有析构函数的话,此时就会被执行。 故本题应该选择 C。 32 【正确答案】 C 【试题解析】 本题考查的知识点是:虚函数与多态性。在题目的主函数中,首先声明了一个派生类对象 d,然后声明了一个基类指针 p指向它。接着通过该基类指针,分别调用了 f()函数和 g()函数。由于在基类 Base的定义中, f()函数使用了virtual 关键字,因此它是虚函数,即具有多态性,所以通过指针 p 调用的 f()是派生类 D

44、erived中定义的 f()。而 g()不是虚函数,所以通过指针 p 调用的是 Base中定义的 g()。由此可见,最终输出的结果是 “f+g0+”。故本题 应该选择 C。 33 【正确答案】 B 【试题解析】 本题考查的知识点是:重载增 1运算符 “+”。 +既可以是前缀运算符 (前增 1),又可以是后缀运算符 (后增 1)。为了区分这两种情况,重载这两个运算符时必须在格式上有所区别:重载后缀 +时必须多一个虚拟参数: int。在本题中, Point& operator+()重载的是前缀形式,而 Point operator+(int)则是后缀形式。所以,主函数中第 1条输出语句 cout

45、(+a) GetX();等价于 couta.operator+().GetX();,即输出 11,此时 a.x的值为 11。而第 2条输出语句cout a+.GetX();等价于 cout a.operator+(0).GetX(); (式中的 0可以是任意整数 ),在这个后缀 +的重载函数中,首先创建了一个 Point对象 old保存自身 (*this),然后通过语句 +(*this;调用前缀 +的重载函数,此时自身虽然已经改变,但它返回的是改变前保存的 old对象,因此还是输出 11。故本题应该选择B。 34 【正确答案】 A 【试题解析】 本题考查的知识点是:默认的输入格 式。 C+流所

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

47、char*,因此输入的数据是 “从第一个非空白字符开始到下一个空白字符结束 ”,而输入数据为abcdefg abcd,其中 abcdefg后有一个空格 (空白字符 )。所以输入后 str中为字符串“abcdefg”,主函数中接下来 for语句的作用是计算字符串 p 的长度。故最终输出的结果是 “abcdefg”的长度 7,本题应该选择 A。 35 【正确答案】 C 【试题解析】 本题考查的知识点是:友元函数、递归函数。友元函数不是当前类的成员函数,而是 独立于当前类的外部函数,但它可以访问该类的所有对象的成员,包括私有成员、保护成员和公有成员。本题中的 fun 函数就被声明为 Sample类的

48、友元函数了。因此,在 fun函数中可以直接访问 Sample类对象的私有成员x。主函数中通过一个 for循环依次以临时构造的 Sample类对象为参数,调用 fun函数,构造参数依次为 0 5。如果一个函数在其函数体内直接或间接地调用了自己,该函数就称为递归函数。本题中的 fun()函数直接调用了自身,所以它又是递归函数,不难分析其递归性质如下: 因为Sample类的构造函数只是简单的将 构造参数 a赋给成员 x,故可省略不看。通过上述递归定义不难看出, n 取 0 5时, fun(n)的值依次为: 1, 1, 2, 6, 24,120。累加之后结果为 154,故本题应该选择 C。 36 【正确答案】 63或 26-1 【试题解析】 本题考查数据结构中满二叉树的性质。在满二叉树中,每层结点都是满的,即每层结点都具有最大结点数。深度为 k 的满二叉树,一共有 2k-1个结点,其中包括度为 2的结点和叶子结点。因此,深度为 7的满二叉树,一共有 27-1个结点,即 127个结

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

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

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