1、二级 C+笔试-331 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:30,分数:70.00)1.若有下面的说明和定义:struct testchar m2;float m3;union uuchar u15;float u2;ua;MyStruct;则 sizeof(MyStruct)的值是( )。(分数:2.00)A.10B.11C.12D.92.在深度为 5 的满二叉树中,叶子节点的个数为( )。(分数:2.00)A.32B.31C.16D.153.考虑函数原型 void test(int a,int b=7,char z=*),下面的函数调用中,属于不合法调
2、用的是( )。(分数:2.00)A.test(5);B.test(5,8);C.test(6,#):D.test(0,0,*);4.有以下程序:#include iostreamusing namespace std;class BASEprivate:char c;public:BASE(char n):c(n);virtualBASE()coutc;class DERIVED:public BASEchar c;public:DERIVED(char n):BASE(n+1),c(n)DERIVED()coutc; ;int main()DERIVED obj(X);return 0;执行
3、上面的程序将输出( )。(分数:2.00)A.XYB.YXC.XD.Y5.已知类 Myst 有一个只需要一个 double 型参数的构造函数,且将运算符“-”重载为友元函数。要使语句序列Myst x(3.2),y(5.5),z(0.0);z=8.9-y;y=x-6.3;能够正常运行,运算符函数 operator-应该在类中声明为( )。(分数:2.00)A.friend Myst operator-(Myst!xclass Baseint a;public:Base(int x) a-x; void show() couta; ;class Derived : public Baseint b
4、;public:Derived(int i) :Base(i+1)void show() coutb; ;int main ( )Base b(5) ,*pb;Derived d(1);pb=pb-show ();return 0;运行后的打印结果是 【14】 。(分数:2.00)填空项 1:_45.执行如下程序后的输出结果是 【15】 。#include iostream#include fstreamusing namespace std;int main ( )char s25;ofstream fl(“data.txt“);f1“C+ Programming“;f1.close ();
5、ifstream f2 (“data.txt“);if (f2.good() f2s;f2.close();couts;return 0;(分数:2.00)填空项 1:_二级 C+笔试-331 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:30,分数:70.00)1.若有下面的说明和定义:struct testchar m2;float m3;union uuchar u15;float u2;ua;MyStruct;则 sizeof(MyStruct)的值是( )。(分数:2.00)A.10 B.11C.12D.9解析:解析 C+中,联合体变量所占内存字节数与其成员
6、中占字节数最多的那个成员相等。联合体中,浮点变量 u2 占 4 个字节,字符型数组 u1 占 5 个字节,所以联合体 u1 占 5 个字节。整个结构体所占字节数为 10。2.在深度为 5 的满二叉树中,叶子节点的个数为( )。(分数:2.00)A.32B.31 C.16D.15解析:解析 二叉树是一个非常重要的知识点。关于二叉树的相关出题点有很多,而且题目可能很灵活,需要考生重点复习准备。根据二叉树的定义,知道二叉树必有如下规律:深度为 m 的二叉树最多有 2m-1个节点。由此可知答案为 B。3.考虑函数原型 void test(int a,int b=7,char z=*),下面的函数调用中
7、,属于不合法调用的是( )。(分数:2.00)A.test(5);B.test(5,8);C.test(6,#): D.test(0,0,*);解析:解析 在选项 C 的调用中,将会把字符型实参#赋值给整型形参 b,这不符合参数传递规则。4.有以下程序:#include iostreamusing namespace std;class BASEprivate:char c;public:BASE(char n):c(n);virtualBASE()coutc;class DERIVED:public BASEchar c;public:DERIVED(char n):BASE(n+1),c(
8、n)DERIVED()coutc; ;int main()DERIVED obj(X);return 0;执行上面的程序将输出( )。(分数:2.00)A.XY B.YXC.XD.Y解析:解析 在 C+中,由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数结束时,派生类 DERIVED 对象 obj 将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出 X,然后调用基类的析构函数,输出 Y。5.已知类 Myst 有一个只需要一个 dou
9、ble 型参数的构造函数,且将运算符“-”重载为友元函数。要使语句序列Myst x(3.2),y(5.5),z(0.0);z=8.9-y;y=x-6.3;能够正常运行,运算符函数 operator-应该在类中声明为( )。(分数:2.00)A.friend Myst operator-(Myst!xclass Baseint a;public:Base(int x) a-x; void show() couta; ;class Derived : public Baseint b;public:Derived(int i) :Base(i+1)void show() coutb; ;int m
10、ain ( )Base b(5) ,*pb;Derived d(1);pb=pb-show ();return 0;运行后的打印结果是 【14】 。(分数:2.00)填空项 1:_ (正确答案:2)解析:解析 本例程序中类 Derived 是从基类 Base 公有继承来的。主函数中定义了基类对象 b 和一个基类指针 pb,又定义了派生类 Derived 的对象 d。由于 Derived 是 Base 的子类型,因此可以将派生类Derived 的对象 d 的地址赋值给指向基类 Base 的指针 pb,但这时指针 pb 只能使用从基类 Base 继承的成员。所以通过对象指针 pb 调用的 show
11、 函数是基类的成员函数 show(),从而输出基类私有数据成员 a 的值 2。45.执行如下程序后的输出结果是 【15】 。#include iostream#include fstreamusing namespace std;int main ( )char s25;ofstream fl(“data.txt“);f1“C+ Programming“;f1.close ();ifstream f2 (“data.txt“);if (f2.good() f2s;f2.close();couts;return 0;(分数:2.00)填空项 1:_ (正确答案:C+)解析:解析 程序先在当前目录下建立一个 data 文本文件,并写入“C+ Programming”。然后打开该文件,将其中的数据输入到变量 s 中,由于采用提取符“”读时遇到空格终止,所以最后字符数组 s中存放的是“C+”。