1、二级 C+笔试 377 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.具有 3 个结点的二叉树有( )。(分数:2.00)A.2 种形态B.4 种形态C.7 种形态D.5 种形态2.下面的描述中,正确的是( )。(分数:2.00)A.virtual 可以用来声明虚函数B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C.即使基类的构造函数没有参数,派生类也必须建立构造函数D.静态数据成员可以通过成员初始化列表来初始化3.有如下程序: #include iostream #include iomanip using names
2、pace std; int main() cout.fill(*); cout.width(6); cout.fill(#); cout123end1; return 0; 执行生的输出结果是( )。(分数:2.00)A.#123B.123#C.*123D.123*4.下列关于顺序存储结构叙述中错误的是( )。(分数:2.00)A.存储密度大B.逻辑上相邻的结点物理上不必邻C.可以通过计算直接确定第 i 个结点的存储地址D.插入、删除运算操作不方便5.有如下函数模板定义: templateclass T T func(T x, T y)return x*x+y*y; 在下列对 func 的调用
3、中,错误的是( )。(分数:2.00)A.func(3,5);B.func(3.0,5.5);C.func(3,5.5)D.funcint(3,5.5);6.下列叙述中正确的是( )。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.数据的逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率7.关于数据库系统三级模式的说法,下列( )是正确的。(分数:2.00)A.外模式、概念模式、内模式都只有一个B.外模式有多个,概念模式和内模式只有一个C.外模
4、式只有一个,概念模式和内模式有多个D.3 个模式中,只有概念模式才是真正存在的8.以下不使用线性结构表示实体之间联系的模型的是( )。(分数:2.00)A.线性表B.栈和队列C.二叉树D.以上三个都不是9.下列关于运算符重载的描述中,正确的是( )。(分数:2.00)A.运算符重载可以改变运算符的操作数的个数B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构10.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指( )。(分数:2.00)A.模块间的关系B.系统结构部件转换成软件的过程描述C.软件层次结构D.软件开发过程11.关于在调用模板
5、函数时模板实参的使用,下列表述正确的是( )。(分数:2.00)A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模板实参,任何情况下都不能省略12.以下四种说法中,正确的一项是( )。(分数:2.00)A.C+允许在字符串上进行整体操作B.语句:char vn=“Brown“; 将 vn 定义成一个有 5 个元素的数组,因为“Brown“中含有 5 个字符C.对指针只要赋给一个地址值就
6、可以了D.一维的指针数组实际上是一个二维数组13.如果类 A 被说明成类 B 的友元,则( )。(分数:2.00)A.类 A 的成员即类 B 的成员B.类 B 的成员即类 A 的成员C.类 A 的成员函数不得访问类 B 的成员D.类 A 的成员函数可以访问类 B 的成员14.有如下程序 #include iostream #include iomanip using namespace std; int main( ) coutsetprecision(3)fixedsetfill(*)setw(8); cout12.345_34.567; return 0; 若程序的输出是: *12.345
7、*34.567 则程序中下划线处遗漏的操作符是( )。(分数:2.00)A.setprecision(3)B.fixedC.setfill(*)D.setw(8)15.模板是实现类属机制的一种工具,其功能非常强大,它允许用户构造类属类,即( )。(分数:2.00)A.模板函数B.函数模板C.模板类D.类模板16.下列对于虚函数和重载函数的叙述,正确的是( )。(分数:2.00)A.虚函数要求函数名、返回值类型和参数序列完全相同B.重载函数要求函数有相同的返回值类型和函数名称,并有不同的参数序列C.虚函数是根据对象的不同去调用不同类的虚函数D.虚函数和重载函数都是在运行时表现出多态功能17.下面
8、程序的运行结果为( )。 #includeiostream.h void swap (int temp=a+; a=b; b=temp; void main() int a=2,b=3; swap(a, b); couta“,“bend1; (分数:2.00)A.2,3B.3,2C.2,2D.3,318.下列选项中不属于软件生命周期开发阶段任务的是( )。(分数:2.00)A.软件测试B.概要设计C.软件维护D.详细设计19.有如下定义语句:int a=1,2,3,4,5);,则对语句 int *p=a;正确的描述是( )。(分数:2.00)A.语句 int *p=a;定义不正确B.语句 in
9、t *p=a;初始化变量 p,使其指向数组对象 a 的第一个元素C.语句 int *p=a;是把 a0的值赋给变量 pD.语句 int *p=a;是把 a1的值赋给变量 p20.下列字符串中,正确的 C+标识符是( )。(分数:2.00)A.foo-1B.2bC.newD._25621.一个类的友元函数或友元类能够通过成员操作符访问该类的( )。(分数:2.00)A.私有成员B.保护成员C.公有成员D.公用成员、保护成员和私有成员22.( )复审应该把重点放在系统的总体结构、模块划分、内外接口等方面。(分数:2.00)A.详细设计B.系统设计C.正式D.非正式23.以下关键字不能用来声明类的访
10、问权限的是( )。(分数:2.00)A.publicB.staticC.protectedD.private24.有如下程序: #include iostream using namespace std; class AA int n; public: AA(int k):n(k) int get()return n; int get()constreturn n+1; int main() AA a(5); const AA b(6); couta.get()b.get(); return 0; 执行后的输出结果是( )。(分数:2.00)A.55B.57C.75D.7725.设有以下说明和
11、定义: #includeiostream. h Void main() typedef union long i; int k5; char c; DATE; struct date int cat; DATE cow; double dog; too; DATE max; cout(sizeof(struct date)+sizeof(max)end1;(分数:2.00)A.26B.52C.18D.826.下列叙述中正确的是( )。(分数:2.00)A.黑箱(盒)测试方法完全不考虑程序的内部结构和内部特征B.黑箱(盒)测试方法主要考虑程序的内部结构和内部特征C.白箱(盒)测试不考虑程序内部的
12、逻辑结构D.上述三种说法都不对27.下列运算符不能重载为友元函数的是( )。(分数:2.00)A. () -B.+ - + -C. D.+ - * /28.在下面叙述中,不正确的是( )。(分数:2.00)A.一个类的所有对象都有各自的数据成员,它们共享函数成员B.一个类中可以有多个同名的成员函数C.一个类中可以有多个构造函数、多个析构函数D.在一个类中可以声明另一个类的对象作为它的数据成员29.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则( )。(分数:2.00)A.完全相同B.完全不同C.部分相同,部分不同D.以上都不对30.下列关于 C+函数的叙述中,正确
13、的是( )。(分数:2.00)A.每个函数至少要具有一个参数B.每个函数都必须返回一个值C.函数在被调用之前必须先声明D.函数不能自己调用自己31.算法具有五个特性,以下选项中不属于算法特性的是( )。(分数:2.00)A.有穷性B.简洁性C.确定性D.输入输出性32.在下列选项中,没有构成死循环的程序是( )。(分数:2.00)A.int i=100; while(1) i=i%100+1; if(i100)break; B.for(;);C.int k=1000; do+k while (k=1000);D.int s=36; while(;-s;33.下面关于 this 指针的说法中,不
14、正确的是( )。(分数:2.00)A.当调用类的成员函数时,指针 this 被自动传递给该成员函数B.当调用类的成员函数时,指针 this 实际上指向了该类的一个对象C.友元函数也可以被传递指针 thisD.在缺省状态下,所有的成员函数都自动传递一个指针给激活它的对象34.下列对派生类的表述中,错误的是( )。(分数:2.00)A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的缺省继承方式是 privateD.派生类只继承了基类的公有成员和保护成员35.带有基类的多层派生类构造函数的成员初始化列表中都要排出虚基类的构造函数,这样将对虚基类的子对象初始( )。(分数:2
15、.00)A.与虚基类下面的派生类个数有关B.多次C.二次D.一次二、B填空题/B(总题数:15,分数:30.00)36.在数据库的概念结构设计中,常用的描述工具是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.在程序设计阶段应该采取U 【5】 /U和逐步求精的方法,把一
16、个模块的功能逐步分解,细化为一系列具体的步骤,进而用某种程序设计语言写成程序。(分数:2.00)填空项 1:_41.下面程序的输出结果为U 【6】 /U。 #include iostream using namespace std; void initialize(int printNo, int state=0); void initialize(iht printNo= 1,int state); int main() initialize(); return 0; void initialize(int printNo, int state) coutprintNo“,“stateend
17、1; (分数:2.00)填空项 1:_42.语句 coutsetiosflags(ios:showpos)38“-38end1;的输出结果为U 【7】 /U。(分数:2.00)填空项 1:_43.友元类的所有成员函数都是另一个类的U 【8】 /U函数。(分数:2.00)填空项 1:_44.虚函数必须是类的U 【9】 /U。(分数:2.00)填空项 1:_45.类 ostream 的成员函数U 【10】 /U用于执行无格式输出,成员函数 put 用于输出单个字符。(分数:2.00)填空项 1:_46.C+本身没有定义 I/O 操作,但 I/O 操作包含在 C+实现中。C+标准库 iostream
18、 提供了基本的 I/O 类。I/O 操作分别由类 istream 和U 【11】 /U提供。(分数:2.00)填空项 1:_47.阅读下面程序: #include iostream.h int fun2(int m) if(m%3=0) return 1; else return 0; void fun1(int m, int for (i=1; im; i+) if(fun2(i) S=S*i; void main() int n=9, s=2; fun1(n, s); coutsend1; 该程序的运行结果是U 【12】 /U。(分数:2.00)填空项 1:_48.有如下程序: #incl
19、ude iostream using namespace std; class PARENT public: PARENT() cout“PARENT“; ; class SON: public PARENT public: SON() cout“SON“; ; int main() SON son; PARENT *p; p= return 0; 执行上面程序的输出是U 【13】 /U。(分数:2.00)填空项 1:_49.虚基类说明格式如下:slass 派生类名U 【14】 /U继承方式基类名。(分数:2.00)填空项 1:_50.下面程序的执行结果是U 【15】 /U。 #include
20、 iostream.h void main() int n=0,x=0; do n+; if(n%3=2 while(x!=1); cout“n=“nend1; (分数:2.00)填空项 1:_二级 C+笔试 377 答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.具有 3 个结点的二叉树有( )。(分数:2.00)A.2 种形态B.4 种形态C.7 种形态D.5 种形态 解析:2.下面的描述中,正确的是( )。(分数:2.00)A.virtual 可以用来声明虚函数 B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C.即使基
21、类的构造函数没有参数,派生类也必须建立构造函数D.静态数据成员可以通过成员初始化列表来初始化解析:3.有如下程序: #include iostream #include iomanip using namespace std; int main() cout.fill(*); cout.width(6); cout.fill(#); cout123end1; return 0; 执行生的输出结果是( )。(分数:2.00)A.#123 B.123#C.*123D.123*解析:4.下列关于顺序存储结构叙述中错误的是( )。(分数:2.00)A.存储密度大B.逻辑上相邻的结点物理上不必邻 C.可
22、以通过计算直接确定第 i 个结点的存储地址D.插入、删除运算操作不方便解析:5.有如下函数模板定义: templateclass T T func(T x, T y)return x*x+y*y; 在下列对 func 的调用中,错误的是( )。(分数:2.00)A.func(3,5);B.func(3.0,5.5);C.func(3,5.5) D.funcint(3,5.5);解析:6.下列叙述中正确的是( )。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.数据的逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率
23、D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 解析:7.关于数据库系统三级模式的说法,下列( )是正确的。(分数:2.00)A.外模式、概念模式、内模式都只有一个B.外模式有多个,概念模式和内模式只有一个 C.外模式只有一个,概念模式和内模式有多个D.3 个模式中,只有概念模式才是真正存在的解析:8.以下不使用线性结构表示实体之间联系的模型的是( )。(分数:2.00)A.线性表B.栈和队列C.二叉树 D.以上三个都不是解析:9.下列关于运算符重载的描述中,正确的是( )。(分数:2.00)A.运算符重载可以改变运算符的操作数的个数B.运算符重载可以改变优先级C.运
24、算符重载可以改变结合性D.运算符重载不可以改变语法结构 解析:10.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指( )。(分数:2.00)A.模块间的关系B.系统结构部件转换成软件的过程描述 C.软件层次结构D.软件开发过程解析:11.关于在调用模板函数时模板实参的使用,下列表述正确的是( )。(分数:2.00)A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模板
25、实参,任何情况下都不能省略 解析:12.以下四种说法中,正确的一项是( )。(分数:2.00)A.C+允许在字符串上进行整体操作 B.语句:char vn=“Brown“; 将 vn 定义成一个有 5 个元素的数组,因为“Brown“中含有 5 个字符C.对指针只要赋给一个地址值就可以了D.一维的指针数组实际上是一个二维数组解析:13.如果类 A 被说明成类 B 的友元,则( )。(分数:2.00)A.类 A 的成员即类 B 的成员B.类 B 的成员即类 A 的成员C.类 A 的成员函数不得访问类 B 的成员D.类 A 的成员函数可以访问类 B 的成员 解析:14.有如下程序 #include
26、 iostream #include iomanip using namespace std; int main( ) coutsetprecision(3)fixedsetfill(*)setw(8); cout12.345_34.567; return 0; 若程序的输出是: *12.345*34.567 则程序中下划线处遗漏的操作符是( )。(分数:2.00)A.setprecision(3)B.fixedC.setfill(*)D.setw(8) 解析:15.模板是实现类属机制的一种工具,其功能非常强大,它允许用户构造类属类,即( )。(分数:2.00)A.模板函数B.函数模板C.模板
27、类 D.类模板解析:16.下列对于虚函数和重载函数的叙述,正确的是( )。(分数:2.00)A.虚函数要求函数名、返回值类型和参数序列完全相同B.重载函数要求函数有相同的返回值类型和函数名称,并有不同的参数序列C.虚函数是根据对象的不同去调用不同类的虚函数D.虚函数和重载函数都是在运行时表现出多态功能 解析:17.下面程序的运行结果为( )。 #includeiostream.h void swap (int temp=a+; a=b; b=temp; void main() int a=2,b=3; swap(a, b); couta“,“bend1; (分数:2.00)A.2,3B.3,2
28、C.2,2D.3,3 解析:18.下列选项中不属于软件生命周期开发阶段任务的是( )。(分数:2.00)A.软件测试B.概要设计C.软件维护 D.详细设计解析:19.有如下定义语句:int a=1,2,3,4,5);,则对语句 int *p=a;正确的描述是( )。(分数:2.00)A.语句 int *p=a;定义不正确B.语句 int *p=a;初始化变量 p,使其指向数组对象 a 的第一个元素 C.语句 int *p=a;是把 a0的值赋给变量 pD.语句 int *p=a;是把 a1的值赋给变量 p解析:20.下列字符串中,正确的 C+标识符是( )。(分数:2.00)A.foo-1B.
29、2bC.newD._256 解析:21.一个类的友元函数或友元类能够通过成员操作符访问该类的( )。(分数:2.00)A.私有成员B.保护成员C.公有成员D.公用成员、保护成员和私有成员 解析:22.( )复审应该把重点放在系统的总体结构、模块划分、内外接口等方面。(分数:2.00)A.详细设计B.系统设计 C.正式D.非正式解析:23.以下关键字不能用来声明类的访问权限的是( )。(分数:2.00)A.publicB.static C.protectedD.private解析:24.有如下程序: #include iostream using namespace std; class AA
30、int n; public: AA(int k):n(k) int get()return n; int get()constreturn n+1; int main() AA a(5); const AA b(6); couta.get()b.get(); return 0; 执行后的输出结果是( )。(分数:2.00)A.55B.57 C.75D.77解析:25.设有以下说明和定义: #includeiostream. h Void main() typedef union long i; int k5; char c; DATE; struct date int cat; DATE co
31、w; double dog; too; DATE max; cout(sizeof(struct date)+sizeof(max)end1;(分数:2.00)A.26B.52 C.18D.8解析:26.下列叙述中正确的是( )。(分数:2.00)A.黑箱(盒)测试方法完全不考虑程序的内部结构和内部特征 B.黑箱(盒)测试方法主要考虑程序的内部结构和内部特征C.白箱(盒)测试不考虑程序内部的逻辑结构D.上述三种说法都不对解析:27.下列运算符不能重载为友元函数的是( )。(分数:2.00)A. () - B.+ - + -C. D.+ - * /解析:28.在下面叙述中,不正确的是( )。(分
32、数:2.00)A.一个类的所有对象都有各自的数据成员,它们共享函数成员B.一个类中可以有多个同名的成员函数C.一个类中可以有多个构造函数、多个析构函数 D.在一个类中可以声明另一个类的对象作为它的数据成员解析:29.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则( )。(分数:2.00)A.完全相同 B.完全不同C.部分相同,部分不同D.以上都不对解析:30.下列关于 C+函数的叙述中,正确的是( )。(分数:2.00)A.每个函数至少要具有一个参数B.每个函数都必须返回一个值C.函数在被调用之前必须先声明 D.函数不能自己调用自己解析:31.算法具有五个特性,以
33、下选项中不属于算法特性的是( )。(分数:2.00)A.有穷性B.简洁性 C.确定性D.输入输出性解析:32.在下列选项中,没有构成死循环的程序是( )。(分数:2.00)A.int i=100; while(1) i=i%100+1; if(i100)break; B.for(;);C.int k=1000; do+k while (k=1000); D.int s=36; while(;-s;解析:33.下面关于 this 指针的说法中,不正确的是( )。(分数:2.00)A.当调用类的成员函数时,指针 this 被自动传递给该成员函数B.当调用类的成员函数时,指针 this 实际上指向了
34、该类的一个对象C.友元函数也可以被传递指针 this D.在缺省状态下,所有的成员函数都自动传递一个指针给激活它的对象解析:34.下列对派生类的表述中,错误的是( )。(分数:2.00)A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的缺省继承方式是 privateD.派生类只继承了基类的公有成员和保护成员 解析:35.带有基类的多层派生类构造函数的成员初始化列表中都要排出虚基类的构造函数,这样将对虚基类的子对象初始( )。(分数:2.00)A.与虚基类下面的派生类个数有关B.多次C.二次D.一次 解析:二、B填空题/B(总题数:15,分数:30.00)36.在数据库
35、的概念结构设计中,常用的描述工具是U 【1】 /U。(分数:2.00)填空项 1:_ (正确答案:E-R 图)解析:37.数据库系统中实现各种数据管理功能的核心软件称为U 【2】 /U。(分数:2.00)填空项 1:_ (正确答案:数据库管理系统)解析:38.数组是有序数据的集合,数组中的每个元素具有相同的U 【3】 /U。(分数:2.00)填空项 1:_ (正确答案:数据类型)解析:39.按照逻辑结构分类,数据结构可分为线性结构和非线性结构,栈属于U 【4】 /U。(分数:2.00)填空项 1:_ (正确答案:线性结构)解析:40.在程序设计阶段应该采取U 【5】 /U和逐步求精的方法,把一
36、个模块的功能逐步分解,细化为一系列具体的步骤,进而用某种程序设计语言写成程序。(分数:2.00)填空项 1:_ (正确答案:自顶而下)解析:41.下面程序的输出结果为U 【6】 /U。 #include iostream using namespace std; void initialize(int printNo, int state=0); void initialize(iht printNo= 1,int state); int main() initialize(); return 0; void initialize(int printNo, int state) coutpri
37、ntNo“,“stateend1; (分数:2.00)填空项 1:_ (正确答案:1, 0)解析:42.语句 coutsetiosflags(ios:showpos)38“-38end1;的输出结果为U 【7】 /U。(分数:2.00)填空项 1:_ (正确答案:+37-38)解析:43.友元类的所有成员函数都是另一个类的U 【8】 /U函数。(分数:2.00)填空项 1:_ (正确答案:友元)解析:44.虚函数必须是类的U 【9】 /U。(分数:2.00)填空项 1:_ (正确答案:成员函数)解析:45.类 ostream 的成员函数U 【10】 /U用于执行无格式输出,成员函数 put 用
38、于输出单个字符。(分数:2.00)填空项 1:_ (正确答案:write)解析:46.C+本身没有定义 I/O 操作,但 I/O 操作包含在 C+实现中。C+标准库 iostream 提供了基本的 I/O 类。I/O 操作分别由类 istream 和U 【11】 /U提供。(分数:2.00)填空项 1:_ (正确答案:ostream)解析:47.阅读下面程序: #include iostream.h int fun2(int m) if(m%3=0) return 1; else return 0; void fun1(int m, int for (i=1; im; i+) if(fun2(
39、i) S=S*i; void main() int n=9, s=2; fun1(n, s); coutsend1; 该程序的运行结果是U 【12】 /U。(分数:2.00)填空项 1:_ (正确答案:36)解析:48.有如下程序: #include iostream using namespace std; class PARENT public: PARENT() cout“PARENT“; ; class SON: public PARENT public: SON() cout“SON“; ; int main() SON son; PARENT *p; p= return 0; 执行上面程序的输出是U 【13】 /U。(分数:2.00)填空项 1:_ (正确答案:PARENTSON)解析:49.虚基类说明格式如下:slass 派生类名U 【14】 /U继承方式基类名。(分数:2.00)填空项 1:_ (正确答案:virtual)解析:50.下面程序的执行结果是U 【15】 /U。 #include iostream.h void main() int n=0,x=0; do n+; if(n%3=2 while(x!=1); cout“n=“nend1; (分数:2.00)填空项 1:_ (正确答案:n=23)解析: