1、国家二级( C+)笔试模拟试卷 255及答案与解析 1 2 3 4 5 时间复杂度和数据的初始排列无关,这种排序是 ( )。 ( A)堆排序 ( B)插入排序 ( C)冒泡排序 ( D)快速排序 6 有如下程序: #include iostream using namespace std; class Base protected: int i; public: int j; ; class Derived: public Base int m; public: int n; ; int main( ) Derived d; d i=0; /1 d.j=0; /2 d n1=0; /3 d n
2、=0; /4 return 0; 其中主函数中有两个赋值语句有错,这两个错误的赋值语句是 ( A) 1和 2 ( B) 1和 3 ( C) 2和 3 ( D) 2和 4 7 设有关键码序列 (16, 9, 4, 25, 15, 2, 13, 18, 17, 5, 8, 24),要按关键码值递增的次序排序,采用初始增量为 4的希尔排序法,一趟扫描后的结果为 ( )。 ( A) (15, 2, 4, 18, 16, 5, 8, 24, 17, 9, 13, 25) ( B) (2, 9, 4, 25, 15, 16, 13, 18, 17, 5, 8, 14) ( C) (9, 4, 16, 15
3、, 2, 13, 18, 17, 5, 8, 24, 15) ( D) (9, 16, 4, 25, 2, 15, 13, 18, 5, 17, 8, 24) 8 以下说法错误的是 _。 ( A)采用面向对 象方法开发软件的基本目的和主要优点是通过重用提高软件的生成率 ( B)在面向对象的程序中,对象是属性 (状态 )和方法 (操作 )的封装体 ( C)在面向对象的程序中,对象彼此间通过继承和多态性启动响应的操作 ( D)继承和多态机制是面向对象程序中实现的主要手段 9 下列不属于软件工程 3个要素的是 ( )。 ( A)工具 ( B)过程 ( C)方法 ( D)环境 10 在软件开发中,下面
4、任务不属于设计阶段的是 ( A)数据结构设计 ( B)给出系统模块结构 ( C)定义模块算法 ( D)定义需求并建立系统模 型 11 一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本,此虚函数又称为 ( A)虚析构函数 ( B)虚构造函数 ( C)纯虚函数 ( D)静态成员函数 12 下列程序的运行结果为 ( )。 #include iostream.h void main() int a=2; int b=a+1; cout a/b endl; ( A) 0.66667 ( B) 0 ( C) 0.7 ( D) 0.66666666 13 对于常数据成员,
5、下面描述正确的是 ( A)常数据成员可以不初始化,并且不能更新 ( B)常数据成员必须被初始化,并且不能更新 ( C)常数据成员可以不初始化,并且可以被更新 ( D)常数据成员必须被初始化,并且可以被更新 14 已知在函数 func()中语句 this- ff=0;与语句 fi=O;的效果完全相同。对于这一现象,下列表述中错误的是 ( )。 ( A) ff是某个类的数据成员, func()是该类的友元函数 ( B) ff是某个类的数据成员, func()是该类的成员函数 ( C) this- ff和 ff是同一个变量 ( D) func不是一个静态成员函数 15 下列程序是用来判断数组中特定元
6、素的位置所在,则输出结果为 #includeconio.h #include iostream.h int fun(int * s,int t,int * k) int i; *k 0; for(i 0;i t;i ) if(s * k si ) *k i; retum s * k ; void main( ) int a10 876,675,896,101,301,401,980,431,451,777,k; fun(a,10, cout k , ak ; ( A) 7,431 ( B) 6 ( C) 980 ( D) 6,980 16 有如下程序: #include void fun(in
7、t&x, int y)int t=x; x=y; y=t; int main() int a2=23, 42; fun(a1, a0); std: cout1; -i)cout1”说明当 i的值大于 1时重复执行循环体; “-i”表示每循环一次减 1。当 i等于 1的时候跳出循环,此时循环次数为 49次。 19 【正确答案】 B 20 【正确答案】 B 21 【正确答案】 A 22 【正确答案】 A 23 【正确答案】 D 24 【正确答案】 C 25 【正确答案】 B 26 【正确答案】 B 【试题解析】 本题考核静态数据成员和静态成员函数的应用。程序中定义一个类sample,它包括一个静态
8、数据成员 n和一个静态成员函数 add,并在类的构造函数中给类私有静态数据成员 n赋值。在主函数 main 中,定义对象 a(2)时,通过构造函数使静态数据成员 n 的值变为 2,在定义对象 b(5)时,通过构造函数使静态数据成员 n=5(覆盖了前面的 n=2),再执行 sample:add()使全局变量 s=5。 27 【正确答案】 D 【试题解析】 本题考查数组的定义、初始化及其引用, 以及对字符 ASCII码值的熟悉程度。解本题的关键在于熟悉字符的 ASCII码值。字符在进行数学运算时取其 ASCII码值,其中 b,的 ASCII码值为 98, d的 ASCII 码值为 100,字符2的
9、 ASCII码值为 50。根据以上知识,可知 D)选项中表达式 c2-0的值为 50。 28 【正确答案】 D 29 【正确答案】 A 30 【正确答案】 D 【试题解析】 本题考查循环的嵌套。只要注意在 c+语言中,系统在字符指针的最后位置会增加一个字符串结束符 0,执行 8次 for循环,再根据 switch 语句中的条件易知答案。注意: C+中各种条件判断,循环语句的用法。 31 【正确答案】 A 【试题解析】 两数只在函数 change内被使用,函数调用完后该内存被释放,因此没有交换两数。注意:交换两个数的方法简单说有两种一是使用指针,二是用引用。 32 【正确答案】 C 【试题解析】
10、 一个类中由系统自动生成的函数有构造函数,析构函数,拷贝构造函数。注意:内联函数只能由用户自己定义。注意:类能自动生成的函数,尤其注意构造函数和析构函数,还有拷贝构造函数。 33 【正确答案】 D 【试题解析】 解答本题时,先判断 if语句,因为 a=b+c为零,则执行 else语句。 34 【正确答案】 D 【试题解析】 本题考查的是数组的基本使用,数组还可以通过对应的指针调用传递参数,其余选项的说法都是正确的。 35 【正确答案】 A 【试题解析】 本题考察订语句的嵌套, else总是与最近的那个 if配对,只要考生按照逻辑表达式的值进行细心判断就可以得到正确的答案。考生需要注意的是,在
11、C+语言中, 0表示假,非 0即为真,因此可以用数字作为逻辑判断的依据。 36 【正确答案】 15 【试题解析】 在深度为 5的完全二叉树中,度为 2的结点数最多的是深度为 5的满二叉树。在深度为 5的满二叉树中,前 4层中所有结点的度为 2。即在深度为 5的完全二叉树中,度为 2的结点数最多相当于深度为 4的满二叉树中的结点数。深度为 4的满二叉树中的结点数为 2的 4次方 -1=15。 37 【正确答案】 调试或程序调试或软件调试或 Debug或调试程序或调试软件或debug 【试题解析】 调试也称排错,调试的目的是发现错误的位置,并改正错误。一般的调试过程分为错误侦查、错误诊断和改正错误
12、。 38 【 正确答案】 2 39 【正确答案】 白盒 【试题解析】 黑盒测试是根据程序规格说明所规定的功能来设计测试用例,它不考虑程序的内部结构和处理过程。常用的黑盒测试技术分为等价类划分、边界分析、错误猜测及因果图等。白盒测试的基本原则是保证所测模块中每一个独立路径至少被执行一次;保证所测模块所有判断的每一分支至少被执行一次;保证所测模块每一循环都在边界条件和一般条件下至少各被执行一次;验证所有内部数据结构的有效性。白盒测试的主要方法有逻辑覆盖和基本路径测试等。 40 【正确答案】 类 41 【正确 答案】 13A23B 【试题解析】 Con c1定义 c1 对象,调用 Con 的无参数构
13、造函数,输出 1, ID值变为 A,执行 show(c1)时会调用拷贝构造函数,将 c1 对象的值拷贝给 show()函数的形参,此时输出 3,然后在 show()中输出 c1 的 ID值 A, Con c2(B)定义 c2 对象,调用 Con(char ID) 构造函数,输出 2, c2 的 ID值为 B, show(c2)执行时先调用拷贝构造函数输出 3,然后输出 B。因此程序输出结果为 “13A23B”。 42 【正确答案】 循环结构 43 【正确答 案】 保护继承 【试题解析】 继承性是面向对象程序设计中最重要的机制,用户可以根据不同的需要选择 3种不同的继承方式。 44 【正确答案】
14、 A(aa), c(aaq+1)或 c(aa+1), A(aa)。 【试题解析】 题中要求用 aa初始化基类 A,用 aa+1初始化类对象成员 c,用的初始化列表的形式,即 A(aa), c(aa+1)或 c(aa+1), A(aa)。 45 【正确答案】 x=y.operator*(z)或 x=y.operator*(z) 【试题解析】 运算符函数有两种调用形式,第 一种是像一般函数那样用函数名调用,即 y.operator*(z)或者 operator*(y, z):另一种是通过运算符构成表达式,即 y*z。 46 【正确答案】 (*p)(x, y) 【试题解析】 一个函数总是占用一段连续
15、的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址 (或称入口地址 )赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为 “函数指针变量 ”。函数指针变量定义的一般形式为:类型说明符 (*指针变量名 )();其中 “类型说明符 ”表示被指函数的返回值的类型。 “(*指针变量名 )”表示 ”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。 47 【正确答案】 0 48 【正确答案】 x=y-z; 【试题解析】 本题考核运算符函数的两种调用方式。 49 【正确答案】 地址 【试题解析】 此题考查的是函数参数的传递方式。函数参数的传递方式分为传值和传地址两种。使用数组名作为函数参数,因为数组名代表的是数组的首地址,所以传递的是地址。 50 【正确答案】 new 【试题 解析】 与 C语言不同, C+提倡使用 new 操作符来动态创建对象。