1、国家二级 C+机试(选择题)模拟试卷 98及答案与解析 一、选择题 1 下面关于算法的叙述中,正确的是 ( )。 ( A)算法的执行效率与数据的存储结构无关 ( B)算法的有穷性是指算法必须能在执行有限个步骤之后终止 ( C)算法的空间复杂度是指算法程序中指令 (或语句 )的条数 ( D)以上三种描述都正确 2 下列二叉树描述中,正确的是 ( )。 ( A)任何一棵二叉树必须有一个度为 2的结点 ( B)二叉树的度可以小于 2 ( C)非空二叉树有 0个或 1个根结点 ( D)至少有 2个根结点 3 如果进栈序列为 A, B, C, D,则可能的出栈序列是 ( )。 ( A) C, A, D,
2、 B ( B) B, D, C, A ( C) C, D, A, B ( D)任意顺序 4 下列各选项中,不属于序言性注释的是 ( )。 ( A)程序标题 ( B)程序设计者 ( C)主要算法 ( D)数据状态 5 下列模式中,能够给出数据库物理存储结构与物理存取方法的是 ( )。 ( A)内模式 ( B)外模式 ( C)概念模式 ( D)逻辑模式 6 下列叙述中,不属于软件需求规格说明书的作用的是 ( )。 ( A)便于 用户,开发人员进行理解和交流 ( B)反映出用户问题的结构,可以作为软件开发工作的基础和依据 ( C)作为确认测试和验收的依据 ( D)便于开发人员进行需求分析 7 下列不
3、属于软件工程 3个要素的是 ( )。 ( A)工具 ( B)过程 ( C)方法 ( D)环境 8 数据库系统在其内部具有 3级模式,用来描述数据库中全体数据的全局逻辑结构和特性的是 ( )。 ( A)外模式 ( B)概念模式 ( C)内模式 ( D)存储模式 9 将 E-R图转换到关系模式时,实体与联系都可以表示成 ( )。 ( A)属性 ( B)关系 ( C)记录 ( D)码 10 某二叉树中度为 2的结点有 10个,则该二叉树中有 ( )个叶子结点。 ( A) 9 ( B) 10 ( C) 11 ( D) 12 11 有如下程序: #include using namespace std;
4、 class A public: A()cout using namespace std; class A public: A(int i,int j) a=i: b=j; void move(int x,int y) a+=x; b+=y; void show() cout 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; intmain() Test*p=newTe
5、st; ( A) n=0 ( B) n=1 ( C) n=2 ( D) n=3 14 假定 MyClass为一个类,那么下列的函 数说明中, ( )为该类的析构函数。 ( A) voidMyClass(); ( B) MyClass(int n); ( C) MyClass(); ( D) MyClass(): 15 下列情况中,不会调用拷贝构造函数的是 ( )。 ( A)用一个对象去初始化同一类的另一个新对象时 ( B)将类的一个对象赋值给该类的另一个对象时 ( C)函数的形参是类的对象,调用函数进行形参和实参结合时 ( D)函数的返回值是类的对象,函数执行返回调用时 16 下列有关拷贝构造
6、函数的描述中错误的是 ( )。 ( A)拷贝构造函数是一种构造函数 ( B)拷贝构造函数与一般的构造函数一样,可以设置多个形参 ( C)每一个类中都必须有一个拷贝构造函数 ( D)拷贝构造函数的功能是用一个已知对象去初始化一个正在创建的对象 17 类 MyClass的定义如下,若要对 value赋值,则下面 语句正确的是 ( )。 class MyClass public: MyClass() MyClass(int i)value=new iIlt(i); ) int*value; ; ( A) MyClass my; my value=10; ( B) MyClass my; *my va
7、lue=10; ( C) MyClass my; my *value=10; ( D) MyClass my(10); 18 若有如下程序: #include using namespace std; hat s=0; class sample static im n; public: sample(int i) n=i; static void add() s+=n; ; int sample: n=0; intmain0 s ( A) 2 ( B) 5 ( C) 7 ( D) 3 19 下列运算符中不能在 C+中重载的是 ( )。 ( A) ?: ( B) + ( C)一 ( D) voi
8、d main() char flag=c; switch(flag) case a: cout using namespace std; class sample private: intx, y; public: sample(int i,int j) x=i: y=j; void disp0 cout using namespace std; class TestClass protected: TestClass 0cout using namespace std; class TestClass public: void who()cout using namespace std; c
9、lass TestClass l public: void fun0cout using namespace std; class A public: A0cout*、:、 ?: 这五个运算符之外,其他运算符都可以重载。 20 【正确答案】 B 【试题解析】 所谓函数重载是指同一函数名可以对应多个函数实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。 21 【正确答案】 C 【试题解析】 选项 C)是一个错误的 for语句格式, for()语句中三个表达式可以省略。但是两个分号 (; )不能省略。 22 【正确答案】 C 【试题解析】 第一次循环输出 1,第二次循环输出是
10、 2。在输出二次循环后 !(x)为 0条件不满足。停止循环。 23 【正确答案】 D 【试题解析】 p是一个指针,用来存储 a变量的地址,而 100是存储在该地址的一个值用 p表示的为 *p。 24 【正确答案】 D 【试题解析】 数组有 N个元素,则数组元素引用为 a(0) a(N1),共计 N个,没有 a(10)这个元素,最后的元素是 a(9)。 25 【正确答案】 C 【试题解析】 因为 flag=c,所以执行 coutwho()则是调用基类中的 who函数,输出 TestClass。 32 【正确答案】 D 【试题解析】 如果派生类私有继承基类,不能访问基类中的私有成员,所以A)、 B
11、)是错误的。派生类是对基类的具体化,所以 C)错误的。如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类,即选择 D)。 33 【正确答案】 C 【试题解析】 在建立派生类的时候,并不是简单地把基类的私有成员直接作为派生类的私有 成员,把基类的公用成员直接作为派生类的公用成员。涉及如何确定基类的成员在派生类中的访问属性问题,不仅要考虑对基类成员所声明的访问属性,还要考虑派生类所声明的对基类的继承方式,根据这两个因素共同决定基类成员在派生类中的访问属性。所以本题选择 C)。 34 【正确答案】 C 【试题解析】 由主函数 main入手,定义 TestClassl类的指针对象 p指向派生
12、类TestClass2。因为基类和派生类中都有 fun函数,题目要求输出为 2,就是基类对象访问派生类中 furl函数。通过虚函数与指向基类对象的指针变量 的配合使用,就能方便调用同名函数。所以这里将基类中的 fun函数声明为 virtual。并且当一个成员函数被声明为虚函数后,其派生类中的同名函数自动成为虚函数。 35 【正确答案】 D 【试题解析】 由主函数 main入手,定义了类 D对象 0bi。其中 D为类 B和 C的公有继承, A是 C的虚基类。题目中要求的输出结果为 “ABCD”,依次为类 A,类 B,类 C,类 D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承时,即保
13、证 A只被继承一次,输出一个 A,所以不但需要声明 A为 C的虚基类,同样也要声明 A为 B的虚基 类。 36 【正确答案】 A 【试题解析】 在基类中用 virtual声明成员函数为虚函数,所以 A是正确的。纯虚函数是在声明虚函数时被 “初始化 ”为 0的虚函数。纯虚函数是一种特殊的虚函数,它没有具体的实现。静态数据成员函数只能在类外进行初始化。 37 【正确答案】 C 【试题解析】 如果在类以外的其他地方定义了一个函数,在类体中用 friend对该函数进行声明,此函数就称为本类的友元函数。因为函数为 void fun(),根据友元定义补全语句为 “friend void fun(): ”。
14、 38 【正确答案】 C 【试题解析】 递归函数 fun被定义为含有参数 intn,返回整型。其中 fun函数递归调用本身,当 n=1时, fun返回 l,如果大于 1那么执行 n*fun(n一 2)。所以,当 n等于 5时,执行 5*fun(3);当 3时继续调用 fun, 3*fun(1),即fun(5)=5*(3*fun(1),答案为 15。 39 【正确答案】 C 【试题解析】 此题考查的知识点是字面常量。对于整型字面常量,只要没有超过C+中整数所能表示的范围, C+将自动按整数来存储此数,也可以通过在整型字面常量后添加 u或 1来指定无符号整数或长整数来存储;对于实型字面常量, C+将自动按照双精度数来存储,也可以通过在实型字面常量后添加 f来指定按单精度数存储。 40 【正确答案】 C 【试题解析】 此题考查的是内联函数的概念。在调用时,内联函数会像宏函数一样的展开,将调用表达式用内联函数体来替换,所以它没有一般函数的参数压栈和退栈操作,所以选项 A)错误;即使没有使用 inline说明,编译器也会将在类的说明部分定义的函数认定为内联函数,所以选项 B)错误;内联函数只是比普通函数有更高的执行效率。