1、二级 C+笔试-11 及答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.如下程序的输出结果是 #includeiostream using namespace std; class A public: A( )cout“A“; ; class Bpublic:B( )cout“B“; class C:public A B b; public: C( )cout“C“; ; int main( )C obj;return 0;(分数:2.00)A.CBAB.BACC.ACBD.ABC2.要定义一个具有 5 个元素的一维数组 veer,并使其
2、各元素的初值依次是 30、50、-88、0 和 0,则下列定义语句中错误的是(分数:2.00)A.int vect =30,50,-88;B.int vect =30,50,-88,0,0;C.int vect5=30,50,-88;D.int vect5=30,50,-88,0,0;3.下列关于 C+函数的叙述中,正确的是(分数:2.00)A.每个函数至少要具有一个参数B.每个函数都必须返回一个值C.函数在被调用之前必须先声明D.函数不能自己调用自己4.在下列函数原型中,可以作为类 AA 构造函数的是(分数:2.00)A.void AA(int);B.int AA( );C.AA(int)e
3、onst;D.AA(int);5.已知枚举类型定义语句为: enunl Token NAME,NUMBER,PLUS=5,MINUS,PRINT=10 ; 则下列叙述中错误的是(分数:2.00)A.枚举常量 NAME 的值为 1B.枚举常量 NuMBER 的值为 1C.枚举常量 MINus 的值为 6D.枚举常量 PRINT 的值为 106.有如下程序: #includeiostream using namespace std; class BASE public: BASE( )cout“BASE“; ; class DERIVED:public BASE public: DERIVED(
4、)cout“DERIVED“; ;int main( )DERIVED x;return 0; 程序的输出结果是(分数:2.00)A.BASEB.DERIVEDC.BASEDERIVEDD.DERIVEDBASE7.有如下类声明: class Fooint bar; 则 Foo 类的成员 bar 是(分数:2.00)A.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数8.如下程序的输出结果是 #includeiostream void fun(int X,inty)intt=x;x=y;y=t; int main( ) int a2=23,42; fun(a1,a0); std:c
5、outa0“,“a1std:endl; return 0; (分数:2.00)A.42,42B.23,23C.23,42D.42,239.数据库系统的核心是(分数:2.00)A.数据模型B.数据库管理系统C.数据库D.数据库管理员10.在表达式 x+y*z 中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是(分数:2.00)A.operator+有两个参数,operator*有两个参数B.operator+有两个参数,operator*有一个参数C.operator+有一个参数,operator*有两个参数D.operator+有一个参数,operator*有
6、一个参数11.在软件设计中,不属于过程设计工具的是(分数:2.00)A.PDL(过程设计语言)B.PAD 图C.N-s 图D.DFD 图12.下列关于类和对象的叙述中,错误的是(分数:2.00)A.一个类只能有一个对象B.对象是类的具体实例C.类是对某一类对象的抽象D.类和对象的关系是一种数据类型与变量的关系13.对于语句 coutendlx;中的各个组成部分,下列叙述中错误的是(分数:2.00)A.“cout”是一个输出流对象B.“endl”的作用是输出回车换行C.“x”是一个变量D.“”称作提取运算符14.下列关于模板的叙述中,错误的是(分数:2.00)A.模板声明中的第一个符号总是关键字
7、 templateB.在模板声明中用“”和“”括起来的部分是模板的形参表C.类模板不能有数据成员D.在一定条件下函数模板的实参可以省略15.设有如下关系表: (分数:2.00)A.T=RSB.T=RSC.T=RSD.T=R/S16.执行语句序列 inti=0;while(i25)i+=3;couti; 输出结果是(分数:2.00)A.24B.25C.27D.2817.下列字符串中,正确的 C+标识符是(分数:2.00)A.foo-1B.2bC.newD._25618.下列关于运算符重载的叙述中,正确的是(分数:2.00)A.通过运算符重载,可以定义新的运算符B.有的运算符只能作为成员函数重载C
8、.若重载运算符+,则相应的运算符函数名是+D.重载一个二元运算符时,必须声明两个形参19.对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为(分数:2.00)A.log2nB.n/2C.nD.n+120.在 C+中,用于实现运行时多态性的是(分数:2.00)A.内联函数B.重载函数C.模板函数D.虚函数21.如下程序的输出结果是 #includeiostream using namespace std; class Test public: Test( )n+=2; Test( )n-=3; static int getNum( )return n; private: stat
9、ic int n; ;int Test:n=1; int main( ) Test*P=new Test: delete P; cout“n=“Test:getNum( )endl; return 0; (分数:2.00)A.n=0B.n=1C.n=2D.n=322.下列关于栈的描述中错误的是(分数:2.00)A.栈是先进后出的线性表B.栈只能顺序存储C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针23.下列叙述中正确的是(分数:2.00)A.软件交付使用后还需要进行维护B.软件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期便结束D.软件维护是指修复程序中被破坏的指
10、令24.数据库设计的根本目标是要解决(分数:2.00)A.数据共享问题B.数据安全问题C.大量数据存储问题D.简化数据维护25.有如下函数模板定义: templateclass T T func(T x,T y)return x*x+y*y; 在下列对 func的调用中,错误的是(分数:2.00)A.func(3,5);B.func(30,55);C.func(3,55);D.funeint(3,55);26.有如下类声明: class MyBASE int k; public: void set(int n)k=n; int get( )constreturn k; ; class MyDE
11、RIVED:protected MyBASE protected: intj; public: void set(int m,int n)MyBASE:set(m);j=n; int get( )constreturn MyBASE:get( )+j; ; 则类MyDERIVED 中保护的数据成员和成员函数的个数是(分数:2.00)A.4B.3C.2D.127.下列对于线性链表的描述中正确的是(分数:2.00)A.存储空间不一定是连续的,且各元素的存储顺序是任意的B.存储空间不一定是连续的,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必
12、须连续,且各元素的存储顺序是任意的28.有如下程序: #includeiostream using name。pace std; class AA int n: public: AA(int k):n(k) in get( )return n; int get( )constreturn n+1; ; int main( ) AA a(5);const AA b(6); coutaget( )bget( ); return 0: 执行后的输出结果是(分数:2.00)A.55B.57C.75D.7730.下列关于 this 指针的叙述中,正确的是(分数:2.00)A.任何与类相关的函数都有 th
13、is 指针B.类的成员函数都有 this 指针C.类的友元函数都有 this 指针D.类的非静态成员函数才有 this 指针31.对于长度为 n 的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是(分数:2.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/232.如下程序的输出结果是 #includeiostream using namespaee std; int main( ) eout.fill(*); eout.width(6); cout.fill(#): eout(123endl: return 0; (分数:2.00)A.
14、#123B.123#C.*123D.123*33.下列关于 C+流的叙述中,正确的是(分数:2.00)A.cin 是一个输入流对象B.可以用 ifstream 定义一个输出流对象C.执行语句序列 char*y=“PQMNIt“;couty;将输出字符串“PQMN“的地址D.执行语句序列 char x80;cingetllne(x,80);时,若输入 Happyr new year 则 x 中的字符串是“HaPPy“。34.数据的存储结构是指(分数:2.00)A.存储在外存中的数据B.数据所占的存储空间量C.数据在计算机中的顺序存储方式D.数据的逻辑结构中计算机中的表示二、B填空题/B(总题数:
15、14,分数:28.00)36.数据管理技术发展过程经过了人工管理、文件系统和数据库系统 3 个阶段,其中数据独立性最高的阶段是 1。(分数:2.00)填空项 1:_37.算法复杂度主要包括时间复杂度和 1 复杂度。(分数:2.00)填空项 1:_38.在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块(桩模块)。其中 1 的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。(分数:2.00)填空项 1:_39.一棵二叉树第 6 层(根结点为第 1 层)的结点数最多为 1 个。(分数:2.00)填空项 1:_40.数据结构分为逻辑结构和存储结构,循环队列属
16、于 1 结构。(分数:2.00)填空项 1:_41.下列函数的功能是判断字符串 str 是否对称,对称则返回 true,否则返回 false。请在画线处填上适当内容,实现该函数。 bool fun(char*str) int i:0,j=0; while(strj)U (6) /U; for(J-;ij中的各个组成部分,下列叙述中错误的是(分数:2.00)A.“cout”是一个输出流对象B.“endl”的作用是输出回车换行C.“x”是一个变量D.“”称作提取运算符 解析:解析 是流插入运算符,是提取运算符。14.下列关于模板的叙述中,错误的是(分数:2.00)A.模板声明中的第一个符号总是关键
17、字 templateB.在模板声明中用“”和“”括起来的部分是模板的形参表C.类模板不能有数据成员 D.在一定条件下函数模板的实参可以省略解析:解析 模板定义 template模板参数表 类声明(函数定义) 必须以 template 为开头,括起来部分是模板的类型参数,类模板有数据成员和成员函数。15.设有如下关系表: (分数:2.00)A.T=RSB.T=RS C.T=RSD.T=R/S解析:解析 集合的并运算,RS 是将两个关系的元组组成一个新的集合,即将第二个集合中元组追加到第一个集合中,如果有相同元组则只保留一个。16.执行语句序列 inti=0;while(i25)i+=3;cout
18、i; 输出结果是(分数:2.00)A.24B.25C.27 D.28解析:解析 while()满足条件进行循环,所以当 i=24 时最后一次进入循环,i=27 时退出循环。17.下列字符串中,正确的 C+标识符是(分数:2.00)A.foo-1B.2bC.newD._256 解析:解析 在 C+中,变量标识符必须以大小写字母、下画线开始,是由数字或者字母下画线等组成的一个字符串,其中 C+关键字不能作为标识符,不能包含-、+、*、/等运算符号。18.下列关于运算符重载的叙述中,正确的是(分数:2.00)A.通过运算符重载,可以定义新的运算符B.有的运算符只能作为成员函数重载 C.若重载运算符+
19、,则相应的运算符函数名是+D.重载一个二元运算符时,必须声明两个形参解析:解析 运算符重载只能重载现有的运算符,不能创建新的运算符,在重载( )、 、-、=时必须将重载函数声明为成员函数。而不能声明为友元函数,重载二元运算符为成员函数时,该函数只有一个形参,另外一个参数则隐含为本对象自身。重载的一般形式为: 类型 类名:operator 重载运算符(参数列表)19.对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为(分数:2.00)A.log2nB.n/2C.n D.n+1解析:解析 对线性表顺序查找,最坏的情况是要查找的元素在表的最后一个位置,所以查找的次数为n。20.在 C
20、+中,用于实现运行时多态性的是(分数:2.00)A.内联函数B.重载函数C.模板函数D.虚函数 解析:解析 C+支持动态联编和静态联编,动态联编是指联编要在程序运行时动态进行,可实现运行时多态,运行时多态可使用虚函数来实现。21.如下程序的输出结果是 #includeiostream using namespace std; class Test public: Test( )n+=2; Test( )n-=3; static int getNum( )return n; private: static int n; ;int Test:n=1; int main( ) Test*P=new
21、Test: delete P; cout“n=“Test:getNum( )endl; return 0; (分数:2.00)A.n=0 B.n=1C.n=2D.n=3解析:解析 静态数据成员的初始值 n=1,执行 Test*p=new Test;,调用构造函数后,n= 3,deletep;调用析构函数,n-=3,所以最终 n=0。22.下列关于栈的描述中错误的是(分数:2.00)A.栈是先进后出的线性表B.栈只能顺序存储 C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针解析:解析 栈是一种数据结构,是在某一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入
22、的数据被压入栈底,最后的数据在栈顶。在栈顶进行插入和删除操作,不需要修改栈底指针,栈的实现可以采用顺序存储也可以采用链表存储。23.下列叙述中正确的是(分数:2.00)A.软件交付使用后还需要进行维护 B.软件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期便结束D.软件维护是指修复程序中被破坏的指令解析:解析 软件从交付使用一直到其生命周期结束都需要不断的维护,通常有 4 类维护活动:改正性维护,也就是诊断和改正在使用过程中发现的软件错误;适应性维护,即修改软件以适应环境的变化完善性维护,即根据用户的要求改进或扩充软件使它更完善;预防性维护,即修改软件为将来的维护活动预先做准备。2
23、4.数据库设计的根本目标是要解决(分数:2.00)A.数据共享问题 B.数据安全问题C.大量数据存储问题D.简化数据维护解析:解析 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,设计数据库的根本目标就是为解决数据的共享问题。25.有如下函数模板定义: templateclass T T func(T x,T y)return x*x+y*y; 在下列对 func的调用中,错误的是(分数:2.00)A.func(3,5);B.func(30,55);C.func(3,55); D.funeint(3,55);解析:解析 在模板函数调用中,当没有类型参数时,要求函数调用的实
24、参必须类型相同,如果实参类型不相同,则必须有类型参数加以强制转换,否则编译会报错。26.有如下类声明: class MyBASE int k; public: void set(int n)k=n; int get( )constreturn k; ; class MyDERIVED:protected MyBASE protected: intj; public: void set(int m,int n)MyBASE:set(m);j=n; int get( )constreturn MyBASE:get( )+j; ; 则类MyDERIVED 中保护的数据成员和成员函数的个数是(分数:2
25、.00)A.4B.3 C.2D.1解析:解析 在保护派生的单继承中,基类的公有数据成员和成员函数在派生类中成为保护成员。27.下列对于线性链表的描述中正确的是(分数:2.00)A.存储空间不一定是连续的,且各元素的存储顺序是任意的 B.存储空间不一定是连续的,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的解析:解析 在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。28.有如下程序: #includei
26、ostream using name。pace std; class AA int n: public: AA(int k):n(k) in get( )return n; int get( )constreturn n+1; ; int main( ) AA a(5);const AA b(6); coutaget( )bget( ); return 0: 执行后的输出结果是(分数:2.00)A.55B.57 C.75D.77解析:解析 如果一个对象被定义为常对象,则它只能调用该类的常成员函数而不能调用其他的成员函数。解析:解析 二元运算符被重载为类的成员函数时,只需要定义一个参数,而另外一
27、个参数为该对象自身。30.下列关于 this 指针的叙述中,正确的是(分数:2.00)A.任何与类相关的函数都有 this 指针B.类的成员函数都有 this 指针C.类的友元函数都有 this 指针D.类的非静态成员函数才有 this 指针 解析:解析 类的静态成员函数和友元函数都不能有 this 指针,只有非静态成员函数和友元函数才能有this 指针。故答案为 D。31.对于长度为 n 的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是(分数:2.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/2 解析:解析 对于长度为 n 的线性
28、表,在最坏情况下,采用冒泡排序的比较次数为 n(n-1)/2。对于快速排序,最坏情况是整个序列都已经有序或完全倒序,此时,快速排序退化为冒泡排序,比较次数为 n(n-1)/2。32.如下程序的输出结果是 #includeiostream using namespaee std; int main( ) eout.fill(*); eout.width(6); cout.fill(#): eout(123endl: return 0; (分数:2.00)A.#123 B.123#C.*123D.123*解析:解析 eoutfill(#);是填充语句,它只是对跟在其后的一个 eout语句起作用,在
29、没有使用 set(ios:)设置对齐方式的情况下,默认为右对齐、左填充。33.下列关于 C+流的叙述中,正确的是(分数:2.00)A.cin 是一个输入流对象 B.可以用 ifstream 定义一个输出流对象C.执行语句序列 char*y=“PQMNIt“;couty;将输出字符串“PQMN“的地址D.执行语句序列 char x80;cingetllne(x,80);时,若输入 Happyr new year 则 x 中的字符串是“HaPPy“。解析:解析 在 C+中,cin 作为输入流对象,cout 作为输出流对象,ifstream 作为文件输入流对象,ofstream 作为文件输出流对象。
30、数组指针指向的是数组的首地址,而不是整个数组地址集合。cingetline(变量,整数)的作用是得到整行并将其赋值给变量。34.数据的存储结构是指(分数:2.00)A.存储在外存中的数据B.数据所占的存储空间量C.数据在计算机中的顺序存储方式D.数据的逻辑结构中计算机中的表示 解析:解析 数据的存储结构是建立一种由逻辑结构到存储空间的映射,是数据的逻辑结构在计算机中的表示。解析:解析 在派生类的构造函数声明中,一般格式为: 派生类名(参数总表):基类名(参数总表),对象成员名(参数表) XB 继承 XA,基类 XA 的构造函数带有参数,所以必须给 XA 的构造函数的形参赋值,同时也可以为数据成
31、员 Y 赋值。二、B填空题/B(总题数:14,分数:28.00)36.数据管理技术发展过程经过了人工管理、文件系统和数据库系统 3 个阶段,其中数据独立性最高的阶段是 1。(分数:2.00)填空项 1:_ (正确答案:数据库系统)解析:解析 数据库系统通过三层模式、两级映射保证了数据库的数据独立性,而其他人工管理和文件系统均无法保证数据的独立性。37.算法复杂度主要包括时间复杂度和 1 复杂度。(分数:2.00)填空项 1:_ (正确答案:空间)解析:解析 算法的复杂度包含时间复杂度和空间复杂度,空间复杂度指的是程序运行所要消耗的存储空间。一个算法的优劣主要从算法的执行时间和所需要的存储空间两
32、个方面来衡量。38.在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块(桩模块)。其中 1 的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。(分数:2.00)填空项 1:_ (正确答案:驱动模块)解析:解析 驱动模块是用来模拟被测试模块的上一级模块,相当于被测模块的主程序,它将接收数据,将相关数据传送给被测模块,启用被测模块,并打印出相应的结果。39.一棵二叉树第 6 层(根结点为第 1 层)的结点数最多为 1 个。(分数:2.00)填空项 1:_ (正确答案:32)解析:解析 完全二叉树的深度和结点的关系为 k=log2n+1,则有 n=2k-1,
33、普通二叉树的结点数目小于完全二叉树的结点数 n2 k-1,故深度为 6 的二叉树最多有 32 个结点。40.数据结构分为逻辑结构和存储结构,循环队列属于 1 结构。(分数:2.00)填空项 1:_ (正确答案:存储)解析:解析 数据结构包括逻辑结构和物理结构(存储结构),逻辑结构包括集合、线性、树、网络等,而存储结构主要指的是逻辑结构的存储,包括顺序、链表、索引、散列等。41.下列函数的功能是判断字符串 str 是否对称,对称则返回 true,否则返回 false。请在画线处填上适当内容,实现该函数。 bool fun(char*str) int i:0,j=0; while(strj)U (
34、6) /U; for(J-;ij&stri=strJ;i+,J-); return iU (7)/U J; (分数:2.00)填空项 1:_ (正确答案:j-,=)解析:解析 首先利用 while 循环得到数组的最大下标 j,i 为数组的最小下标,然后在 for 循环中判断将 j 和 i 逐次移动并判断对应位置上的元素是否相等。当 i=j 时,则表示数组元素为完全对称,返回为true;否则为不对称,返回为 false。42.执行语句序列 intx=10r=x: coutx-rendl; 输出结果为_。(分数:2.00)填空项 1:_ (正确答案:10-10)解析:解析 引用声明相当于是为变量声
35、明一个别名,所以 r=x=10。43.下列程序的输出结果为 Object id=0 Object id=1 请将程序补充完整。 #includeiostream using namespace std; class Point public: Point(int xx=0,intyy=0)X=xx;Y=yy;countP+; Point( )eountP-; int GetX( )return X; int GetY( )return Y; static void GetC( )cout“Object id=“countPendl; private: int X,Y; static int c
36、ountP; ; _/静态数据成员的初始化 int main( ) Point:GetC( ); Point A(4,5); AGetC( ); return 0; (分数:2.00)填空项 1:_ (正确答案:int Point:countP=0;)解析:解析 静态数据成员在类中声明,在使用前初始化,一般格式为: 数据类型类名:静态数据成员名=初始值44.非成员函数应声明为类的 1 函数才能访问这个类的 private 成员。(分数:2.00)填空项 1:_ (正确答案:友元)解析:解析 类的私有成员只能被本类的成员函数访问,如果非成员函数要访问本类的私有数据成员,必须将函数定义为该类的友元
37、函数才行。45.派生类中的成员不能直接访问基类中的 1 成员。(分数:2.00)填空项 1:_ (正确答案:私有)解析:解析 派生类成员在私有继承方式下不能访问基类的所有成员,在保护继承方式下不能访问基类的私有成员,在公有继承方式下不能访问基类的私有成员。46.下列程序的输出结果为 2,请将程序补充完整。 #include iostream using namespaee std; class Base public: _void fun( )cout1; ; class Derived:public Base public: void fun( )cout2; ; int main( ) B
38、ase*P=new Derived: p-fun( ); delete P; return 0; (分数:2.00)填空项 1:_ (正确答案:virtual)解析:解析 在基类中的虚函数在派生类中被重新定义时,该函数仍然为虚函数,但是可以省略不写virtual 关键字,在派生类对象中调用时,则调用被重新定义后的虚函数。47.请将下列类定义补充完整。 class Basepublic:void fun( )cout“Base:fun“endl; class Derived:public Base public: void fun( ) _ /显式调用基类的 fun 函数 cout“Derive
39、d:fun“endt; ;(分数:2.00)填空项 1:_ (正确答案:Base:fun( );)解析:解析 显式调用基类的成员函数的一般格式为: 基类名:成员函数名( );48.多数运算符既能作为类的成员函数重载,也能作为类的非成员函数重载,但 运算符只能作为类的 1 函数重载。(分数:2.00)填空项 1:_ (正确答案:成员)解析:解析 C+中规定 作为下标运算符,不能被重载为友元函数,只能被重载为类的成员函数。49.下面是一个栈类的模板,其中 push 函数将元素 i 压入栈顶,pop 函数弹出栈顶元素。栈初始为空,top 值为 0,栈顶元素在 stacktop-1中,在下面画线处填上
40、适当语句,完成栈类模板的定义。 templateclass T class T stack enunlsize=1000; T stacksize; intop; public: T stack( ):top(0) void push(consT i) if(topsize)stacktop+=i; T pop( ) if(top=0)exit(1); /栈空时终止运行 return_; ;(分数:2.00)填空项 1:_ (正确答案:stack(-top);)解析:解析 POP( )操作中,当栈中含有元素时则弹出栈顶元素,所以应该返回栈顶元素 stack(-top),由于 top 指针始终指向的是栈顶元素的上一单元,所以出栈时应该是先将 top 下移,然后出栈,故应该是-top 而不是 top-。