1、国家二级 C+机试(选择题)模拟试卷 127及答案与解析 一、选择题 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 st
4、d; 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) f a+: x; b+=y; void show() cout using namespace std; class Test public: Test() n+=2; Test() n-=3; static int getNum()retum n; private: static int n: ; int Test: n=1; int main() Test*p=ne
5、w Test; delete p; cout using namespace std; int s=0: class sample static int n; public: sample(int i) n=i; static void add() s+=n; ; int sample: n=0: int main() sample a(2), b(5); sample: add(); cout void main() char flag=c; switch(flag) case a: cout using namespace std; class sample private: intx,
6、y; public: sample(int i, int j) x=i: y=j; void disp() cout using namespace std; class TestClass protected: TestClass()cout using namespace std; class TestClass public: void who()coutwho(); return 0: 则该程序运行后的输出结果是 ( )。 ( A) TestClass1 ( B) TestClass ( C) 0 ( D)无输出 32 下列有关继承和派生的叙述中,正确的是 ( )。 ( A)如果一个派
7、生类私有继承其基类,则该派生类对象不能访问基类的保护成员 ( B)派生类的成员函数可以访问基类的所有成员 ( C)基类对象可以赋值给派生类对象 ( D)如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类 33 下面叙述错误的是 ( )。 ( A)派生类可以使用 private派生 ( B)对基类成员的 访问必须是无二义性的 ( C)基类成员的访问能力在派生类中维持不变 ( D)赋值兼容规则也适用于多继承的组合 34 下列程序的输出结果为 2,横线处应添加语句 ( )。 #include using namespace std; class TestClass1 public: voi
8、d fun()coutfun(); delete p; return 0: ( A) public ( B) private ( C) virtual ( D) protected 35 要使程序执行后的输出结果为 ABCD,应在横线处添加语句 ( )。 #include usingnamespace std; class A public: A()cout*、:、 ?:这五个运算符之外,其他运算符都可以重载。 20 【正确答案】 B 【试题解析】 所谓函 数重载是指同一函数名可以对应多个函数实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。 21 【正确答案】 C 【试
9、题解析】 选项 C)是一个错误的 for语句格式, for()语句中三个表达式可以省略。但是两个分号 (; )不能省略。 22 【正确答案】 C 【试题解析】 第一次循环输出 1,第二次循环输出是一 2。在输出二次循环后 !(-x)为 0条件不满足。停止循环。 23 【正确答案】 D 【试题解析】 p是一个指针,用来存储 a变量的地址,而 100是存储在该地址的一 个值用 p表示的为 *p。 24 【正确答案】 D 【试题解析】 数组有 N个元素,则数组元素引用为 a(O) a(N-1),共计 N个,没有 a(10)这个元素,最后的元素是 a(9)。 25 【正确答案】 C 【试题解析】 因为
10、 flag=c,所以执行 coutwho()则是调用 基类中的 who函数,输出 TestClass。 32 【正确答案】 D 【试题解析】 如果派生类私有继承基类,不能访问基类中的私有成员,所以A)、 B)是错误的。派生类是对基类的具体化,所以 C)错误的。如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类,即选择 D)。 33 【正确答案】 C 【试题解析】 在建立派生类的时候,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的公用成员直接作为派生类的公用成员。涉及如何确定基类的成员在派生类中的访问属性问题,不仅要考虑对基类 成员所声明的访问属性,还要考虑派生类所声明
11、的对基类的继承方式,根据这两个因素共同决定基类成员在派生类中的访问属性。所以本题选择 C)。 34 【正确答案】 C 【试题解析】 由主函数 main入手,定义 TestClass1类的指针对象 p指向派生类TestClass2。因为基类和派生类中都有 fun函数,题目要求输出为 2,就是基类对象访问派生类中 fun函数。通过虚函数与指向基类对象的指针变量的配合使用,就能方便调用同名函数。所以这里将基类中的 fun函数声明为 virtual。并且当一个成员函数被声明为虚函数 后,其派生类中的同名函数自动成为虚函数。 35 【正确答案】 D 【试题解析】 由主函数 main入手,定义了类 D对象
12、 obj。其中 D为类 B和 C的公有继承, A是 C的虚基类。题目中要求的输出结果为 “ABCD”,依次为类 A,类 B,类 C,类 D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承时,即保证 A只被继承一次,输出一个 A,所以不但需要声明 A为 C的虚基类,同样也要声明 A为 B的虚基类。 36 【正确答案】 A 【试题解析】 在基类中用 virtual声明成员函数为虚函数,所以 A是正确的。纯虚函数是在声明虚函数时被 “初始化 ”为 0的虚函数。纯虚函数是一种特殊的虚函数,它没有具体的实现。静态数据成员函数只能在类外进行初始化。 37 【正确答案】 C 【试题解析】 如果在类
13、以外的其他地方定义了一个函数,在类体中用 friend对该函数进行声明,此函数就称为本类的友元函数。因为函数为 voidfun(),根据友元定义补全语句为 “friend void fun(): ”。 38 【正确答案】 C 【试题解析】 递归函数 fun被定义为含有参数 int n,返回整型。其中 fun函数递归调用本身, 当 n=1时, fun返回 1,如果大于 1那么执行 n*fun(n-2)。所以,当n等于 5时,执行 5*fun(3);当 3时继续调用 fun, 3*fun(1),即fun(5)=5*(3*fun(1),答案为 15。 39 【正确答案】 C 【试题解析】 此题考查的
14、知识点是字面常量。对于整型字面常量,只要没有超过C+中整数所能表示的范围, C+将自动按整数来存储此数,也可以通过在整型字面常量后添加 u或 1来指定无符号整数或长整数来存储;对于实型字面常量, C+将自动按照双精度数来存储,也可以通过在实型字面常量后 添加 f来指定按单精度数存储。 40 【正确答案】 C 【试题解析】 此题考查的是内联函数的概念。在调用时,内联函数会像宏函数一样的展开,将调用表达式用内联函数体来替换,所以它没有一般函数的参数压栈和退栈操作,所以选项 A)错误;即使没有使用 inline说明,编译器也会将在类的说明部分定义的函数认定为内联函数,所以选项 B)错误;内联函数只是比普通函数有更高的执行效率。