1、二级 C+笔试-416 及答案解析(总分:81.00,做题时间:90 分钟)一、选择题(总题数:35,分数:57.00)1.关于纯虚函数,下列表述正确的是( )。A) 纯虚函数是没有给出实现版本(即无函数体定义)的虚函数B) 纯虚函数的声明总是以“=0”结束C) 派生类必须实现基类的纯虚函数D) 含有纯虚函数的类不可能是派生类(分数:2.00)A.B.C.D.2.线性表的链式存储结构是一种( )的存储结构。A) 随机存储 B) 顺序存储 C) 索引存储 D) 散列存储(分数:1.00)A.B.C.D.3.下面关于运算符重载的描述错误的是( )。A) 运算符重载不能改变操作数的个数、运算符的优先
2、级、运算符的结合性和运算符的语法结构B) 不是所有的运算符都可以进行重载C) 运算符函数的调用必须使用关键字 operatorD) 在 C+语言中不可通过运算符重载创造出新的运算符(分数:2.00)A.B.C.D.4.在 C+中,实现封装性需借助于 A) 枚举 B) 类 C) 数组 D) 函数(分数:2.00)A.B.C.D.5.n个顶点的强连通图的边数至少有A) n-1 B) n(n-1) C) nD) n+1(分数:1.00)A.B.C.D.6.有以下程序,其输出结果是( )。#include iostreamusing namespace std;int main()char a10=1
3、,2,3,4,5,6,7,8,9,0,*p;int i=8;p=a+i;coutp-3endl;return 0;A) 6789 B) 6 C) 789 D) 6(分数:2.00)A.B.C.D.7.关于静态数据成员的描述中正确的是( )。A) 类的静态数据成员不是类的所有对象共享的数据B) 类的静态数据成员不能被类的成员函数调用C) 类的静态数据成员不能被类的构造函数调用D) 类的静态数据成员必须进行初始化(分数:2.00)A.B.C.D.8.在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值 11,所需的关键码比较次数为( )。A) 2 B) 3
4、 C) 4 D) 5(分数:1.00)A.B.C.D.9.下列叙述中错误的是 A) 公有继承时基类中的 public成员在派生类中仍是 public成员 B) 私有继承时基类中的 protected成员在派生类中仍是 protected成员 C) 私有继承时基类中的 public成员在派生类中是 private成员 D) 保护继承时基类中的 public成员在派生类中是 protected成员(分数:2.00)A.B.C.D.10.能表示 a10 或者 a0 的关系表达式是 _。A) a=10 or a0 B) a10|a0C) a=10|a0 D) a=10void SetValue(int
5、 n1)n=n1;private:int n;int f()MyClass *ptr = new MyClass(45);_;A) MyClass(50) B) SetValue (50)C) ptr-SetValue(50) D) ptr-n=50(分数:1.00)A.B.C.D.12.要定义一个引用变量 p,使之引用类 MyClass的一个对象,正确的定义语句是( )A) MyClass p=MyClass;B) MyClass p=new MyClass;C) MyClassvoid try(int,int,int,int);int main()int x,y,z,r;x=1;y=2;t
6、ry(x,y,z,r);coutrendl;return 0;void try(int x,int y, int z,int r)z = x+y;X = x*x;y = y*y;r = z+x+y;A) 18 B) 9C) 10 D) 不确定(分数:2.00)A.B.C.D.17.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是A)函数调用可以作为独立的语句存在B)函数调用可以无返回值C)函数调用可以出现在表达式中D)函数调用可以作为一个函数的形参(分数:1.00)A.B.C.D.18.栈和队列的共同特点是A)都是先进先出 B)都是先进后出C)只允许在端点处插人和删除元素 D)没有
7、共同点(分数:1.00)A.B.C.D.19.在长度为 64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为_。A) 63B) 64C) 6D) 7(分数:2.00)A.B.C.D.20.C+语言中,表示一条语句结束的标号是A)#B);C)/D)(分数:1.00)A.B.C.D.21.下列叙述中正确的是( )。A) 一个逻辑数据结构只能有一种存储结构B) 数据的逻辑结构属于线性结构,存储结构属于非线性结构C) 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率(分数:2.00)A.B.C.D.2
8、2.下列描述中错误的是A) 派生类可以作为基类派生其他的子类B) 派生类继承基类的所有数据成员C) 派生类可以有多个基类D) 派生类不能继承一些函数成员(分数:1.00)A.B.C.D.23.若定义 cinstr;当输入Object Windows Programming !所得的结果是 str()A) Object Windows Programming! B) ObjectC) Object Windows D) Object Windows Programming(分数:1.00)A.B.C.D.24.若有以下程序:#include iostreamusing namespace std
9、;class sampleprivate:int n;public:sample()sample(int m)n=m;void addvalue(int m)sample s;s.n=n+m;*this=s;void disp()cout“n=“nend1;int main()sample s(10);s.addvalue(5);s.disp();return 0;程序运行后的输出结果是( )。A) n=10 B) n=5 C) n=15 D) n=20(分数:1.00)A.B.C.D.25.以下程序的运行结果是#includeiostream.hvoid sub(int x, int y,
10、int * z) * zyx;void main( ) int a,b,c;sub(10,5,sub(7,a,sub(a,b,cout a “,“ b “,“ C endl;A) 5,2,3 B) 5,12,7 C) 5,12,17 D) 5,2,7(分数:2.00)A.B.C.D.26.分布式数据库系统不具有的特点是A)数据分布性和逻辑整体性 B)位置透明性和复制透明性C)分布性 D)数据冗余(分数:1.00)A.B.C.D.27.下列关于动态联编的描述中,错误的是( )。A) 动态联编是以虚函数为基础的B) 动态联编是在运行时确定所调用的函数代码的C) 动态联编调用函数操作是指向对象的指针
11、或对象引用D) 动态联编是在编译时确定操作函数的(分数:1.00)A.B.C.D.28.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。A) 3 B) 2 C) 1 D) 1/2(分数:2.00)A.B.C.D.29.sizeof(float)是A)一个双精度型表达式B)一个整型表达式C)一种函数调用D)一个不合法的表达式(分数:1.00)A.B.C.D.30.类的成员函数中,只能用于检测输入操作的函数是 _。A) good B) failC) bad D) eof(分数:2.00)A.B.C.D.31.判断字符型变量 ch是否为大写英文字母,应使用表达式A) ch=A public
12、:Time(int hour=0,int min=0,int sec=0)settime(hour,min,sec);void settime(int hour,int min,int sec)h=hour;m=min;s=sec;void show24( )cout(h10?“0“:“)h“:“(m10?“0“:“)m“:“(s10?“0“:“)sendl;void showl2( )int temp=(h= =0 | h= =12)? 12:h%12;cout(temp10?“0“:“)temp“:“(m10?“0“:“)m“:“(s10?“0“:“)s(temp0;void main(
13、)Time t(15,43,21);t.showl2( );t.show24( );(分数:2.00)填空项 1:_43.数组元素 ai是该数组中的第 1 个元素。(分数:1.00)填空项 1:_44.如果在一棵二叉树中有 17个度为 2的结点,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_45.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、 1 和选择排序等。(分数:1.00)填空项 1:_46.在 C+中,若要使派生类中的某些成员不可见,主要是指基类中的 1 成员。(分数:2.00)填空项 1:_47.为了便于对照检查,测试用例应由输入数据和预期的 1
14、两部分组成。(分数:1.00)填空项 1:_48.在测试时,完全不考虑程序的内部结构和内部特征的测试方法称为 1 测试方法。(分数:2.00)填空项 1:_49.有以下程序#include iostreamusing namespace std;class Baseint a;public:Base(int x) a=x; void show() couta; class Derived: public Baseint b;public:Defived(int i):Base(i+ 1 ),b(i) void show() coutb; ;int main()Base b(5),*pb;Der
15、ived d(1);pb=pb-show();return 0;运行后的打印结果是_。(分数:2.00)填空项 1:_50.fstream、ifstream 和 ofstream文件流类的成员函数 1 关闭文件。(分数:1.00)填空项 1:_二级 C+笔试-416 答案解析(总分:81.00,做题时间:90 分钟)一、选择题(总题数:35,分数:57.00)1.关于纯虚函数,下列表述正确的是( )。A) 纯虚函数是没有给出实现版本(即无函数体定义)的虚函数B) 纯虚函数的声明总是以“=0”结束C) 派生类必须实现基类的纯虚函数D) 含有纯虚函数的类不可能是派生类(分数:2.00)A.B. C
16、.D.解析:2.线性表的链式存储结构是一种( )的存储结构。A) 随机存储 B) 顺序存储 C) 索引存储 D) 散列存储(分数:1.00)A.B. C.D.解析:解析 本题考核数据的存储结构。线性表的链式存储结构中的每一个存储节点不仅含有一个数据元素,还包括指针,每一个指针指向一个与本节点有逻辑关系的节点,此类存储方式属于顺序存储。3.下面关于运算符重载的描述错误的是( )。A) 运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构B) 不是所有的运算符都可以进行重载C) 运算符函数的调用必须使用关键字 operatorD) 在 C+语言中不可通过运算符重载创造出
17、新的运算符(分数:2.00)A.B.C. D.解析:解析 例如“:”运算符就不能被重载;通过重载可以创造新的运算方式,但是不能臆造新的运算符;定义的时候必须使用关键字 operator,而调用时可直接使用运算符。4.在 C+中,实现封装性需借助于 A) 枚举 B) 类 C) 数组 D) 函数(分数:2.00)A.B. C.D.解析:解析 类的三大特性是:封装、继承、多态。C+中实现信息的封装主要靠类的封装特性来实现。5.n个顶点的强连通图的边数至少有A) n-1 B) n(n-1) C) nD) n+1(分数:1.00)A.B.C. D.解析:解析:在有向图中,若任意两个顶点都连通,则称该图是
18、强连通图,这样的有向图的形状是环状,因而至少应有 n条边。6.有以下程序,其输出结果是( )。#include iostreamusing namespace std;int main()char a10=1,2,3,4,5,6,7,8,9,0,*p;int i=8;p=a+i;coutp-3endl;return 0;A) 6789 B) 6 C) 789 D) 6(分数:2.00)A. B.C.D.解析:解析 没有下标的数组名是一个指向该数组首元素的指针,本程序实现的功能是将字符“6”及其以后的字符按字符串形式输出。7.关于静态数据成员的描述中正确的是( )。A) 类的静态数据成员不是类的
19、所有对象共享的数据B) 类的静态数据成员不能被类的成员函数调用C) 类的静态数据成员不能被类的构造函数调用D) 类的静态数据成员必须进行初始化(分数:2.00)A.B.C.D. 解析:8.在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值 11,所需的关键码比较次数为( )。A) 2 B) 3 C) 4 D) 5(分数:1.00)A.B.C. D.解析:解析 二分法查找首先用要查找的关键字 k与中间位置的节点关键字相比较,这个中间节点把线性表分成了两个子表,若比较结果相等,则查找完成;若不等,再根据 k与中间节点关键字的比较大小确定下一步查找哪个子表
20、,这样递归下去,直到找到满足条件的节点,或者该线性表中没有这样的节点。本题中第 1次和 15比较:第 2次和 7比较:第 3次和 10比较:第 4次和 12比较;比较后结束,没找到。9.下列叙述中错误的是 A) 公有继承时基类中的 public成员在派生类中仍是 public成员 B) 私有继承时基类中的 protected成员在派生类中仍是 protected成员 C) 私有继承时基类中的 public成员在派生类中是 private成员 D) 保护继承时基类中的 public成员在派生类中是 protected成员(分数:2.00)A.B. C.D.解析:解析 在私有继承方式下,所有的类成
21、员都继承为私有成员。10.能表示 a10 或者 a0 的关系表达式是 _。A) a=10 or a0 B) a10|a0C) a=10|a0 D) a=10void SetValue(int n1)n=n1;private:int n;int f()MyClass *ptr = new MyClass(45);_;A) MyClass(50) B) SetValue (50)C) ptr-SetValue(50) D) ptr-n=50(分数:1.00)A.B.C. D.解析:解析 本题考核对象指针的使用。函数 f()中,首先定义了一个对象指针 ptr,并初始化指向申请的一块内存。在 C+中,
22、通过对象指针访问其成员,要用“-”符号,由此可知,选项 A和 B是错误的。对于选项 D,由于变量 n是 MyClass类的私有成员,所以不能通过对象进行直接调用。因此选项 D也是错误的。选项 C中,采用了“-”符号调用 MyClass类的公有成员函数 SetValue(),并且传入的实参是50,都符合语法规定,所以能实现题目所要求的功能。故本题答案是 C。12.要定义一个引用变量 p,使之引用类 MyClass的一个对象,正确的定义语句是( )A) MyClass p=MyClass;B) MyClass p=new MyClass;C) MyClassvoid try(int,int,int
23、,int);int main()int x,y,z,r;x=1;y=2;try(x,y,z,r);coutrendl;return 0;void try(int x,int y, int z,int r)z = x+y;X = x*x;y = y*y;r = z+x+y;A) 18 B) 9C) 10 D) 不确定(分数:2.00)A.B.C.D. 解析:17.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是A)函数调用可以作为独立的语句存在B)函数调用可以无返回值C)函数调用可以出现在表达式中D)函数调用可以作为一个函数的形参(分数:1.00)A.B.C.D. 解析:解析 本题综
24、合考查函数的调用方式解题要点 函数的形参和实参具有以下特点:形参变量只有在被调用时才分配内存单元,在凋用结束时,即刻释放所分的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应通过预先用赋值,输入等办法使实参获得确定值。实参和形参在数量上,类型上,顺序上应严格一致,否则会发生“类型不匹配”的错误。函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发
25、生改变,而实参中的值不会变化。错解分析 函数调用不可以作为一个函数的形参。考点链接 函数可以嵌套调用,但是不可嵌套定义。18.栈和队列的共同特点是A)都是先进先出 B)都是先进后出C)只允许在端点处插人和删除元素 D)没有共同点(分数:1.00)A.B.C. D.解析:解析 栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种“后进先出”的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种“先进先出”的线性表。19.在长度为 64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为_。A) 63
26、B) 64C) 6D) 7(分数:2.00)A.B. C.D.解析:20.C+语言中,表示一条语句结束的标号是A)#B);C)/D)(分数:1.00)A.B. C.D.解析:解析:C+语言中语句的结束符是分号。21.下列叙述中正确的是( )。A) 一个逻辑数据结构只能有一种存储结构B) 数据的逻辑结构属于线性结构,存储结构属于非线性结构C) 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率(分数:2.00)A.B.C.D. 解析:22.下列描述中错误的是A) 派生类可以作为基类派生其他的子类B) 派
27、生类继承基类的所有数据成员C) 派生类可以有多个基类D) 派生类不能继承一些函数成员(分数:1.00)A.B. C.D.解析:解析 关于 C+语言继承问题的考查。解题要点 C+语言中通常有 3种继承修饰符 public,protected 和 private,限制依次严格,另外对类中的数据和函数也有这 3种修饰符进行限制。一个派生类能不能继承基类的所有数据成员受它们的限制。考点链接 C+语言中继承关系的修饰符 public,protected 和 private的运用。23.若定义 cinstr;当输入Object Windows Programming !所得的结果是 str()A) Obj
28、ect Windows Programming! B) ObjectC) Object Windows D) Object Windows Programming(分数:1.00)A.B. C.D.解析:24.若有以下程序:#include iostreamusing namespace std;class sampleprivate:int n;public:sample()sample(int m)n=m;void addvalue(int m)sample s;s.n=n+m;*this=s;void disp()cout“n=“nend1;int main()sample s(10);
29、s.addvalue(5);s.disp();return 0;程序运行后的输出结果是( )。A) n=10 B) n=5 C) n=15 D) n=20(分数:1.00)A.B.C. D.解析:解析 本题考核 this指针的应用。本程序中 sample类定义了一个 addvalue非静态成员函数。addvalue()函数的原型是:void addvalue(sample *this,int m);,该函数的第 1个参数是执行该类对象的一个指针,即 this指针。由于这个参数是系统隐含的,所以在定义该成员函数时并没有看到这样一个参数。在成员函数的定义体中,可以通过 this访问这一参数。程序的
30、最后输出结果是 15。25.以下程序的运行结果是#includeiostream.hvoid sub(int x, int y, int * z) * zyx;void main( ) int a,b,c;sub(10,5,sub(7,a,sub(a,b,cout a “,“ b “,“ C endl;A) 5,2,3 B) 5,12,7 C) 5,12,17 D) 5,2,7(分数:2.00)A.B. C.D.解析:解析 在 C语言中,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。了解了实参指针变量的改变情况,本题只剩下简单的“加减法”了。26.分布式数据库系统不具
31、有的特点是A)数据分布性和逻辑整体性 B)位置透明性和复制透明性C)分布性 D)数据冗余(分数:1.00)A.B.C.D. 解析:解析 分布式数据库系统具有数据分布性、逻辑整体性、位置透明性和复制透明性的特点,其数据也是分布的;但分布式数据库系统中数据经常重复存储,数据也并非必须重复存储,主要视数据的分配模式而定。若分配模式是一对多,即一个片段分配到多个场地存放,则是冗余的数据库,否则是非冗余的数据库。27.下列关于动态联编的描述中,错误的是( )。A) 动态联编是以虚函数为基础的B) 动态联编是在运行时确定所调用的函数代码的C) 动态联编调用函数操作是指向对象的指针或对象引用D) 动态联编是
32、在编译时确定操作函数的(分数:1.00)A.B. C.D.解析:28.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。A) 3 B) 2 C) 1 D) 1/2(分数:2.00)A.B. C.D.解析:解析 在一个无向图中,所有顶点的度数之和等于所有边数的 2倍。29.sizeof(float)是A)一个双精度型表达式B)一个整型表达式C)一种函数调用D)一个不合法的表达式(分数:1.00)A.B. C.D.解析:解析:该函数用于数据类型和变量。注意:size of 操作符不能用于函数,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、void 类
33、型等。30.类的成员函数中,只能用于检测输入操作的函数是 _。A) good B) failC) bad D) eof(分数:2.00)A.B.C.D. 解析:31.判断字符型变量 ch是否为大写英文字母,应使用表达式A) ch=A public:Time(int hour=0,int min=0,int sec=0)settime(hour,min,sec);void settime(int hour,int min,int sec)h=hour;m=min;s=sec;void show24( )cout(h10?“0“:“)h“:“(m10?“0“:“)m“:“(s10?“0“:“)se
34、ndl;void showl2( )int temp=(h= =0 | h= =12)? 12:h%12;cout(temp10?“0“:“)temp“:“(m10?“0“:“)m“:“(s10?“0“:“)s(temp0;void main( )Time t(15,43,21);t.showl2( );t.show24( );(分数:2.00)填空项 1:_ (正确答案:Time( )h=0;m=0;s=0;)解析:解析 注意缺省构造函数为无参构造函数,且必须为私有数据成员赋初值。43.数组元素 ai是该数组中的第 1 个元素。(分数:1.00)填空项 1:_ (正确答案:i+1)解析:44
35、.如果在一棵二叉树中有 17个度为 2的结点,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:18)解析:解析 根据二叉树的性质:在任意二叉树中,叶子结点总是比度为 2的结点多一个。因此,如果在一棵二叉树中有 17个度为 2的结点,则该二叉树中有 17+118 个叶子结点。45.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、 1 和选择排序等。(分数:1.00)填空项 1:_ (正确答案:交换排序)解析:解析 需要考生记住常见的排序方法。解题要点 常见的排序方法有插入排序(包括简单插入排序法和希尔排序法等)、交换排序(包括冒泡排序和快速排序法等)
36、和选择排序(包括简单选择排序和堆排序等)。考点链接 常见的排序方法及其作用机制和区别。46.在 C+中,若要使派生类中的某些成员不可见,主要是指基类中的 1 成员。(分数:2.00)填空项 1:_ (正确答案:私有)解析:解析 通过在类中设置私有权限,实现数据成员的封装。47.为了便于对照检查,测试用例应由输入数据和预期的 1 两部分组成。(分数:1.00)填空项 1:_ (正确答案:输出结果)解析:解析 本题主要考查测试的步骤。考点链接 测试的基本方法和步骤。48.在测试时,完全不考虑程序的内部结构和内部特征的测试方法称为 1 测试方法。(分数:2.00)填空项 1:_ (正确答案:黑盒)解
37、析:解析 黑盒测试方法只是根据程序功能导出测试用例,完全不考虑程序的内部结构和内部特征。49.有以下程序#include iostreamusing namespace std;class Baseint a;public:Base(int x) a=x; void show() couta; class Derived: public Baseint b;public:Defived(int i):Base(i+ 1 ),b(i) void show() coutb; ;int main()Base b(5),*pb;Derived d(1);pb=pb-show();return 0;运行后的打印结果是_。(分数:2.00)填空项 1:_ (正确答案:2)解析:50.fstream、ifstream 和 ofstream文件流类的成员函数 1 关闭文件。(分数:1.00)填空项 1:_ (正确答案:close)解析: