1、二级 C+-26及答案解析(总分:86.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:61.00)1.有如下类定义:class Funpublic:Fun(int v):value(v)/Fun()/private:Fun,/int value=0;/;其中存在语法错误的行是U /U。 A. B. C. D. (分数:2.00)A.B.C.D.2.对关系 S和关系 R进行集合运算,结果中既包含 S中元组也包含 R中元组,这种集合运算称为U /U。 A.并运算 B.交运算 C.差运算 D.积运算(分数:2.00)A.B.C.D.3.类模板的使用实际上是将类模板实例化成一个具体
2、的U /U。 A. 类 B. 对象 C. 函数 D. 模板类(分数:2.00)A.B.C.D.4.有如下程序:#includeiostreamusing namespace std;int main()int sum;for(int i=0;i6;i+=3)sum=i;for(int j=i;j6;j+)sum+=j;coutsumend1;return 0;运行时的输出结果是U /U。 A. 3 B. 10 C. 12 D. 15(分数:2.00)A.B.C.D.5.在下列几种排序方法中,要求内存量最大的是U /U。 A.插入排序 B.选择排序 C.快速排序 D.归并排序(分数:2.00)A
3、.B.C.D.6.有如下类和对象的定义:class Constantspublic:static double getPI() return 3.1416;Constants constants;下列各组语句中,能输出 3.1416的是_。 A.coutconstants-getPI();和 coutConstants:getPI(); B.coutconstants.getPI();和 coutConstants.getPI(); C.coutconstants-getPI();和 coutConstants-getPI(); D.coutconstants.getPI();和 coutCo
4、nstants:getPI();(分数:1.00)A.B.C.D.7.下列程序的输出结果为U /U。main() int a=4,b=3,c=1,dd=ac=a+b;return c;void main()int x=6,y=7,z=8,r;r=fun(x-,y+,x+y),z-);coutrendl;则该程序的输出结果是U /U。 A.11 B.20 C.21 D.31(分数:2.00)A.B.C.D.13.编译时的多态性可以通过使用U /U获得。 A.虚函数和指针 B.重载函数和析构函数 C.虚函数和对象 D.虚函数和引用 (分数:1.00)A.B.C.D.14.对于以下带参数的 main
5、()函数的第二形参,void main(int argc, _),不可能的形式是 A. char * argv B. char argv C. char * *a D. char * m(分数:2.00)A.B.C.D.15.类模板的使用实际上是将类模板实例化为一个具体的 _。 A. 类 B. 对象 C. 函数 D. 模板类(分数:2.00)A.B.C.D.16.在 C+中,cin 是一个_。 A.类 B.对象 C.模板 D.函数(分数:2.50)A.B.C.D.17.下面关于函数模板的表述中不正确的是U /U。 A. 类模板的成员函数都是模板函数 B. 类模板本身在编译过程中不会产生任何代码
6、 C. 类模板只能有虚拟类型的参数 D. 用类模板定义一个对象时,实参不能省略(分数:2.00)A.B.C.D.18.表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是U /U。 A.showbase()和 eof() B.showpoint()和 eof() C.showpoint()和 bad() D.showpoint()和 good() (分数:1.00)A.B.C.D.19.下面程式程序的执行结果是U /U。#include iostream.hvoid main() int*p,r;p=new int;*p=20;r=sizeof(*p);coutrendl;delete
7、 p; A.程序错误 B.内存为 20地址的大小 C.20 D.4(分数:2.00)A.B.C.D.20.下面的_ 保留字不能作为函数的返回类型。 A. void B. int C. new D. long(分数:2.00)A.B.C.D.21.如下程序运行时的输出结果是 #includeiostream using namespace std; class ONE int c; public: ONE( ):c(0)eout1; ONE(int n):C(n)cout2; ; class TW0 ONE onel; ONE one2; public: TWO(int m):one2(m)eo
8、ut3; ; int main( ) TWO t(4); return 0; A. 3 B. 23 C. 123 D. 213(分数:2.00)A.B.C.D.22.将 E-R图转换到关系模式时,实体与联系都可以表示成U /U。 A. 属性 B. 关系 C. 键 D. 域(分数:2.00)A.B.C.D.23.C+源程序文件的扩展名为U /U。 A. .CPP B. .C C. .DLL D. .EXE(分数:1.00)A.B.C.D.24.如果表达式+i*k 中的“+”和“*”都是重载的非静态成员运算符,则采用运算符函数调用格式,该表达式还可表示为= _。 A. operator*(i.pe
9、rator+(),k) B. operator*(operator+(i),k) C. (i. operator+().operator*(k) D. k.operator*(operator+(i)(分数:2.00)A.B.C.D.25.下列关于子类型的描述中,错误的是U /U。 A.子类型关系是可逆的 B.公有派生类的对象可以初始化基类的引用 C.只有公有的继承下,派生类是基类的子类型 D.子类型关系是可传递的(分数:2.00)A.B.C.D.26.U /U是给对象取一个别名,它引入了对象的同义词。 A.指针 B.引用 C.故举 D.结构 (分数:1.00)A.B.C.D.27.有如下程序
10、:#include iostreamusing namespace std;class CDpublic:CD() coutC;private:char name80;int main() CD a,*b,d2;return 0;运行时的输出结果是 A.CCCC B.CCC C.CC D.C(分数:2.00)A.B.C.D.28.下列关于运算符重载的描述中, _ 是正确的。 A. 运算符重载可以改变操作数的个数 B. 运算符重载可以改变优先级 C. 运算符重载可以改变结合性 D. 运算符重载不可以改变语法结构(分数:2.00)A.B.C.D.29.用链表表示线性表的优点是 A. 便于随机存取
11、B. 花费的存储空间较顺序存储少 C. 便于插入和删除操作 D. 数据元素的物理顺序与逻辑顺序相同(分数:1.00)A.B.C.D.30.派生类对象对其基类中的什么成员是可访问的? A. 公有继承的私有成员 B. 私有继承的公有成员 C. 私有继承的保护成员 D. 保护继承的保护成员 (分数:1.00)A.B.C.D.31.有如下定义:int a51,3,5,7,9, * p=a;下列表达式中不能得到数值 5的是 A. a2 B. a3 C. *(p+2) D. *p+4(分数:2.00)A.B.C.D.32.单个用户使用的数据视图的描述称为 A. 外模式 B. 概念模式 C. 内模式 D.
12、存储模式(分数:1.00)A.B.C.D.33.下列函数的功能是判断字符串 str是否对称,对称则返回 true,否则返回 false,则横线处应填上U/U。Bool fun(char*str)int i=0,j=0;while(strj)j+;for(j-;iji+,j-);return i_j; A. = B. | C. int ba1; cout a/b endl; ) 0.66667 ) 0 ) 0.7 ) 0.66666666(分数:2.00)A.B.C.D.35.下面的函数调用语句中 func函数的实参个数是U /U。fune(f2(v1,v2),(v3,v4,vS),(v6,ma
13、x(v7,v8); A.3 B.4 C.5 D.8(分数:2.00)A.B.C.D.二、B填空题/B(总题数:15,分数:25.00)36.下面是复数类 complex的定义,其中作为友元函数重载的运算符“-”的功能是将参数对象的实部减1,然后返回对该对象的引用;请补充完整。 class complex private: int real; int imag; public: complex(int r0,int i0):real(r),imag(i) void show() cout(real(imag0?”-”:”+”)(imagi; _; ; complex private: int n
14、; ; int f( ) MyClass * ptr=new MyClass(45);【12】 (分数:1.00)填空项 1:_45.下列说明 const chr* ptr;中,ptr 应该是U U /U /U。(分数:2.00)填空项 1:_46.如果表达式-x 中的“-”是重载的类运算符,采用运算符函数调用格式,及表达式还可以表示为 1。(分数:1.00)填空项 1:_47.非成员函数必须声明为类的 1 才能访问这个类的 private成员。(分数:2.00)填空项 1:_48.静态联编所支持的多态性称为编译时的多态性,动态联编所支持的多态性则称为运行时的多态性,动态多态性由U U /U
15、/U来支持。(分数:2.00)填空项 1:_49.下列程序在构造函数和析构函数中申请和释放类的数据成员 int *a,申请时使用形参 b初始化 a,请填空。 class A public: A(int b) ; A( ); private: int *a; ; A:A(int b) U U /U /U; A:A( ) U U /U /U; (分数:1.00)填空项 1:_50.有如下程序: #include iostream using namespace std; class ONE public: virtual void f() cout “1“; ; class TWO: public
16、 ONE public: TWO() cout “2“; ; class THREE: public TWO public: virtual void f() TWO:f(); cout “3“; ; int main() ONE aa, *p; TWO bb; THREE cc; p= P-f(); return 0; 执行上面程序的输出是U U /U /U。(分数:2.00)填空项 1:_二级 C+-26答案解析(总分:86.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:61.00)1.有如下类定义:class Funpublic:Fun(int v):value(v)
17、/Fun()/private:Fun,/int value=0;/;其中存在语法错误的行是U /U。 A. B. C. D. (分数:2.00)A.B.C.D. 解析:解析 C+中,不允许声明类成员变量的时候进行初始化,而在新的 ANSI C+标准中,可以对常整型数值在定义时进行初始化,所以语句 4是错的。2.对关系 S和关系 R进行集合运算,结果中既包含 S中元组也包含 R中元组,这种集合运算称为U /U。 A.并运算 B.交运算 C.差运算 D.积运算(分数:2.00)A. B.C.D.解析:3.类模板的使用实际上是将类模板实例化成一个具体的U /U。 A. 类 B. 对象 C. 函数 D
18、. 模板类(分数:2.00)A. B.C.D.解析:解析 类模板就是把类中的数据分离出来,作为一个类的描述。C+编译器根据类模板和特定的数据类型来产生一个类,类模板就是一个抽象的类。4.有如下程序:#includeiostreamusing namespace std;int main()int sum;for(int i=0;i6;i+=3)sum=i;for(int j=i;j6;j+)sum+=j;coutsumend1;return 0;运行时的输出结果是U /U。 A. 3 B. 10 C. 12 D. 15(分数:2.00)A.B.C.D. 解析:解析 此题考查的是 for循环。首
19、先进入外循环,根据循环条件,i 的初始化值为 0,赋值给sum,进入内循环i 的初值也被赋值为 i 的初始值 0,所以第一次内循环 sum值为 0,判断 j=0,小于6,进行第二次内循环,sum 的值为 1,同理,仍然进行内循环直到 j=6,跳出内循环,sum=15:外循环中i=3,i6,满足循环条件进入第二次外循环,i=3,sum=3,进入内循环,j=3,同理,计算内循环中 sum的值,直到 j=6跳出内循环,此时 sum=15;外循环中 i=6,跳出外循环,执行输出语句,即 sum=15。5.在下列几种排序方法中,要求内存量最大的是U /U。 A.插入排序 B.选择排序 C.快速排序 D.
20、归并排序(分数:2.00)A.B.C.D. 解析:6.有如下类和对象的定义:class Constantspublic:static double getPI() return 3.1416;Constants constants;下列各组语句中,能输出 3.1416的是_。 A.coutconstants-getPI();和 coutConstants:getPI(); B.coutconstants.getPI();和 coutConstants.getPI(); C.coutconstants-getPI();和 coutConstants-getPI(); D.coutconstant
21、s.getPI();和 coutConstants:getPI();(分数:1.00)A.B.C.D. 解析:解析 本题考查静态成员函数。静态成员函数由于没有 this指针,所以不能访问本类中的非静态成员。引用静态成员函数有 2种方式,一种是直接使用类来引用,即 Constants:getPI();另一种是使用对象来引用,即 constants.getPI()。所以本题答案为 D。7.下列程序的输出结果为U /U。main() int a=4,b=3,c=1,dd=ac=a+b;return c;void main()int x=6,y=7,z=8,r;r=fun(x-,y+,x+y),z-)
22、;coutrendl;则该程序的输出结果是U /U。 A.11 B.20 C.21 D.31(分数:2.00)A.B.C. D.解析:13.编译时的多态性可以通过使用U /U获得。 A.虚函数和指针 B.重载函数和析构函数 C.虚函数和对象 D.虚函数和引用 (分数:1.00)A.B.C. D.解析:14.对于以下带参数的 main()函数的第二形参,void main(int argc, _),不可能的形式是 A. char * argv B. char argv C. char * *a D. char * m(分数:2.00)A.B. C.D.解析:解析 本题要考查的实际是字符数组,用于
23、向函数传递参数,属于指针或引用传递方式。要注意的是考生不要被名称所迷惑,即根据 A和 D是相同类别的,故可以排除。对 C来说,也属于指针传递方式,而 B不仅不属于指针传递,而且还没有限定数组大小,编译器在编译时就会产生错误。15.类模板的使用实际上是将类模板实例化为一个具体的 _。 A. 类 B. 对象 C. 函数 D. 模板类(分数:2.00)A.B. C.D.解析:16.在 C+中,cin 是一个_。 A.类 B.对象 C.模板 D.函数(分数:2.50)A.B. C.D.解析:解析 C+提供了一套输入、输出流类的对象,它们是 cin、cout 和 cerr,对应 C语言中的 3个文件指针
24、 stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。cin与一起完成输入操作,cout、cerr 与一起完成输出与标准错误输出。17.下面关于函数模板的表述中不正确的是U /U。 A. 类模板的成员函数都是模板函数 B. 类模板本身在编译过程中不会产生任何代码 C. 类模板只能有虚拟类型的参数 D. 用类模板定义一个对象时,实参不能省略(分数:2.00)A.B.C. D.解析:解析 类模板本身在编译时是不会产生代码的。只有在其实例化以后才产生代码。定义一个对象时,不能省略其实参。18.表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是U
25、 /U。 A.showbase()和 eof() B.showpoint()和 eof() C.showpoint()和 bad() D.showpoint()和 good() (分数:1.00)A.B. C.D.解析:19.下面程式程序的执行结果是U /U。#include iostream.hvoid main() int*p,r;p=new int;*p=20;r=sizeof(*p);coutrendl;delete p; A.程序错误 B.内存为 20地址的大小 C.20 D.4(分数:2.00)A.B.C.D. 解析:20.下面的_ 保留字不能作为函数的返回类型。 A. void
26、B. int C. new D. long(分数:2.00)A.B.C. D.解析:解析 new 为分配内存保留字,所以不能为函数的返回类型。21.如下程序运行时的输出结果是 #includeiostream using namespace std; class ONE int c; public: ONE( ):c(0)eout1; ONE(int n):C(n)cout2; ; class TW0 ONE onel; ONE one2; public: TWO(int m):one2(m)eout3; ; int main( ) TWO t(4); return 0; A. 3 B. 23
27、 C. 123 D. 213(分数:2.00)A.B.C. D.解析:解析 派生类中含有对象时构造函数的调用顺序是:则先执行基类的构造函数,然后执行对象成员的构造函数,最后执行派生类的构造函数。析构函数的调用次序与构造函数的次序则相反。所以在创建对象 t4时,先调用基类无参构造函数 0NE( ):c(0),打印 1:然后调用对象 one2(m)的构造函数ONE(int n):c(n),打印 2;最后调用派生类的构造函数 TWO(int m),打印 3。22.将 E-R图转换到关系模式时,实体与联系都可以表示成U /U。 A. 属性 B. 关系 C. 键 D. 域(分数:2.00)A.B. C.
28、D.解析:解析 把概念模型转换成关系数据模型就是把 E-R图转换成一组关系模式,每一个实体转换为一个关系模式,每个联系分别转换为关系模式。23.C+源程序文件的扩展名为U /U。 A. .CPP B. .C C. .DLL D. .EXE(分数:1.00)A. B.C.D.解析:解析 本题考察有关 C+语言中有关 C+程序开发方面的知识点。C+语言源程序的扩展名为CPP,DLL 是动态连接库文件的扩展名,.EXE 是可执行文件的扩展名。24.如果表达式+i*k 中的“+”和“*”都是重载的非静态成员运算符,则采用运算符函数调用格式,该表达式还可表示为= _。 A. operator*(i.pe
29、rator+(),k) B. operator*(operator+(i),k) C. (i. operator+().operator*(k) D. k.operator*(operator+(i)(分数:2.00)A.B. C.D.解析:25.下列关于子类型的描述中,错误的是U /U。 A.子类型关系是可逆的 B.公有派生类的对象可以初始化基类的引用 C.只有公有的继承下,派生类是基类的子类型 D.子类型关系是可传递的(分数:2.00)A. B.C.D.解析:26.U /U是给对象取一个别名,它引入了对象的同义词。 A.指针 B.引用 C.故举 D.结构 (分数:1.00)A.B. C.D
30、.解析:27.有如下程序:#include iostreamusing namespace std;class CDpublic:CD() coutC;private:char name80;int main() CD a,*b,d2;return 0;运行时的输出结果是 A.CCCC B.CCC C.CC D.C(分数:2.00)A.B. C.D.解析:28.下列关于运算符重载的描述中, _ 是正确的。 A. 运算符重载可以改变操作数的个数 B. 运算符重载可以改变优先级 C. 运算符重载可以改变结合性 D. 运算符重载不可以改变语法结构(分数:2.00)A.B.C.D. 解析:29.用链表
31、表示线性表的优点是 A. 便于随机存取 B. 花费的存储空间较顺序存储少 C. 便于插入和删除操作 D. 数据元素的物理顺序与逻辑顺序相同(分数:1.00)A.B.C. D.解析:解析 链式存储结构克服了顺序存储结构的缺点:它的结点空间可以动态申请和释放;它的数据元素的逻辑次序靠结点的指针来指示,不需要移动数据元素。故链式存储结构下的线性表便于插入和删除操作。30.派生类对象对其基类中的什么成员是可访问的? A. 公有继承的私有成员 B. 私有继承的公有成员 C. 私有继承的保护成员 D. 保护继承的保护成员 (分数:1.00)A.B.C.D. 解析:解析 关于 c+语言继承问题中派生类对基类
32、的访问能力的考查 【解题要点】C+语言中通常有三种继承修饰符 public,protected,Privale,限制依次严格,另外对类中的数据和函数也有这三种修饰符进行限制,有 3种是不能继承的:公有继承基类的私有成员,私有继承基类的私有成员,保护继承基类的私有成员。31.有如下定义:int a51,3,5,7,9, * p=a;下列表达式中不能得到数值 5的是 A. a2 B. a3 C. *(p+2) D. *p+4(分数:2.00)A.B. C.D.解析:32.单个用户使用的数据视图的描述称为 A. 外模式 B. 概念模式 C. 内模式 D. 存储模式(分数:1.00)A. B.C.D.
33、解析:解析 选项 A)正确,外模式是用户的数据视图,也就是用户所见到的数据模式;选项 B)不正确,全局数据视图的描述称为概念模式,即数据库中全部数据的整体逻辑结构的描述;选项 C)不正确,物理存储数据视图的描述称为内模式,即数据库在物理存储方面的描述;选项 D)不正确,存储模式即为内模式。33.下列函数的功能是判断字符串 str是否对称,对称则返回 true,否则返回 false,则横线处应填上U/U。Bool fun(char*str)int i=0,j=0;while(strj)j+;for(j-;iji+,j-);return i_j; A. = B. | C. int ba1; cou
34、t a/b endl; ) 0.66667 ) 0 ) 0.7 ) 0.66666666(分数:2.00)A.B. C.D.解析:解析 表达式值的类型是由操作数的类型决定的,因为本题的两个数都是 int型的,所以得出的结果也为 int型,即去掉小数点后的部分,只取商的整数部分。35.下面的函数调用语句中 func函数的实参个数是U /U。fune(f2(v1,v2),(v3,v4,vS),(v6,max(v7,v8); A.3 B.4 C.5 D.8(分数:2.00)A. B.C.D.解析:解析 逗号表达式及实参的形式,在逗号表达式中,取最后一个表达式的值,结合 func的调用形式,可以知道实
35、参的个数只有 3个。二、B填空题/B(总题数:15,分数:25.00)36.下面是复数类 complex的定义,其中作为友元函数重载的运算符“-”的功能是将参数对象的实部减1,然后返回对该对象的引用;请补充完整。 class complex private: int real; int imag; public: complex(int r0,int i0):real(r),imag(i) void show() cout(real(imag0?”-”:”+”)(imagi; _; ; complex private: int n; ; int f( ) MyClass * ptr=new M
36、yClass(45);【12】 (分数:1.00)填空项 1:_ (正确答案:【12】ptr-SetNum(50);)解析:解析:本题考查的是考生使用对象指针调用成员函数的能力,指针调用成员函数应该使用符号“-)”。45.下列说明 const chr* ptr;中,ptr 应该是U U /U /U。(分数:2.00)填空项 1:_ (正确答案:指向常量的指针)解析:解析 见常量指针的定义。46.如果表达式-x 中的“-”是重载的类运算符,采用运算符函数调用格式,及表达式还可以表示为 1。(分数:1.00)填空项 1:_ (正确答案:x,operator- ())解析:47.非成员函数必须声明为
37、类的 1 才能访问这个类的 private成员。(分数:2.00)填空项 1:_ (正确答案:友元函数)解析:解析 C+的友元提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间数据共享的机制。一个类可以利用 friend将一般函数、其他类成员函数或者其他类声明为友元。友元的声明可以放在类的任何一个区域。定义须在类外声明在公有私有部分均可。48.静态联编所支持的多态性称为编译时的多态性,动态联编所支持的多态性则称为运行时的多态性,动态多态性由U U /U /U来支持。(分数:2.00)填空项 1:_ (正确答案:虚函数)解析:49.下列程序在构造函数和析构函数中申请和释放类的数据成员
38、int *a,申请时使用形参 b初始化 a,请填空。 class A public: A(int b) ; A( ); private: int *a; ; A:A(int b) U U /U /U; A:A( ) U U /U /U; (分数:1.00)填空项 1:_ (正确答案:11a=new int(B 12delete a)解析:解析 C+中 new和 delete的使用有如下几种: a=new int;delete a;a=new int(10);delete a; a=new int10;delete a;。50.有如下程序: #include iostream using namespace std; class ONE public: virtual void f() cout “1“; ; class TWO: public ONE public: TWO() cout “2“; ; class THREE: public TWO public: virtual void f() TWO:f(); cout “3“; ; int main() ONE aa, *p; TWO bb; THREE cc; p= P-f(); return 0; 执行上面程序的输出是U U /U /U。(分数:2.00)填空项 1:_ (正确答案:2213)解析: