1、二级 C+笔试 339及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.不能实现函数之间数据传递的是( )。(分数:2.00)A.全局变量B.局部变量C.函数接D.函数返回值2.一个非空广义表的表头( )。(分数:2.00)A.不可能是子表B.只能是子表C.只能是原子D.可以是子表或原子3.表示 C+类中保护成员的关键字是( )。(分数:2.00)A.publicB.privateC.virtualD.Rrotected4.类型修饰符 unsigned修饰( )是错误的。(分数:2.00)A.charB.intC.long intD.f
2、loat5.下列有关析构函数的叙述,错误的是( )。(分数:2.00)A.析构函数可以重载B.析构函数没有参数C.析构函数没有返回值类型D.析构函数只在对象生命同期结束的时候,由系统自动调用6.设有一个 10阶的对称矩阵 A1010,采用压缩存储方式按行将矩阵中下三角部分的元素存入一维数组 B中,A00存入 B0中,则 A85在 B中( )位置。(分数:2.00)A.32B.33C.41D.657.在 int a=3,*p=&a 中,*p 的值是( )。(分数:2.00)A.变量 s的地址值B.无意义C.变量 p的地址D.38.采用重载的目的在于( )。(分数:2.00)A.实现共享B.减少空
3、间C.递归调用D.嵌套调用9.适于对动态查找表进行高效率查找的组织结构是( )。(分数:2.00)A.有序表B.分块有序表C.三叉排序树D.线性链表10.派生类构造函数的调用顺序是先调用( )。(分数:2.00)A.派生类的构造函数B.基类的构造函数C.派生类的析构函数D.基类的析构函数11.下列不是构造函数的特征的是( )。(分数:2.00)A.函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认值D.构造函数可以有返回值12.下列关于构造函数的叙述错误的是( )。(分数:2.00)A.构造函数的作用就是在对象被创建时利用特定的值构造对象B.构造函数在被创建的时候由系统自动调用C.构
4、造函数可以被重载D.构造函数可以与类名不一样13.n个顶点的连通图至少有( )条边。(分数:2.00)A.n-1B.nC.n+1D.014.若希望派生类的对象不能访问基类中公有成员,应在( )方式下完成。(分数:2.00)A.公有继承B.私有继承C.保护继承D.友元继承15.下面程序有注释的语句中,错误的语句是( )。 #include iostream using namespace std; class A int a; public: void show A()cout“this is A!“; ; class B:public A int b; public: void showB()
5、cout“this is B!“; ; void main() A ia,*piA; B ib,*piB; piA=&ia; /第一个测试语句 piA=&ib; /第二个测试语句 piB=&ia; /第三个测试语句 piB=&ib; /第四个测试语句 (分数:2.00)A.第一个测试语句B.第二个测试语句C.第三个测试语句D.第四个测试语句16.用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)进行排序时,序列的变化情况如下: 20,15,21,25,47,27,68,35,84 15,20,21,25,35,27,47,68,84 15,20,2 重,25,2
6、7,35,47,68,84 则所采用的排序方法是( )。(分数:2.00)A.选择排序B.希尔排序C.归并排序D.快速排序17.如果函数没有返回值,对于函数的返回值说明可以是( )。(分数:2.00)A.可能没有返回值说明B.用 void说明C.用 const说明D.返回值可以是任意类型18.设数组 datam作为循环队列 SQ的存储空间,front 为队头指针,rear 为队尾指针,则执行出队操作后其头指针 front值为( )。(分数:2.00)A.front=front+1B.front=(front+1)%(m-1)C.front=(front-1)%mD.front=(front+1
7、)%m19.下列各函数的说明中,表示纯虚函数的是( )。(分数:2.00)A.virtual int fun()B.void fun()=0C.virtual fun()=0D.void fun()20.在 int a5=1,3,5;中,a1的值是( )。(分数:2.00)A.0B.1C.3D.521.下面程序有注释的语句中,错误的语句是( )。 #include iostream using namespace std; class A int a; public: void show A()cout“this is A!“; ; class B:public A int b; public
8、: void show B()cout “this is B!“; ; void main() A ia,*piA; B ib,*piB; piA=ia; /第一个测试语句 piA=&ib; /第二个测试语句 piA-showA(); /第三个测试语句 piA-showB(); /第四个测试语句 (分数:2.00)A.第一个测试语句B.第二个测试语句C.第三个测试语句D.第四个测试语句22.下面能表示一个正确的类的是( )。(分数:2.00)A.class AB.class A()C.class AD.class A23.下列属于引用调用的是( )。(分数:2.00)A.形参是指针,实参是地址
9、值B.形参和实参都是变量C.形参是数组名,实参是数组名D.形参是引用,实参是变量24.不是面向对象系统包含的要素的是( )。(分数:2.00)A.重载B.对象C.类D.继承25.由两个栈共享一个向量空间的好处是( )。(分数:2.00)A.减少存取时间,降低下溢发生的几率B.节省存储空间,降低上溢发生的几率C.减少存取时间,降低上溢发生的几率D.节省存储空间,降低下溢发生的几率26.当一个函数无返回值时,定义它的函数类型应是( )。(分数:2.00)A.voidB.任意C.intD.无27.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。(分数:2.00)A.3B.2C.1D.1/2
10、28.在多重继承中,派生类对于基类构造函数之间用( )分隔。(分数:2.00)A.:B.;C.D.:29.C+模板包括( )。(分数:2.00)A.类模板和函数模板B.模板类和模板函数C.类和函数D.对象和函数30.与 C+语句 endl等价的语句是( )。(分数:2.00)A./nB./oC.returnD./x31.不定长文件是指( )。(分数:2.00)A.文件的长度不固定B.记录的长度不固定C.字段的长度不固定D.关键字项的长度不固定32.C+对 C语言作最大的改进是( )。(分数:2.00)A.增加了一些新的运算符B.允许函数重载C.规定函数说明必须用原型D.引进了类和对象的概念33
11、.在函数说明时,下列不必要的是( )项。(分数:2.00)A.函数参数的类型B.函数参数名字C.函数的名字D.返回值表达式34.设 F是一个森林,B 是由 F转换得到的二叉树,F 中有几个非叶结点,则 B中右指针域为空的结点有( )个。(分数:2.00)A.n-1B.nC.n+1D.n+235.下面对于静态数据成员描述中,正确的是( )。(分数:2.00)A.静态数据成员可以在类体内初始化B.静态数据成员不可以在类体内初始化C.静态数据成员不能受 protected控件符控制D.静态数据成员可以直接用类名调用二、B填空题/B(总题数:15,分数:30.00)36.假设为循环队列分配的向量空间为
12、 Q20,若队列的长度和队头指针值分别为 13和 17,则当前尾指针的值为U 【1】 /U。(分数:2.00)填空项 1:_37.广义表的深度是指U 【2】 /U。(分数:2.00)填空项 1:_38.栈顶的位置是随着U 【3】 /U操作而变化的。(分数:2.00)填空项 1:_39.在单链表上难以实现的排序方法有希尔排序、U 【4】 /U和堆排序。(分数:2.00)填空项 1:_40.在有序表(12,24,36,48,60,72,84)中二分查找关键字 72时所需进行的关键字比较次数为U 【4】 /U。(分数:2.00)填空项 1:_41.在 C+类中,默认的数据成员的访问权限是U 【6】
13、/U。(分数:2.00)填空项 1:_42.C+中的多态分为运行时的多态性及U 【7】 /U时的多态性。(分数:2.00)填空项 1:_43.构造函数的主要作用是U 【8】 /U。(分数:2.00)填空项 1:_44.标识虚函数的关键字是U 【9】 /U。(分数:2.00)填空项 1:_45.类的静态成员的定义说明语句不能出现在类的外部,而且只能定义U 【10】 /U次。(分数:2.00)填空项 1:_46.已知 p是一个指向类 A公有数据成员的指针,a 是类 A的一个对象,如果要给 p所指向的成员赋值为5,语句应写为U 【11】 /U。(分数:2.00)填空项 1:_47.在 C+中,动态创
14、建对象可以使用U 【12】 /U操作符来完成。(分数:2.00)填空项 1:_48.在 C+中,若要使派生类中的某些成员不可见,主要是指基类中的U 【13】 /U成员。(分数:2.00)填空项 1:_49.程序的输出结果是U 【14】 /U。 #include iostream using namespace std; class A int x; public: A(int x=1):x(x)coutx; ; void main() A a,b(2),c(3); (分数:2.00)填空项 1:_50.程序的输出结果是U 【15】 /U。 #include iostream using nam
15、espace std; class A public: A()a=b=2; A(int i,int j)a=i;b=j; void display()coutab; private: int a,b; ; void main() A m,n(4,8); mdisplay(); ndisplay(); (分数:2.00)填空项 1:_二级 C+笔试 339答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.不能实现函数之间数据传递的是( )。(分数:2.00)A.全局变量B.局部变量 C.函数接D.函数返回值解析:解析 局部变量只在局部有效。
16、2.一个非空广义表的表头( )。(分数:2.00)A.不可能是子表B.只能是子表C.只能是原子D.可以是子表或原子 解析:解析 一个非空广义表的表头可以是子表或原子。3.表示 C+类中保护成员的关键字是( )。(分数:2.00)A.publicB.privateC.virtualD.Rrotected 解析:解析 保护成员的语法。4.类型修饰符 unsigned修饰( )是错误的。(分数:2.00)A.char B.intC.long intD.float解析:解析 没有 unsigned char这种数据类型。5.下列有关析构函数的叙述,错误的是( )。(分数:2.00)A.析构函数可以重载
17、 B.析构函数没有参数C.析构函数没有返回值类型D.析构函数只在对象生命同期结束的时候,由系统自动调用解析:解析 析构函数不可以重载。6.设有一个 10阶的对称矩阵 A1010,采用压缩存储方式按行将矩阵中下三角部分的元素存入一维数组 B中,A00存入 B0中,则 A85在 B中( )位置。(分数:2.00)A.32B.33C.41 D.65解析:解析 设有一个 10阶的对称矩阵 A1010,采用压缩存储方式按行将矩阵中下三角部分的元素存入一维数组 B中,A00存入 B0中,则 A85在 B中 41=1+2+3+4+ 5+6+7+8+5位置。7.在 int a=3,*p=&a 中,*p 的值是
18、( )。(分数:2.00)A.变量 s的地址值 B.无意义C.变量 p的地址D.3解析:解析 *p 表示指针 p指向的内容,而语句*p=&a 将 a的地址传递给*p。8.采用重载的目的在于( )。(分数:2.00)A.实现共享 B.减少空间C.递归调用D.嵌套调用解析:解析 重载是实现函数名共享的机制。9.适于对动态查找表进行高效率查找的组织结构是( )。(分数:2.00)A.有序表B.分块有序表C.三叉排序树 D.线性链表解析:解析 适于对动态查找表进行高效率查找的组织结构是三叉排序树。10.派生类构造函数的调用顺序是先调用( )。(分数:2.00)A.派生类的构造函数B.基类的构造函数 C
19、.派生类的析构函数D.基类的析构函数解析:解析 派生类在构造时,先调用基类的构造函数。11.下列不是构造函数的特征的是( )。(分数:2.00)A.函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认值D.构造函数可以有返回值 解析:解析 构造函数不能有返回值。12.下列关于构造函数的叙述错误的是( )。(分数:2.00)A.构造函数的作用就是在对象被创建时利用特定的值构造对象B.构造函数在被创建的时候由系统自动调用C.构造函数可以被重载D.构造函数可以与类名不一样 解析:解析 构造函数必须与类名相同。13.n个顶点的连通图至少有( )条边。(分数:2.00)A.n-1 B.nC.n+
20、1D.0解析:解析 n 个顶点的连通图至少有 n-1条边。14.若希望派生类的对象不能访问基类中公有成员,应在( )方式下完成。(分数:2.00)A.公有继承B.私有继承C.保护继承D.友元继承 解析:解析 没有友元继承这种继承方式。15.下面程序有注释的语句中,错误的语句是( )。 #include iostream using namespace std; class A int a; public: void show A()cout“this is A!“; ; class B:public A int b; public: void showB()cout“this is B!“;
21、; void main() A ia,*piA; B ib,*piB; piA=&ia; /第一个测试语句 piA=&ib; /第二个测试语句 piB=&ia; /第三个测试语句 piB=&ib; /第四个测试语句 (分数:2.00)A.第一个测试语句B.第二个测试语句C.第三个测试语句 D.第四个测试语句解析:解析 派生类的指针不能指向基类。16.用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)进行排序时,序列的变化情况如下: 20,15,21,25,47,27,68,35,84 15,20,21,25,35,27,47,68,84 15,20,2 重,25
22、,27,35,47,68,84 则所采用的排序方法是( )。(分数:2.00)A.选择排序B.希尔排序C.归并排序D.快速排序 解析:解析 快速排序的基本思想是基于分治策略的。对于输入的子序列 Lpr,如果规模足够小则直接进行排序,否则分三步处理: 分解(Divide):将输入的序列 Lpr划分成两个非空子序列Lpq和 Lq+1r,使 Lpq中任一元素的值不大于 Lq+1r中任一元素的值。 递归求解(Conquer):通过递归调用快速排序算法分别对 Lpq和 Lq+1r进行排序。 合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在 Lpq和 Lq +1r都排好序后不需要执行
23、任何计算 Lpr)就已排好序。17.如果函数没有返回值,对于函数的返回值说明可以是( )。(分数:2.00)A.可能没有返回值说明B.用 void说明 C.用 const说明D.返回值可以是任意类型解析:解析 如果函数没有返回值,则对于函数的返回值说明用 void。18.设数组 datam作为循环队列 SQ的存储空间,front 为队头指针,rear 为队尾指针,则执行出队操作后其头指针 front值为( )。(分数:2.00)A.front=front+1B.front=(front+1)%(m-1)C.front=(front-1)%mD.front=(front+1)%m 解析:解析 设
24、数组 datam作为循环队列 SQ的存储空间,front 为队头指针,rear 为队尾指针,则执行出队操作后其头指针 front值为 front=(front+1)%m。19.下列各函数的说明中,表示纯虚函数的是( )。(分数:2.00)A.virtual int fun()B.void fun()=0C.virtual fun()=0 D.void fun()解析:解析 纯虚函数的语法。20.在 int a5=1,3,5;中,a1的值是( )。(分数:2.00)A.0B.1C.3 D.5解析:解析 数组的下标是从 0开始的。21.下面程序有注释的语句中,错误的语句是( )。 #include
25、 iostream using namespace std; class A int a; public: void show A()cout“this is A!“; ; class B:public A int b; public: void show B()cout “this is B!“; ; void main() A ia,*piA; B ib,*piB; piA=ia; /第一个测试语句 piA=&ib; /第二个测试语句 piA-showA(); /第三个测试语句 piA-showB(); /第四个测试语句 (分数:2.00)A.第一个测试语句 B.第二个测试语句C.第三个测
26、试语句D.第四个测试语句解析:解析 ia 应进行取地址操作。22.下面能表示一个正确的类的是( )。(分数:2.00)A.class AB.class A()C.class AD.class A 解析:解析 类声明的格式。23.下列属于引用调用的是( )。(分数:2.00)A.形参是指针,实参是地址值B.形参和实参都是变量C.形参是数组名,实参是数组名D.形参是引用,实参是变量 解析:解析 当引用作函数的参数时,形参是引用,实参是变量,而不是取地址符。24.不是面向对象系统包含的要素的是( )。(分数:2.00)A.重载 B.对象C.类D.继承解析:解析 重载不是面向对象的机制。25.由两个栈
27、共享一个向量空间的好处是( )。(分数:2.00)A.减少存取时间,降低下溢发生的几率B.节省存储空间,降低上溢发生的几率 C.减少存取时间,降低上溢发生的几率D.节省存储空间,降低下溢发生的几率解析:解析 由两个栈共享一个向量空间的好处是节省存储空间,降低上溢发生的几率。26.当一个函数无返回值时,定义它的函数类型应是( )。(分数:2.00)A.void B.任意C.intD.无解析:解析 函数返回值类型 void,表示函数没有返回值。27.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。(分数:2.00)A.3B.2 C.1D.1/2解析:解析 在一个无向图中,所有顶点的度数之
28、和等于所有边数的 2倍。28.在多重继承中,派生类对于基类构造函数之间用( )分隔。(分数:2.00)A.: B.;C.D.:解析:解析 派生的语法。29.C+模板包括( )。(分数:2.00)A.类模板和函数模板 B.模板类和模板函数C.类和函数D.对象和函数解析:解析 C+模板包括类模板和函数模板。30.与 C+语句 endl等价的语句是( )。(分数:2.00)A./n B./oC.returnD./x解析:解析 endl 与/n的作用相同。31.不定长文件是指( )。(分数:2.00)A.文件的长度不固定B.记录的长度不固定 C.字段的长度不固定D.关键字项的长度不固定解析:解析 不定
29、长文件是指记录的长度不固定。32.C+对 C语言作最大的改进是( )。(分数:2.00)A.增加了一些新的运算符B.允许函数重载C.规定函数说明必须用原型D.引进了类和对象的概念 解析:解析 C+对 C的最大改动是增加了面向对象机制。33.在函数说明时,下列不必要的是( )项。(分数:2.00)A.函数参数的类型B.函数参数名字 C.函数的名字D.返回值表达式解析:解析 在函数说明时,函数参数的名字可以省略,但在函数实现时,需指明。34.设 F是一个森林,B 是由 F转换得到的二叉树,F 中有几个非叶结点,则 B中右指针域为空的结点有( )个。(分数:2.00)A.n-1B.nC.n+1 D.
30、n+2解析:解析 具体方法是: 将森林中的每棵树变为二叉树。 因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树。35.下面对于静态数据成员描述中,正确的是( )。(分数:2.00)A.静态数据成员可以在类体内初始化B.静态数据成员不可以在类体内初始化 C.静态数据成员不能受 protected控件符控制D.静态数据成员可以直接用类名调用解析:解析 静态成员只能在类的外部定义,并且只定义一次。二、B填空题/B(总题数:15,分数:30.00)36.假设为循环队列分配的向量空间为 Q20,若队列的长度和队头指针值分别为 13和 17,则
31、当前尾指针的值为U 【1】 /U。(分数:2.00)填空项 1:_ (正确答案:10)解析:解析 假设为循环队列分配的向量空间为 Q20,若队列的长度和队头指针值分别为 13和 17,则当前尾指针的值为 10。37.广义表的深度是指U 【2】 /U。(分数:2.00)填空项 1:_ (正确答案:表展开后括号的层数)解析:解析 在广义表的深度是指表展开后括号的层数。38.栈顶的位置是随着U 【3】 /U操作而变化的。(分数:2.00)填空项 1:_ (正确答案:进栈和退栈)解析:解析 栈顶的位置是随着进栈和退栈操作而变化的。39.在单链表上难以实现的排序方法有希尔排序、U 【4】 /U和堆排序。
32、(分数:2.00)填空项 1:_ (正确答案:快速排序)解析:解析 在单链表上难以实现的排序方法有希尔排序、快速排序和堆排序。因为这三种排序方法均适合完成顺序结构的排序,可随机访问其中的元素。而单链表属于动态的数据结构,访问元素要通过指针来实现。40.在有序表(12,24,36,48,60,72,84)中二分查找关键字 72时所需进行的关键字比较次数为U 【4】 /U。(分数:2.00)填空项 1:_ (正确答案:2)解析:解析 在有序表(12,24,36,48,60,72,84)中二分查找关键字 72时所需进行的关键字比较次数为 2,仅需要拆分 2次即可找到 72。41.在 C+类中,默认的
33、数据成员的访问权限是U 【6】 /U。(分数:2.00)填空项 1:_ (正确答案:私有访问权限)解析:解析 在 C+类中,默认的数据成员的访问权限是私有访问权限。42.C+中的多态分为运行时的多态性及U 【7】 /U时的多态性。(分数:2.00)填空项 1:_ (正确答案:编译)解析:解析 C+中的多态分为编译时的多态性及运行时的多态性。43.构造函数的主要作用是U 【8】 /U。(分数:2.00)填空项 1:_ (正确答案:初始化对象成员)解析:解析 构造函数的主要作用是初始化对象成员。44.标识虚函数的关键字是U 【9】 /U。(分数:2.00)填空项 1:_ (正确答案:virtual
34、)解析:解析 virtual 关键字。45.类的静态成员的定义说明语句不能出现在类的外部,而且只能定义U 【10】 /U次。(分数:2.00)填空项 1:_ (正确答案:1)解析:解析 静态成员只能初始化 1次。46.已知 p是一个指向类 A公有数据成员的指针,a 是类 A的一个对象,如果要给 p所指向的成员赋值为5,语句应写为U 【11】 /U。(分数:2.00)填空项 1:_ (正确答案:a. *p=5;)解析:解析 由于是公有成员,类对象可以直接访问类的公有成员*号表示指针所指向的内容。47.在 C+中,动态创建对象可以使用U 【12】 /U操作符来完成。(分数:2.00)填空项 1:_
35、 (正确答案:new)解析:解析 与 C语言不同,C+提倡使用 new操作符来动态创建对象。48.在 C+中,若要使派生类中的某些成员不可见,主要是指基类中的U 【13】 /U成员。(分数:2.00)填空项 1:_ (正确答案:私有)解析:解析 通过在类中设置私有权限,实现数据成员的封装。49.程序的输出结果是U 【14】 /U。 #include iostream using namespace std; class A int x; public: A(int x=1):x(x)coutx; ; void main() A a,b(2),c(3); (分数:2.00)填空项 1:_ (正确
36、答案:123)解析:解析 a 对象使用和默认的构造函数,b 对象使用 2来初始化对象 c对象使用 3来初始化对象,输出相应的值后,结果变为 123。50.程序的输出结果是U 【15】 /U。 #include iostream using namespace std; class A public: A()a=b=2; A(int i,int j)a=i;b=j; void display()coutab; private: int a,b; ; void main() A m,n(4,8); mdisplay(); ndisplay(); (分数:2.00)填空项 1:_ (正确答案:2248)解析:解析 m 对象使用和默认的构造函数,其 a与 b变量的值均为 2;而 n变量使用 4和 8来初始化程序的变量,a,b 的值为 4和 8,依次输出的结果为 2248。