1、二级 C+笔试-286 及答案解析(总分:94.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.软件工程管理的具体内容不包括对( )管理。(分数:2.00)A.开发人员B.组织机构C.用户D.设备2.如使用 setw()的操纵符对数据进行格式输出时,应包含( )。(分数:2.00)A.iostreamhB.fstreamhC.iomaniphD.stdlibh3.数据库物理结构设计不包括( )。(分数:2.00)A.存储记录结构设计B.存储记录布局C.存储记录的值D.存取方法设计4.首先访问该结点,然后访问结点的左子树,最后访问结点的右子树,这种遍历方式称为( )。
2、(分数:2.00)A.前序遍历B.中序遍历C.后序遍历D.顺序遍历5.冒泡排序算法在最好的情况下的元素交换次数为( )。(分数:2.00)A.0B.1C.元素个数D.元素个数的 2倍6.假定 x和 y为 double型,则表达式 x=2,y=x+3/2 的值是( )。(分数:2.00)A.3.500000B.3C.2.000000D.3.0000007.下面描述正确的是( )。(分数:2.00)A.类的普通成员函数可以操作常对象B.类的成员函数可以修改常对象C.只有常成员函数才可以操作常对象D.常对象可以被常函数更新8.下面关于子类型的描述中,错误的是( )。(分数:2.00)A.子类型关系是
3、可逆的B.公有派生类的对象可以初始化基类的引用C.只有在公有继承下,派生类是基类的子类型D.子类型关系可以传递9.对于下面程序,对 p调用正确的是( )。class Apublic:fun(int i)coutiendl;main()A a;int k=0;void(A:*p)(int);p=A:fun;(分数:2.00)A.p(k);B.*ap(k)C.*p(k)D.a:*p(k)10.在 C+语言中,数据封装要解决的问题是( )。(分数:2.00)A.数据的规范化B.便于数据转换C.避免数据丢失D.防止不同模块之间数据的非法访问11.对下面的程序,正确的说法是( )。main()int a
4、,b=1,c=2;a=b+c,a+b,c+3;c=(c)? a+:b-;cout a+b,c;(分数:2.00)A.无错误B.第三行有错误C.第四行有错误D.第五行有错误12.下列运算符中,在 C+语言中不能重载的是( )。(分数:2.00)A.*B.=C.sizeofD./13.下面关于虚函数的描述,错误的是( )。(分数:2.00)A.在成员函数声明的前面加上 virtual修饰,就可把该函数声明为虚函数B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数C.虚函数可以是另一个类的友元函数,但不能是静态成员函数D.基类中说明的纯虚函数在其任何派生类中都必须实现14.关于类和对象不
5、正确的说法是( )。(分数:2.00)A.类是一种类型,它封装了数据和操作B.对象是类的实例C.一个类的对象只有一个D.一个对象必属于某个类15.在面向对象的系统中,系统责任的良好分配原则是( )。(分数:2.00)A.根据个人喜好进行分配B.在类之间均匀分配C.根据交互图的消息进行分配D.集中分配在少数控制类中16.允许用户为类定义一种模式,使得类中的某些数据成员及成员函数的返回值能去任意类型,它属于一个( )。(分数:2.00)A.函数模板B.模板函数C.类模板D.模板类17.设 x,y,t 均为 int型变量,执行语句:xy=3;t=+x|+y;,完成后,y 的值为( )。(分数:2.0
6、0)A.不确定B.4C.3D.118.下面对静态数据成员的描述中,正确的是( )。(分数:2.00)A.静态数据成员是类的所有对象共享的数据B.类的每个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象调用19.以下正确的描述是( )。(分数:2.00)A.不允许设置参数的默认值B.设置参数的默认值只能在定义函数时设置C.设置参数的默认值时,应该设置右边的参数D.设置参数的默认值时,应该全部参数都设置20.下面程序段执行结果是( )。int i=5,k;k=(+i)+(+i)+(i+);printf(“%d,%d“,k,i);(分数:2.00)A.
7、24,8B.21,8C.21,7D.24,721.以下程序的输出结果是( )。main()int i;for(i=0;i8;i+)switch(i)case 0:case 3:i+=2;case 1:case 2:i+=3;default:i+=5;couti;(分数:2.00)A.11B.35C.10D.4522.标有/*/的语句的执行次数是( )。int y=5,x=2;do y=x*x; /* */while(+y 5);(分数:2.00)A.5B.4C.2D.123.下面程序的运行结果为( )。class Astatic int n;public:A()n=1;A(int num)n=
8、num;void print()coutn;A:n=0;void main()A a,b(2);a.print();b.pint();(分数:2.00)A.12B.11C.22D.2124.数据库的逻辑结构设计阶段的任务是将概念结构设计阶段所得到的概念模型转换为具体 DBMS所能支持的( )。(分数:2.00)A.记录模型B.具体模型C.数据模型D.参数模型25.字符串通常采用的两种存储方式是( )。(分数:2.00)A.链式存储结构和索引存储结构B.顺序存储结构和散列存储结构C.顺序存储结构和链式存储结构D.索引存储结构和散列存储结构26.下列程序的输出结果为( )。int fun(int
9、n)if(n=0)return 1;else return n*fun(n-1):return 0;void main()eoutfunc(4)endl;(分数:2.00)A.1B.10C.24D.1127.如果定义了一个类 myclass,则为 myclass类对象以成员函数形式重载后+运算符的声明应该为( )。(分数:2.00)A.myclass operator +();B.myelass& operator +();C.myclass operator+(int);D.myclass& operator+(int);28.依照某种数据模型组织起来并存放二级存储器中的数据集合是指( )。
10、(分数:2.00)A.数据库B.数据表C.数据仓库D.数据记录29.下面程序的运行结果是( )。#include iostreamusing namespace std;template class Tclass AT x,y;public:A(T a,T b)x=a;y=b;int add()return x+y;void main()Adoublea(7.8,3.4);Acharb(7.8,3.4);couta.add()“,“b.add();(分数:2.00)A.10,10B.11,11C.11,10D.以上答案都不对30.关于 this指针的说法错误的是( )。(分数:2.00)A.t
11、his指针必须显示说明B.当创建一个对象后,this 指针就指向该对象C.成员函数拥有 this指针D.静态成员函数不拥有 this指针31.下列描述中正确的是( )。(分数:2.00)A.构造函数可以为虚函数,析构函数不可以为虚函数B.构造函数不可以为虚函数,析构函数可以为虚函数C.构造函数可以为虚函数,析构函数可以为虚函数D.构造函数不可以为虚函数,析构函数不可以为虚函数32.private访问属性限制对象的成员,可以在( )中访问。(分数:2.00)A.本类的成员函数B.main函数C.父类的成员函数D.子类的成员函数33.软件测试中根据测试用例设计的方法的不同可分为黑盒测试和白盒测试两
12、种,它们( )。(分数:2.00)A.前者属于静态测试,后者属于动态测试B.前者属于动态测试,后者属于静态测试C.都属于静态测试D.都属于动态测试34.当要求两个变量不能同名时,它是指在( )的情况下。(分数:2.00)A.同一文件中B.同一作用域中C.同一类的不同成员函数中D.不同函数中35.属于关系的基本类型的是( )。(分数:2.00)A.堆栈表B.视图表C.双列表D.散列表二、填空题(总题数:12,分数:24.00)36.算法的计算量的大小称为计算的 【1】 。(分数:2.00)填空项 1:_37.在一个图中,所有顶点的度数之和等于所有边数的 【2】 倍。(分数:2.00)填空项 1:
13、_38.一个向量(即一批地址连续的存储单元)第一个元素的存储地址是 100,每个元素的长度为 2,则第 5个元素的地址是 【3】 。(分数:2.00)填空项 1:_39.生产一个最终能满足需求并且达到工程目标的软件产品所需要的步骤被称为 【4】 。(分数:2.00)填空项 1:_40.关系的三类完整性规则分别是:实体完整性规则、参照完整性规则和 【5】 规则。(分数:2.00)填空项 1:_41.int k=10;float a=3.5,b=6.7,c; c=a+k%3*(int)(a+b)%2/4; 则 c的值 【6】 。(分数:2.00)填空项 1:_42.若执行下面程序段后的输出为:34
14、5,请填空。int a,b=3,c=5;a=bc? 【7】 :c+;coutabc;(分数:2.00)填空项 1:_43.在双目运算符中需要声明其右操作数时,完成的是 【8】 重载,而需要声明全部操作数时,完成的是 【9】 重载。(分数:2.00)填空项 1:_44.一个类中有 【10】 个构造函数。(分数:2.00)填空项 1:_45.在 C+类的规定中:静态函数只能给引用类的静态成员和 【11】 。(分数:2.00)填空项 1:_46.在编译时才确定的函数调用称为 【12】 ,它是通过使用 【13】 来实现的。(分数:2.00)填空项 1:_47.将下面程序补充完整。#include io
15、streamusing namespace std;class Basepublic:【14】 fun()return 0; /声明虚函数;class Derived:public Basepublic:x,y;void SetVal(int a,int b)int fun()return x+y;void 【15】 SetVal(int a,int b)x=a;y=b; /类 Derived成员函数void main()Derived d;coutdfun()endl;(分数:2.00)填空项 1:_二级 C+笔试-286 答案解析(总分:94.00,做题时间:90 分钟)一、选择题(总题数
16、:35,分数:70.00)1.软件工程管理的具体内容不包括对( )管理。(分数:2.00)A.开发人员B.组织机构C.用户D.设备 解析:解析 软件工程管理包括六个子域,即启动和范围定义、软件项目计划、软件项目实施、评审与评价、关闭、软件工程度量。软件工程管理的具体内容包括对开发人员、组织机构、用户、文档资料等方面的管理。2.如使用 setw()的操纵符对数据进行格式输出时,应包含( )。(分数:2.00)A.iostreamhB.fstreamhC.iomaniph D.stdlibh解析:解析 setw 包含在 iomainip.h中。3.数据库物理结构设计不包括( )。(分数:2.00)
17、A.存储记录结构设计B.存储记录布局C.存储记录的值 D.存取方法设计解析:解析 数据库物理结构设计主要包括存储记录结构设计、存储记录布局和存取方法设计三个方面。4.首先访问该结点,然后访问结点的左子树,最后访问结点的右子树,这种遍历方式称为( )。(分数:2.00)A.前序遍历 B.中序遍历C.后序遍历D.顺序遍历解析:解析 前序遍历序列的顺序是先根、再左子树、最后右子树;中序遍历序列的顺序是先左子树、再根、最后右子树;后序遍历序列的顺序是先左子树、再右子树、最后根。5.冒泡排序算法在最好的情况下的元素交换次数为( )。(分数:2.00)A.0 B.1C.元素个数D.元素个数的 2倍解析:解
18、析 在数据已经排序好的情况下,冒泡排序算法不需要进行元素交换。6.假定 x和 y为 double型,则表达式 x=2,y=x+3/2 的值是( )。(分数:2.00)A.3.500000B.3C.2.000000D.3.000000 解析:解析 其中 3/2=1。7.下面描述正确的是( )。(分数:2.00)A.类的普通成员函数可以操作常对象B.类的成员函数可以修改常对象C.只有常成员函数才可以操作常对象 D.常对象可以被常函数更新解析:解析 只有常成员函数才可以操作常对象,常对象不可更新。8.下面关于子类型的描述中,错误的是( )。(分数:2.00)A.子类型关系是可逆的 B.公有派生类的对
19、象可以初始化基类的引用C.只有在公有继承下,派生类是基类的子类型D.子类型关系可以传递解析:解析 子类型关系不可逆。9.对于下面程序,对 p调用正确的是( )。class Apublic:fun(int i)coutiendl;main()A a;int k=0;void(A:*p)(int);p=A:fun;(分数:2.00)A.p(k);B.*ap(k)C.*p(k) D.a:*p(k)解析:解析 使用类函数指针格式是:对象名*指针名=(实参表)10.在 C+语言中,数据封装要解决的问题是( )。(分数:2.00)A.数据的规范化B.便于数据转换C.避免数据丢失D.防止不同模块之间数据的非
20、法访问 解析:解析 封装的含义。11.对下面的程序,正确的说法是( )。main()int a,b=1,c=2;a=b+c,a+b,c+3;c=(c)? a+:b-;cout a+b,c;(分数:2.00)A.无错误 B.第三行有错误C.第四行有错误D.第五行有错误解析:解析 第三行是由逗号表达式组成的语句,第四行是由条件表达式组成的语句,第五行 printf语句的输出项为逗号表达式,本题没有语法错误。12.下列运算符中,在 C+语言中不能重载的是( )。(分数:2.00)A.*B.=C.sizeof D./解析:解析 除了类属关系运算符“”、成员指针运算符“*”、作用域运算符“:”、size
21、of运算符合三目运算符“?:”以外,其余都可以重载。13.下面关于虚函数的描述,错误的是( )。(分数:2.00)A.在成员函数声明的前面加上 virtual修饰,就可把该函数声明为虚函数B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数 C.虚函数可以是另一个类的友元函数,但不能是静态成员函数D.基类中说明的纯虚函数在其任何派生类中都必须实现解析:解析 虚函数的特性。14.关于类和对象不正确的说法是( )。(分数:2.00)A.类是一种类型,它封装了数据和操作B.对象是类的实例C.一个类的对象只有一个 D.一个对象必属于某个类解析:解析 一个类可以声明多个对象。15.在面向对象的
22、系统中,系统责任的良好分配原则是( )。(分数:2.00)A.根据个人喜好进行分配B.在类之间均匀分配C.根据交互图的消息进行分配D.集中分配在少数控制类中 解析:解析 在面向对象的系统中,系统责任的良好分配原则是集中分配在少数控制类中。16.允许用户为类定义一种模式,使得类中的某些数据成员及成员函数的返回值能去任意类型,它属于一个( )。(分数:2.00)A.函数模板B.模板函数C.类模板 D.模板类解析:解析 类模板的定义。注意类模板和模板类的区别:类模板不是一个具体的类,使用时必须首先实例化为具体的模板类,然后通过模板类定义对象。17.设 x,y,t 均为 int型变量,执行语句:xy=
23、3;t=+x|+y;,完成后,y 的值为( )。(分数:2.00)A.不确定B.4C.3 D.1解析:解析 对|构成的语句从左向右执行,如果出现真,则|后面的语句不执行。18.下面对静态数据成员的描述中,正确的是( )。(分数:2.00)A.静态数据成员是类的所有对象共享的数据 B.类的每个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象调用解析:解析 静态数据成员是类的所有对象共享的数据。19.以下正确的描述是( )。(分数:2.00)A.不允许设置参数的默认值B.设置参数的默认值只能在定义函数时设置C.设置参数的默认值时,应该设置右边的参数
24、D.设置参数的默认值时,应该全部参数都设置解析:解析 设置默认参数值从右向左。20.下面程序段执行结果是( )。int i=5,k;k=(+i)+(+i)+(i+);printf(“%d,%d“,k,i);(分数:2.00)A.24,8B.21,8 C.21,7D.24,7解析:解析 k=(+i)+(+i)+(i+)表达式中,“+”号在 i前面的有两个,所以在计算 k之前,i 要先增两次,即 i变为 7,然后再将 3个 7相加,使 k得 21;表达式中“+”号在 i后面的有 1个,所以得出k的值以后 i又增 1次变为 8。21.以下程序的输出结果是( )。main()int i;for(i=0
25、;i8;i+)switch(i)case 0:case 3:i+=2;case 1:case 2:i+=3;default:i+=5;couti;(分数:2.00)A.11 B.35C.10D.45解析:解析 初始 i=0,则 case 0成立,由于没有 break,则所有语句将都执行,则 i=10,再执行 i+,则 i=11。22.标有/*/的语句的执行次数是( )。int y=5,x=2;do y=x*x; /* */while(+y 5);(分数:2.00)A.5B.4C.2D.1 解析:解析 dowhile 循环无条件执行一次。23.下面程序的运行结果为( )。class Astati
26、c int n;public:A()n=1;A(int num)n=num;void print()coutn;A:n=0;void main()A a,b(2);a.print();b.pint();(分数:2.00)A.12B.11C.22 D.21解析:解析 n 是类的静态数据成员,发生静态数据成员的赋值,则所有对象的静态数据成员的值都发生改变。24.数据库的逻辑结构设计阶段的任务是将概念结构设计阶段所得到的概念模型转换为具体 DBMS所能支持的( )。(分数:2.00)A.记录模型B.具体模型C.数据模型 D.参数模型解析:解析 概念模型用于信息世界的建模,其不依赖于某一个 DBMS支
27、持的数据模型。概念模型可以转换为计算机上某一 DBMS支持的特定数据模型。25.字符串通常采用的两种存储方式是( )。(分数:2.00)A.链式存储结构和索引存储结构B.顺序存储结构和散列存储结构C.顺序存储结构和链式存储结构 D.索引存储结构和散列存储结构解析:解析 字符串的两种最基本的存储方式是顺序存储方式和链接存储方式。26.下列程序的输出结果为( )。int fun(int n)if(n=0)return 1;else return n*fun(n-1):return 0;void main()eoutfunc(4)endl;(分数:2.00)A.1B.10C.24 D.11解析:解析
28、 递归函数求阶乘,4!=24。27.如果定义了一个类 myclass,则为 myclass类对象以成员函数形式重载后+运算符的声明应该为( )。(分数:2.00)A.myclass operator +();B.myelass& operator +();C.myclass operator+(int); D.myclass& operator+(int);解析:解析 运算符重载函数说明为类的成员函数的格式:类名operator运算符(参数表)28.依照某种数据模型组织起来并存放二级存储器中的数据集合是指( )。(分数:2.00)A.数据库 B.数据表C.数据仓库D.数据记录解析:解析 数据库
29、是依照某种数据模型组织起来并存放二级存储器中的数据集合。29.下面程序的运行结果是( )。#include iostreamusing namespace std;template class Tclass AT x,y;public:A(T a,T b)x=a;y=b;int add()return x+y;void main()Adoublea(7.8,3.4);Acharb(7.8,3.4);couta.add()“,“b.add();(分数:2.00)A.10,10B.11,11C.11,10 D.以上答案都不对解析:解析 模板函数的调用,执行语句 Adoublea(7.8,3.4);
30、后,则 a.x=7.8、a.y=3.4;执行语句 Achar b(7.8,3.4);后,将对 7.8和 3.4转换为 char类型,则 b.x=7、b.y=3;函数 add()为整形,x+y 将转换为整形。30.关于 this指针的说法错误的是( )。(分数:2.00)A.this指针必须显示说明 B.当创建一个对象后,this 指针就指向该对象C.成员函数拥有 this指针D.静态成员函数不拥有 this指针解析:解析 在 C+中,每个当前对象都含有一个指向该对象的 this指针,this 指针只能在类的成员函数中使用,其中静态成员函数不能够有 this指针。31.下列描述中正确的是( )。
31、(分数:2.00)A.构造函数可以为虚函数,析构函数不可以为虚函数B.构造函数不可以为虚函数,析构函数可以为虚函数 C.构造函数可以为虚函数,析构函数可以为虚函数D.构造函数不可以为虚函数,析构函数不可以为虚函数解析:解析 构造函数不可以为虚函数,但可以调用虚函数;析构函数可以为虚函数。32.private访问属性限制对象的成员,可以在( )中访问。(分数:2.00)A.本类的成员函数 B.main函数C.父类的成员函数D.子类的成员函数解析:解析 私有成员只能被本类的成员函数或者友元函数访问。33.软件测试中根据测试用例设计的方法的不同可分为黑盒测试和白盒测试两种,它们( )。(分数:2.0
32、0)A.前者属于静态测试,后者属于动态测试B.前者属于动态测试,后者属于静态测试C.都属于静态测试D.都属于动态测试 解析:解析 常用的软件测试方法有两大类:静态测试方法和动态测试方法。静态测试主要是以一些人工的模拟技术对软件进行分析和测试。动态测试包括黑盒测试和白盒测试两种。34.当要求两个变量不能同名时,它是指在( )的情况下。(分数:2.00)A.同一文件中B.同一作用域中 C.同一类的不同成员函数中D.不同函数中解析:解析 在同一作用域中,两个变量不能够重名。35.属于关系的基本类型的是( )。(分数:2.00)A.堆栈表B.视图表 C.双列表D.散列表解析:解析 数据库中关系的基本类
33、型包括基本表、视图表和查询表。基本表是关系数据库中实际存在的表,是实际存储数据的逻辑表示;视图表是由基本表或其他视图表导出的表;查询表是指查询结果表或查询中生成的临时表。二、填空题(总题数:12,分数:24.00)36.算法的计算量的大小称为计算的 【1】 。(分数:2.00)填空项 1:_ (正确答案:复杂度)解析:解析 算法计算量的大小称为计算的复杂度。37.在一个图中,所有顶点的度数之和等于所有边数的 【2】 倍。(分数:2.00)填空项 1:_ (正确答案:2)解析:解析 在一个图中,所有顶点的度数之和等于所有边数的 2倍。38.一个向量(即一批地址连续的存储单元)第一个元素的存储地址
34、是 100,每个元素的长度为 2,则第 5个元素的地址是 【3】 。(分数:2.00)填空项 1:_ (正确答案:108)解析:解析 第一个元素占用 100和 101,第二个元素占用 102和 103,第三个元素占用 104和 105,第四个元素占用 106和 107,第五个元素占用 108和 10939.生产一个最终能满足需求并且达到工程目标的软件产品所需要的步骤被称为 【4】 。(分数:2.00)填空项 1:_ (正确答案:软件工程过程)解析:解析 生产一个最终能满足需求并且达到工程目标的软件产品所需要的步骤被称为软件工程过程。40.关系的三类完整性规则分别是:实体完整性规则、参照完整性规
35、则和 【5】 规则。(分数:2.00)填空项 1:_ (正确答案:用户定义完整性)解析:解析 为了维护数据库中的数据与现实世界的一致性,关系数据库必须遵循三类完整性约束规则,分别是:实体完整性规则、参照完整性规则(又称引用完整性规则)和用户定义完整性规则。41.int k=10;float a=3.5,b=6.7,c; c=a+k%3*(int)(a+b)%2/4; 则 c的值 【6】 。(分数:2.00)填空项 1:_ (正确答案:3.5)解析:解析 运算符的优先级概念,式中要先算(a+b)的值,再算强制类型变换,*、/、%是同级的要从左到右计算,最后算加法和赋值。42.若执行下面程序段后的
36、输出为:345,请填空。int a,b=3,c=5;a=bc? 【7】 :c+;coutabc;(分数:2.00)填空项 1:_ (正确答案:b+ 或者 4)解析:解析 条件运算符和增量运算符的概念,题中 bc 为真,应取 b+的值给 a,因 b的值是先用后增 1,所以 a为 3,题中的 C+没有执行到,c 保持原值。43.在双目运算符中需要声明其右操作数时,完成的是 【8】 重载,而需要声明全部操作数时,完成的是 【9】 重载。(分数:2.00)填空项 1:_ (正确答案:类成员函数 友元函数)解析:解析 单目运算符作为类成员函数重载时没有形参;双目运算符作为类成员函数重载时需声明其右操作数
37、;作为友元函数重载时需要声明全部操作数。44.一个类中有 【10】 个构造函数。(分数:2.00)填空项 1:_ (正确答案:多)解析:解析 一个类中可以有多个构造函数,但只能由一个析构函数。如果没有特殊定义构造函数或者析构函数,系统都会自动建立一个默认的构造函数或者析构函数。45.在 C+类的规定中:静态函数只能给引用类的静态成员和 【11】 。(分数:2.00)填空项 1:_ (正确答案:非数据成员)解析:解析 在 C+类的规定中,静态函数只能给引用类的静态成员和非数据成员。46.在编译时才确定的函数调用称为 【12】 ,它是通过使用 【13】 来实现的。(分数:2.00)填空项 1:_
38、(正确答案:静态联编、重载函数)解析:解析 静态联编的定义:在编译时才确定的函数调用称为静态联编,它是通过使用重载函数来实现的。47.将下面程序补充完整。#include iostreamusing namespace std;class Basepublic:【14】 fun()return 0; /声明虚函数;class Derived:public Basepublic:x,y;void SetVal(int a,int b)int fun()return x+y;void 【15】 SetVal(int a,int b)x=a;y=b; /类 Derived成员函数void main()Derived d;coutdfun()endl;(分数:2.00)填空项 1:_ (正确答案:virtual int Derived:)解析:解析 virtual int 用于声明虚函数;Derived:用于指定类 Derived成员函数。