1、国家二级( C+)笔试模拟试卷 250及答案与解析 1 线性表进行二分法检索,其前提条件是 ( )。 ( A)线性表以顺序方式存储,并按关键码值排好序 ( B)线性表以顺序方式存储,并按关键码的检索频率排好序 ( C)线性表以链式方式存储,并按关键码值排好序 ( D)线性表以链式方式存储,并按关键码的检索频率排好序 2 3 下面关于函数模板的表述中不正确的是 ( ) ( A)类模板的成员函数都是模板函数 ( B)类模板本身在编译过程中不会产生任何代码 ( C)类模板只能有虚拟类型的参数 ( D)用类模板定义一个对象时,实参不能省略 4 5 如下程序的输出结果是 #include iostrea
2、m 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 Test: delete P; cout “n=“ Test:getNum( ) endl; return 0; ( A) n=0 ( B) n=1 ( C) n=2 ( D) n=3 6 下列关于栈的描述中错误的是 ( )。 ( A)栈是先进后出的线性表 ( B)栈只能顺序存储
3、 ( C)栈具有记忆作用 ( D)对栈的插入与删除操作中,不需要改变栈底指针 7 下述内容中 ( )不属于软件工程管理的范畴。 ( A)软件管理学 ( B)软件心理学 ( C)软件工程经济 ( D)软件工程环境 8 已知二叉树后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是 ( A) acbed ( B) decab ( C) deabc ( D) cedba 9 下列叙述中正确的是 ( )。 ( A)一个算法的空间复杂度大,则其时间复杂度必定大 ( B)一个算法的空间复杂度大,则其时间复杂度必定小 ( C)一个算法的时间复杂度大,则其空间复杂度必定小 ( D)上述三
4、种说法都不对 10 在深度为 7的满二叉树中,叶子结点的个数为 ( A) 32 ( B) 31 ( C) 64 ( D) 63 11 C+中运算符优先级由高到低排列正确的是 ( A) : + + | ( B) * | , ( C) sizeof % + : ( D) , new sizeof 12 下面程序的运行结果是 ( )。 #include iostream.h class base protected: int a; public: base()cout “0”; ; Class basel: Virtual base public: basel()cout “1”; ; Class
5、base2: virtual base public: base2()cout “2”; ) ( A) 0123 ( B) 3120 ( C) 0312 ( D) 3012 13 对虚函数的调用 ( )。 ( A)一定使用动态联编 ( B)必须使用动态联编 ( C)一定使用静态联编 ( D)不一定使用动态联编 14 若有如下定义和语句: int s45,(*p)5; p=S; 则指针对 s数组中第三个元素的正确引用形式是 ( )。 ( A) p03 ( B) p12 ( C) p02 ( D) p13 15 执行完下列代码段之后: bool x=true, y=false, z=false;
6、x=x a=(x+ =-y); b=(x=+y); c=(x-!=y); d=(+x y-); Cout a b c d end1; 则程序执行后变量 a, b, c, d的值分别是【 】。 45 设 i, j, k均为 int型变量,则执行完 for(i=0, j=10; i =j; i+, j-)k=i+j语句后, k的值为【 】。 46 operator是运算符重载时必须使用的关键字,它和被重载的运算符连在一起,作为运算符函数的专用函数名,务必把该函数说明为 _ 的。 47 头文件 _ 中包含了执行内部 格式化所需的信息。 48 下列程序的执行结果是 _。 #include iostre
7、am.h #include iomanip.h using namespace std; voidmain() cout setfill(x) setw(10); cout “Hello“ end1; 49 若要在程序文件中进行标准输入输出操作,则必须在开始的 # include命令中使用头文件【 】。 50 “图形 ”类 Shape中定义了纯虚函数 CalArea(), “三角形 ”类 Triangle继承了类Shape,请将 Triangle类中的 CalArea函数补充完整。 class Shape public: virtual int CalArea( )=0; ; class Tr
8、iangle: public Shape public: Triangle(int s, int h): side(S), height(h) 【 】 return side*height 2; private: int side; int height; ; 国家二级( C+)笔试模拟试卷 250答案与解析 1 【正确答案】 A 【试题解析】 对线性表进行二分法检索,要求线性表是按顺序方式存储,并按关键码值的大小排好序,而不是按关键码的检索频率排序。 2 【正确答案】 A 3 【正确答案】 C 4 【正确答案】 A 5 【正确答案】 A 【试题解析】 静态数据成员的初始值 n=1,执行 Te
9、st*p=new Test;,调用构造函数后, n= 3, deletep;调用析构函数, n-=3,所以最终 n=0。 6 【正确答案】 B 7 【正确答案】 D 8 【正确答案】 D 【试题解析】 依据后序遍历序列可确定根结点为 c;再依据中序遍历序列可知其左子树由 deba构成,右子树为空;又由左子树的后序遍历序列可知其根结点为e,由中序遍历序列可知其左子树为 d,右子树由 ba构成,如下图所示。求得该二叉树的前序遍历序列为选项 D)。 9 【正确答案】 D 【试题解析】 算法的时间复杂度和算法的空间复杂度从不同的角度来衡量算法的执行情况,它们之间没有内在联系。 10 【正确答案】 C
10、【试题解析】 在二叉树的第 k 层 上,最多有 2k-1(k1)个结点。对于满二叉树来说,每一层上的结点数都达到最大值,即在满二叉树的第 k层上有 2k-1个结点。因此,在深度为 7的满二叉树中,所有叶子结点在第 7层上,即其结点数为 2k-1=27-1=64 因此,本题的正确答案为 C。 11 【正确答案】 A 12 【正确答案】 A 【试题解析】 本题考查的是含有虚基类的继承中构造函数的调用顺序,应该先调用基类的构造函数,接着是按照派生类继承列表的顺序依次调用虚基类的构造函数,最后调用派生类自己的构造函数。 13 【正确答案】 D 【试题解析】 虚函数在运行阶段和类的对象绑定在一起,这样成
11、为动态联编。虚函数声明只能出现在类声明中虚函数原型中,而不能在成员的函数体实现的时候。必须由成员函数来调用或者通过指针、引用来访问虚函数。如果通过对象名来访问虚函数,则联编在编译过程中认为是静态联编。 14 【正确答案】 C 【试题解析】 “p=s; ”语句将指针 p指向数组 s。而数组为二维数组,下标标识由 0开始,所以第二个元素为下标为 0行的 2列,即 p02。 15 【正确答案】 A 【试题解析】 其中 “x=x”时,就会先调用虚基类 Base的构造函数,使得 x=0,然后执行类 Derived 1的构造函数使得 x=10,再执行类 Derived 2 的构造函数,使得 x=20。最后
12、输出 x的值为 20。 42 【正确答案】 2213 【试题解析】 B bb将定义一个 B型对象 bb,这时需调用 B 的构造函数,在该构造函数中,将输出 ”2”; C cc将定义一个 C型对象 cc,这时需调用 C的构造函数,而该函数为缺省构造函数 ,其将调用父类 B 的构造函数,在该构造函数中,将输出 “2”;由于 p 采用指针方式调用成员函数 f,而 f 在基类中被声明为虚拟函数,故函数 f的执行与指针 p所指向对象的实际类型相一致, p指向一个 C型对象cc,故执行 p-f()时,将执行 C的 f函数,在该函数中,首先直接调用了父类 B的函数 f而在 B 中直接继承了 A类的 f 函数
13、,故先要执行 A的 f函数,输出 “1”,然后再输出 “3”。 43 【正确答案】 FUN double (7) 【试题解析】 实参类型和返回值类型不匹配时,需要强制转换参数类型,所以在函数模板调用时 要显式地定义参数数据类型 double,将整数 7转换为 double型。 44 【正确答案】 1 1 0 0 45 【正确答案】 10 【试题解析】 该 for语句以 i为 0、 j为 10初始化,循环条件是 i =j,每次循环后 i增 1、 j减 1,循环体是将 i与 j的和赋给 k。这样变量 k将保存的是最后一次赋给它的值。一次循环后 i为 1、 j为 9,二次循环后 i为 2、 j为 8
14、, ,五次循环后 i为 5、 j为 5,继续第六次循环,将 i与 j的和 10存于 k后, i为 6、 j为 4,结束循环。所以循环执行后 k为 10。 46 【正确答案 】 public 47 【正确答案】 strstrea.h 48 【正确答案】 xxxxxHello 【试题解析】 此题考查的是 I/O 的格式化输出。 Setfill(x)表示填充字符为 V,并且一直有效; setw(10)表示将输入输出的宽度设置为 10,宽度设置的效果只对以此次输入或输出有效,在完成一个数据的输入或输出后,宽度自动恢复为 0;题目中字符串 “Hello”的宽度不够 10,所以其前面将有 5个填充符 V。 49 【正确答案】 iostream.h 【试题解析】 本头文件和重要,包含 了基本输入输出所需要的库函数。 50 【正确答案】 int CalArea( ) 【试题解析】 在基类中不能对虚函数给出有意义的实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做,这就是纯虚函数的作用。所以本题应该填写 int calArea( )。