1、二级 C+笔试-40 及答案解析(总分:96.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下列运算符中,要求运算对象必须是整数的是( )。(分数:2.00)A./B.*C.%D.!2.以下程序的输出为( )。main()int a=20,b=30,c=40;if(ab)a=b,b=c;c=a;cout “a=“ a “b=“ b “c=“ c;(分数:2.00)A.a=20,b=30,c=20B.a=20,b=40,c=20C.a=30,b=40,c=20D.a=30,b=40,c=303.下列的模板说明中,正确的是( )。(分数:2.00)A.template
2、 T1,T2B.template class T1,T2C.template class T1,class T2D.template typename T1;typename T24.read 函数的功能是从输人流中读取( )。(分数:2.00)A.一个字符B.当前字符C.一行字符D.指定若干个字符5.下面程序的运行结果是( )。void man()for(i=0;i=8;i+)if(+i%3! =2)continue;else couti(分数:2.00)A.2B.5C.258D.86.在一个类中可以对一个操作符进行( )重载(分数:2.00)A.1 种B.2 种C.3 种D.多种7.下列不
3、是关系模型的组成部分的是( )。(分数:2.00)A.关系列表B.关系数据结构C.关系操作集合D.关系完整性约束8.下列不是数据字典通常包括的内容的是( )。(分数:2.00)A.数据项B.数据结构C.数据流D.数据元素9.下面程序运行结果为( )。main()char c=a;if(ac =z) cout“LOW“;else cout“UP“;(分数:2.00)A.LOWB.UPC.LOWUPD.语句错误,编译不能通过10.首先访问结点的左子树,然后访问该结点,最后访问结点的右子树,这种遍历方式称为 ( )。(分数:2.00)A.前序遍历B.中序遍历C.后序遍历D.顺序遍历11.在 ios
4、中提供的格式控制标志位中,( )是转换八进制的。(分数:2.00)A.hexB.decC.octD.bin12.在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( )。(分数:2.00)A.完全相同B.完全不同C.部分相同D.以上都不对13.下面函数的运行结果是( )。#include iostreamusing namespace std;class Apublic:A()int Min(int a,int b)return ab? a:b;int Min(int a,int b,int c)if(ab)return ac? a:c;else ret
5、urn bc? b:c;A();void main()A a;coutaMin(1,2,3)aMin(2,0);(分数:2.00)A.10B.12C.30D.3214.设 ch 是 char 型变量,其值为A,则下面表达式的值是( )。ch=(ch=A&ch=Z)? (ch+32):ch(分数:2.00)A.AB.aC.ZD.z15.下列描述中错误的是( )。(分数:2.00)A.派生类可以使用 private 派生B.对基类成员访问必须是无二义性的C.赋值兼容规则也适合于多继承D.基类和派生类中存在同名函数,将出现二义性16.下面程序的运行结果为( )。#includeiostreamusi
6、ng namespace std;void swap(int &a,int &b)int temp;temp=a;a=b;b=temp;void main()int a=2,b=3;swap(a,b);couta“,“ bENDL;(分数:2.00)A.2,3B.3,2C.2,2D.3,317.在数据库中,用来抽象、表示、处理现实世界中的数据和信息的是( )。(分数:2.00)A.视图B.数据模型C.数据参考D.数据值18.下列描述中错误的是( )。(分数:2.00)A.派生类的对象可以赋值给基类的对象B.基类的对象可以赋值给派生类的对象C.派生类对象可以初始化基类的引用D.派生类的对象地址可
7、以赋值给指向基类的指针19.当数据库被破坏时,若要有效地恢复数据库,可以采用( )。(分数:2.00)A.日志文件B.转储C.记录文件D.转储和日志文件20.假设有函数模板定义如下,下列各选项中正确的是( )。Template class TT Max(T a,T b,T c)if(ab)if(bc)return c;elsereturn b;else if(ac)return c;elsereturn a;(分数:2.00)A.float x,y,z;float max;max=Max(x,y,z);B.float x;int y,z;float max;max=Max(x,y,z);C.f
8、loat x;double y,z;float max;max=Max(x,y,z);D.三个选项都正确21.在软件生存周期中,不属于软件开发阶段的是( )。(分数:2.00)A.详细设计B.系统设计C.编码和测试D.需求分析22.假定变量 m 定义为 int m=7;则定义变量 p 的正确语句为( )。(分数:2.00)A.int p=&m;B.int *p=&m;C.int &p=*m;D.int *p=m;23.意味着一个操作在不同的类中可以有不同的实现方式的是指( )。(分数:2.00)A.多继承B.封装C.多态性D.类的复用24.对于下面程序,对 p 进行赋值正确的是( )。clas
9、s Apublic:fun(int i)coutiendl;main()void(A:*p)(int);(分数:2.00)A.p=fun;B.p=fun();C.p=A:fun;D.p=A:fun()25.下面程序的运行结果为( )。#include iostreamusing namespace std;class Apublic:A()cout“ “;A()cout“ “;class B:public Apublic:B()cout“ “;B()cout“ “;void main()B b;(分数:2.00)A.1234B.1324C.1342D.314226.以下说法中正确的是( )。(
10、分数:2.00)A.C+程序总是从第一个定义的函数开始执行B.C+程序总是从 main 函数开始执行C.C+函数必须有返回值,否则不能使用函数D.C+程序中有调用关系的所有函数必须放在同一个程序文件中27.关于拷贝初始化构造函数,描述不正确的是( )。(分数:2.00)A.拷贝初始化构造函数是类的成员函数,函数名与类名相同。B.函数只有一个参数,并且是对某个对象的引用C.每个类都必须有一个拷贝初始化构造函数。D.要定义拷贝初始化构造函数,必须指定返回类型28.不论派生类以何种方法继承基类,都不能使用基类的( )。(分数:2.00)A.公有成员B.私有成员C.保护成员D.公有成员和保护成员29.
11、带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样对虚基类的子对象初始化( )。(分数:2.00)A.一次B.两次C.多次D.以上答案都不对30.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则( )。(分数:2.00)A.完全相同B.完全不同C.部分相同D.以上都不对31.下面程序的运行结果为( )。#includeiostreamusing namespace std;void main()int a=1;switch((分数:2.00)A.32.栈是线性表的一种,其新加、读取和删除结点只能在栈的( )进行操作。(分数:2.00)A.
12、栈顶B.栈底C.中间位D.随机位置33.设 a,b,c 都是 int 的变量,且 a=3,b=4,c=5,则下面的表达式中值为 0 的是( )(分数:2.00)A.a & bB.a=bC.a | b+c&b-cD.!(ab)&!c|1)34.图的邻接矩阵表示法适用于表示( )。(分数:2.00)A.稠密图B.无向图C.稀疏图D.有向图35.为提高软件项目的质量,在软件结构设计时,必须遵循( )原则。(分数:2.00)A.质量控制B.程序优化C.信息隐蔽D.数据共享二、填空题(总题数:13,分数:26.00)36.排序是计算机程序设计中的一种重要操作,常见的排序方法有交换排序、选择排序和 【1】
13、 等。(分数:2.00)填空项 1:_37.数据的逻辑结构是从逻辑关系上描述数据,它与数据的 【2】 结构无关。(分数:2.00)填空项 1:_38.在有序表(1,3,5,7,9,11,13)中二分查找关键字 9 时所需进行的关键字比较次数为 【3】 。(分数:2.00)填空项 1:_39.软件工程的框架可概括为:目标、过程和 【4】 。(分数:2.00)填空项 1:_40.索引从物理上分为聚簇索引和 【5】 。(分数:2.00)填空项 1:_41.数组元素 ai是该数组的第 【6】 个元素。(分数:2.00)填空项 1:_42.为 int *p; 动态分配内存空间并且赋初始值 0 的语句是
14、【7】 。(分数:2.00)填空项 1:_43.C+语言提供的“:”运算符的作用是在同名局部变量的作用域中访问 【8】 。(分数:2.00)填空项 1:_44.一个类中有 【9】 个析构函数。(分数:2.00)填空项 1:_45.下面程序的运行结果为 【10】 。class Apublic:int num;A(int i)num=i;A(A &a)num=+a.num;void print()coutnum;void main()A a(1),b(a);aprint();bprint();(分数:2.00)填空项 1:_46.函数不能直接引用类中说明的非静态成员,这里指的成员是 【11】 。(
15、分数:2.00)填空项 1:_47.若类 B 是类 A 的私有派生类,类 C 是类 B 的公有派生类,则类 C 【12】 访问基类 A 的公有成员。(分数:2.00)填空项 1:_48.多继承情况下,派生类对基类成员的访问会出现二义性。解决二义性的方法是 【13】 、 【14】 和 【15】 。(分数:2.00)填空项 1:_二级 C+笔试-40 答案解析(总分:96.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下列运算符中,要求运算对象必须是整数的是( )。(分数:2.00)A./B.*C.% D.!解析:解析 题目中“/”、“*”、“!”的运算对象既可以是整
16、数,也可以是实数,只有取余数运算符“%”要求运算对象必须是整数。2.以下程序的输出为( )。main()int a=20,b=30,c=40;if(ab)a=b,b=c;c=a;cout “a=“ a “b=“ b “c=“ c;(分数:2.00)A.a=20,b=30,c=20 B.a=20,b=40,c=20C.a=30,b=40,c=20D.a=30,b=40,c=30解析:解析 题中的 a=b,b=c;是一个语句书写在了两行,因 ab 为假,所以此句不执行,又“c =a”与 if 语句无关,总要执行,故 a、b 值不变,c 值为 20。3.下列的模板说明中,正确的是( )。(分数:2.
17、00)A.template T1,T2 B.template class T1,T2C.template class T1,class T2D.template typename T1;typename T2解析:解析 模板说明,要求每个参数前都有一个类型参数,多个参数需用逗号隔开。4.read 函数的功能是从输人流中读取( )。(分数:2.00)A.一个字符B.当前字符C.一行字符D.指定若干个字符 解析:解析 read 函数可以通过指定参数的方式读取若干个字符。5.下面程序的运行结果是( )。void man()for(i=0;i=8;i+)if(+i%3! =2)continue;els
18、e couti(分数:2.00)A.2B.5 C.258D.8解析:解析 if 语句中,+ii%3 先做+,后整除;continue 语句不执行 coot 语句;在 for 中 i+,这样每次循环 i 都加 2。6.在一个类中可以对一个操作符进行( )重载(分数:2.00)A.1 种B.2 种C.3 种D.多种 解析:解析 重载运算符可以针对用户的各种新的数据类型按实际需要对原有运算符进行适当的改造,在一个类中可以有多种新的数据类型,所以一个操作符可以进行多种重载。7.下列不是关系模型的组成部分的是( )。(分数:2.00)A.关系列表 B.关系数据结构C.关系操作集合D.关系完整性约束解析:
19、解析 关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。8.下列不是数据字典通常包括的内容的是( )。(分数:2.00)A.数据项B.数据结构C.数据流D.数据元素 解析:解析 数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分。9.下面程序运行结果为( )。main()char c=a;if(ac =z) cout“LOW“;else cout“UP“;(分数:2.00)A.LOW B.UPC.LOWUPD.语句错误,编译不能通过解析:解析 关系运算符“”和“=”的优先级相同,计算顺序是从左向右,求解表达式ac =z时,是先计算出ac 的值(此值只有 0 和
20、1 两种情况),接着再判断该值小于等于z(2 的 ASCII码是 122),所以该式的值永远为 1,程序输出 LOW。10.首先访问结点的左子树,然后访问该结点,最后访问结点的右子树,这种遍历方式称为 ( )。(分数:2.00)A.前序遍历B.中序遍历 C.后序遍历D.顺序遍历解析:解析 前序遍历序列的顺序是先根、再左子树、最后右子树;中序遍历序列的顺序是先左子树、再根、最后右子树;后序遍历序列的顺序是先左子树、再右子树、最后根。11.在 ios 中提供的格式控制标志位中,( )是转换八进制的。(分数:2.00)A.hex B.decC.octD.bin解析:解析 oct 八进制。12.在派生
21、类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( )。(分数:2.00)A.完全相同 B.完全不同C.部分相同D.以上都不对解析:解析 在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值相同。13.下面函数的运行结果是( )。#include iostreamusing namespace std;class Apublic:A()int Min(int a,int b)return ab? a:b;int Min(int a,int b,int c)if(ab)return ac? a:c;else return
22、bc? b:c;A();void main()A a;coutaMin(1,2,3)aMin(2,0);(分数:2.00)A.10 B.12C.30D.32解析:解析 函数的重载调用。首先调用 3 个参数返回最小值 1,再调用 2 个参数返回最小值 0。14.设 ch 是 char 型变量,其值为A,则下面表达式的值是( )。ch=(ch=A&ch=Z)? (ch+32):ch(分数:2.00)A.AB.a C.ZD.z解析:解析 ch=(ch=A&ch=Z)?(ch+32):ch,其中,初始 ch=A,则 ch=A &ch=Z为真,执行 ch+32 变成小写 a。15.下列描述中错误的是(
23、)。(分数:2.00)A.派生类可以使用 private 派生B.对基类成员访问必须是无二义性的C.赋值兼容规则也适合于多继承D.基类和派生类中存在同名函数,将出现二义性 解析:解析 基类和派生类存在同名函数,符合支配规则,不存在二义性。16.下面程序的运行结果为( )。#includeiostreamusing namespace std;void swap(int &a,int &b)int temp;temp=a;a=b;b=temp;void main()int a=2,b=3;swap(a,b);couta“,“ bENDL;(分数:2.00)A.2,3B.3,2 C.2,2D.3,
24、3解析:解析 函数形参是引用方式,则在函数体内形参改变,对应的实参也改变。17.在数据库中,用来抽象、表示、处理现实世界中的数据和信息的是( )。(分数:2.00)A.视图B.数据模型 C.数据参考D.数据值解析:解析 在数据库中,是用(数据模型)来抽象、表示、处理实现世界中的数据和信息的。18.下列描述中错误的是( )。(分数:2.00)A.派生类的对象可以赋值给基类的对象B.基类的对象可以赋值给派生类的对象 C.派生类对象可以初始化基类的引用D.派生类的对象地址可以赋值给指向基类的指针解析:解析 赋值兼容规则:派生类的对象可以赋值给基类的对象;派生类对象可以初始化基类的引用;D) 派生类的
25、对象地址可以赋值给指向基类的指针。19.当数据库被破坏时,若要有效地恢复数据库,可以采用( )。(分数:2.00)A.日志文件B.转储C.记录文件D.转储和日志文件 解析:解析 恢复故障的原理就是建立数据冗余,建立冗余数据的方式是进行数据转储和登记日志文件。当数据库文件损坏后,可重新装入备份文件恢复到数据库数据转储结束时刻的正确状态,在利用日志文件把已完成的事务进行重做。20.假设有函数模板定义如下,下列各选项中正确的是( )。Template class TT Max(T a,T b,T c)if(ab)if(bc)return c;elsereturn b;else if(ac)retur
26、n c;elsereturn a;(分数:2.00)A.float x,y,z;float max;max=Max(x,y,z); B.float x;int y,z;float max;max=Max(x,y,z);C.float x;double y,z;float max;max=Max(x,y,z);D.三个选项都正确解析:解析 使用函数模板,要求形参必须为相同类型。21.在软件生存周期中,不属于软件开发阶段的是( )。(分数:2.00)A.详细设计B.系统设计C.编码和测试D.需求分析 解析:解析 软件开发共有:需求分析,总体设计,详细设计,系统实现,测试和验收等几个阶段。详细设计、
27、系统设计和编码和测试都属于软件开发阶段。22.假定变量 m 定义为 int m=7;则定义变量 p 的正确语句为( )。(分数:2.00)A.int p=&m;B.int *p=&m; C.int &p=*m;D.int *p=m;解析:解析 将变量 m 的地址赋给指针 p。23.意味着一个操作在不同的类中可以有不同的实现方式的是指( )。(分数:2.00)A.多继承B.封装C.多态性 D.类的复用解析:解析 多态性是指用同一个名字定义功能相近的不同函数。这就意味着即使操作的特定动作互有区别仍可用同样的接口访问。多态性是对象的一种能力,它可以在运行时刻根据传递的对象参数,决定调用哪一个对象的方
28、法。这样就可以不去考虑所有对象的类型,而可以在不同的类中按不同的方法实现。24.对于下面程序,对 p 进行赋值正确的是( )。class Apublic:fun(int i)coutiendl;main()void(A:*p)(int);(分数:2.00)A.p=fun;B.p=fun();C.p=A:fun; D.p=A:fun()解析:解析 给类函数指针赋值的格式是:指针名=类名:函数名25.下面程序的运行结果为( )。#include iostreamusing namespace std;class Apublic:A()cout“ “;A()cout“ “;class B:publi
29、c Apublic:B()cout“ “;B()cout“ “;void main()B b;(分数:2.00)A.1234B.1324C.1342 D.3142解析:解析 构造函数和析构函数系统可以自动调用。先执行其基类构造函数,输出 1;执行派生类的构造函数,输出 3;执行派生类析构函数,输出 4;执行基类析构函数,输出 2。26.以下说法中正确的是( )。(分数:2.00)A.C+程序总是从第一个定义的函数开始执行B.C+程序总是从 main 函数开始执行 C.C+函数必须有返回值,否则不能使用函数D.C+程序中有调用关系的所有函数必须放在同一个程序文件中解析:解析 C+程序总是从 ma
30、in 函数开始执行。27.关于拷贝初始化构造函数,描述不正确的是( )。(分数:2.00)A.拷贝初始化构造函数是类的成员函数,函数名与类名相同。B.函数只有一个参数,并且是对某个对象的引用C.每个类都必须有一个拷贝初始化构造函数。D.要定义拷贝初始化构造函数,必须指定返回类型 解析:解析 拷贝初始化构造函数也是一个构造函数,也没有返回类型。28.不论派生类以何种方法继承基类,都不能使用基类的( )。(分数:2.00)A.公有成员B.私有成员 C.保护成员D.公有成员和保护成员解析:解析 基类的私有成员不能够在派生类中直接访问。29.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基
31、类的构造函数,这样对虚基类的子对象初始化( )。(分数:2.00)A.一次B.两次C.多次D.以上答案都不对 解析:解析 只调用一次。30.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则( )。(分数:2.00)A.完全相同 B.完全不同C.部分相同D.以上都不对解析:解析 在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则完全相同。31.下面程序的运行结果为( )。#includeiostreamusing namespace std;void main()int a=1;switch((分数:2.00)A.解析:解析 switch 语
32、句检测到符合条件 case 执行后面语句不再判断。32.栈是线性表的一种,其新加、读取和删除结点只能在栈的( )进行操作。(分数:2.00)A.栈顶 B.栈底C.中间位D.随机位置解析:解析 栈是线性表的一种,其新加、读取和删除结点只能在栈的栈顶进行操作。栈是一种先进后出的线性表。33.设 a,b,c 都是 int 的变量,且 a=3,b=4,c=5,则下面的表达式中值为 0 的是( )(分数:2.00)A.a & bB.a=bC.a | b+c&b-cD.!(ab)&!c|1) 解析:解析 该题主要考查运算符的优先级,另外,在 C+语言中任何非零值都被看做 true,值为 1。前三个表达式的
33、值都是 0。34.图的邻接矩阵表示法适用于表示( )。(分数:2.00)A.稠密图B.无向图C.稀疏图 D.有向图解析:解析 图的邻接矩阵表示法适用于表示稀疏图。35.为提高软件项目的质量,在软件结构设计时,必须遵循( )原则。(分数:2.00)A.质量控制 B.程序优化C.信息隐蔽D.数据共享解析:解析 软件项目的建设包括项目计划、需求分析、软件开发和系统维护等阶段,质量管理工作会始终贯彻在项目建设的各个阶段。因此为提高软件项目的质量,在软件结构设计时,必须遵循质量控制原则。二、填空题(总题数:13,分数:26.00)36.排序是计算机程序设计中的一种重要操作,常见的排序方法有交换排序、选择
34、排序和 【1】 等。(分数:2.00)填空项 1:_ (正确答案:插入排序)解析:解析 排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、交换排序和选择排序等。37.数据的逻辑结构是从逻辑关系上描述数据,它与数据的 【2】 结构无关。(分数:2.00)填空项 1:_ (正确答案:存储)解析:解析 数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储结构无关。38.在有序表(1,3,5,7,9,11,13)中二分查找关键字 9 时所需进行的关键字比较次数为 【3】 。(分数:2.00)填空项 1:_ (正确答案:3 次)解析:解析 第一次和中间的值(7)比较,由于比其大,因此第二次
35、和右侧子表中的中间值(11)比较,由于比其小,第三次再和左侧子表中间值(9)比较。39.软件工程的框架可概括为:目标、过程和 【4】 。(分数:2.00)填空项 1:_ (正确答案:原则)解析:解析 软件工程的框架可概括为:目标、过程和原则三部分。40.索引从物理上分为聚簇索引和 【5】 。(分数:2.00)填空项 1:_ (正确答案:非聚簇索引)解析:解析 根据索引的顺序与数据表的物理顺序是否相同可以分为:聚簇索引和非聚簇索引,聚簇索引重新组织表中的数据以按指定的一个或多个列的值排序;非聚簇索引不重新组织表中的数据。41.数组元素 ai是该数组的第 【6】 个元素。(分数:2.00)填空项
36、1:_ (正确答案:i+1)解析:解析 数组下标从 0 开始。42.为 int *p; 动态分配内存空间并且赋初始值 0 的语句是 【7】 。(分数:2.00)填空项 1:_ (正确答案:p=new int(0);)解析:解析 参考 new 的用法。43.C+语言提供的“:”运算符的作用是在同名局部变量的作用域中访问 【8】 。(分数:2.00)填空项 1:_ (正确答案:全局变量)解析:解析 C+语言提供的“:”运算符的作用是在同名局部变量的作用域中访问全局变量。44.一个类中有 【9】 个析构函数。(分数:2.00)填空项 1:_ (正确答案:1)解析:解析 一个类中可以有多个构造函数,但
37、只能由一个析构函数。如果没有特殊定义构造函数或者析构函数,系统都会自动建立一个默认的构造函数或者析构函数。45.下面程序的运行结果为 【10】 。class Apublic:int num;A(int i)num=i;A(A &a)num=+a.num;void print()coutnum;void main()A a(1),b(a);aprint();bprint();(分数:2.00)填空项 1:_ (正确答案:22)解析:解析 a(1)对象 a 的 num 被赋值为 1;b(a)调用拷贝初始化构造函数,+anum;则 anum=2;再将其赋值给对象 b 的 num。则输出是 22。46
38、.函数不能直接引用类中说明的非静态成员,这里指的成员是 【11】 。(分数:2.00)填空项 1:_ (正确答案:静态)解析:解析 在 C+类的规定中,静态函数只能给引用类的静态成员和非数据成员。47.若类 B 是类 A 的私有派生类,类 C 是类 B 的公有派生类,则类 C 【12】 访问基类 A 的公有成员。(分数:2.00)填空项 1:_ (正确答案:不能)解析:解析 类 B 是类 A 的私有继承类,则将 A 的公有成员变为私有成员,类 C 是类 B 的派生类,无法访问基类 A 中成员。48.多继承情况下,派生类对基类成员的访问会出现二义性。解决二义性的方法是 【13】 、 【14】 和 【15】 。(分数:2.00)填空项 1:_ (正确答案:成员名限定法、支配规则、虚基类)解析:解析 多继承中解决二义性的三种方法是:成员名限定法、支配规则和虚基类。