1、国家二级 C+机试(选择题)模拟试卷 100及答案与解析 一、选择题 1 算法的空间复杂度是指 ( )。 ( A)算法程序的长度 ( B)算法程序中的指令条数 ( C)算法程序所占的存储空间 ( D)算法执行过程中所需要的存储空间 2 下列叙述中正确的是 ( )。 ( A)一个逻辑数据结构只能有一种存储结构 ( B)逻辑结构属于线性结构,存储结构属于非线性结构 ( C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率 ( D)一个逻辑数据结构可以有多种存储结构,且各种存 储结构影响数据处理的效率 3 下列关于类、对象、属性和方法的叙述中,错误的是 ( )。 ( A)类是对
2、一类具有相同的属性和方法对象的描述 ( B)属性用于描述对象的状态 ( C)方法用于表示对象的行为 ( D)基于同一个类产生的两个对象不可以分别设置自己的属性值 4 在软件开发中,需求分析阶段产生的主要文档是 ( )。 ( A)数据字典 ( B)详细设计说明书 ( C)数据流图说明书 ( D)软件需求规格说明书 5 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和 ( )。 ( A)编 码设计 ( B)测试阶段 ( C)运行阶段 ( D)物理设计 6 在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是 ( )。 ( A)并 ( B)交 ( C)投影 ( D)除 7 下列叙述中
3、,正确的是 ( )。 ( A)软件交付使用后还需要进行维护 ( B)软件一旦交付使用就不需要再进行维护 ( C)软件交付使用后其生命周期就结束 ( D)软件维护是指修复程序中被破坏的指令 8 设一棵满二叉树共有 15个结点,则在该满二叉树中的叶子结点数为 ( )。 ( A) 7 ( B) 8 ( C) 9 ( D) 10 9 设 R是一个 2元关系,有 3个元组, S是一个 3元关系,有 3个元组。如T=RxS,则 T的元组的个数为 ( )。 ( A) 6 ( B) 8 ( C) 9 ( D) 12 10 下列选项中,不属于数据库管理的是 ( )。 ( A)数据库的建立 ( B)数据库的调整
4、( C)数据库的监控 ( D)数据库的校对 11 在下列横线处应添加的语句是 ( )。 class Basepublic: void funOcout class A int ij; public: int geti0 return i; ; class B: public A int k: public: void make() l(=i*j; ; 则上述定义中非法的表达式是 ( )。 ( A) k=i*j; ( B) int k; ( C) return i: ( D) void make(); 14 在下面的类定义中,错误的语句是 ( )。 class Sample public: Sa
5、mple(int val); Sample(); private: int a=2 5: Sample(); ; ( A) ( B) ( C) ( D) 15 假定 MyClass为一个类,则该类的拷贝初始化构造函数的声明语句为 ( )。 ( A) MyClass&(MyClass x); ( B) MyClass(MyClass X) ( C) MyClass(MyClass&x); ( D) MyClass(MyClass*x) 16 下面对静态数据成员的描述中,正确的是 ( )。 ( A)静态数据成员是类的所有对象共享的数据 ( B)类的每个对象都有自己的静态数据成员 ( C)类的不同对
6、象有不同的静态数据成员值 ( D)静态数据成员不能通过类的对象调用 17 关于运算符重载,下列表述中正确的是 ( )。 ( A) C+已有的任何运算符都可以重载 ( B)运算符函数的返回类型不能声明为基本数据类型 ( C)在类型转换符函数的定义中不需要声明返回类型 ( D)可以通过运算符重载来创建 C+中原来没有的运算符 18 不能作为函数重载的判断依据的是 ( )。 ( A) const ( B)返回类型 ( C)参数个数 ( D)参数类型 19 有如下类的定义。横线 处的语句是 ( )。 class MyClass public: MyClass(int a=0, int b=0) X=a
7、: Y=b: void Changeoconst X一 =10: Y+=10: private: int X, Y; ; ( A) static ( B) const ( C) mutable ( D)不需要填入内容 20 有如下函数模板定义 : template T1 sum(T1 a1) retum(al+a2+a3); 则以下调用中正确的是 ( )。 ( A) sum(5); ( B) sum(5); ( C) sum(5); ( D) sum(5); 21 关于 new运算符的下列描述中,错误的是 ( )。 ( A)它可以用来动态创建对象和对象数组 ( B)使用它创建的对象或 对象数组
8、可以通过运算符 delete删除 ( C)使用它创建对象时要调用构造函数 ( D)使用它创建对象数组时必须指定初始值 22 派生类的构造函数的成员初始化列中,不能包含 ( )。 ( A)基类的构造函数 ( B)派生类中予对象的初始化 ( C)基类的子对象初始化 ( D)派生类中一般数据成员的初始化 23 派生类的对象对它的基类成员中 ( )是可以访问的。 ( A)公有继承的公有成员 ( B)公有继承的私有成员 ( C)公有继承的保护成员 ( D)私有继承的公有成员 24 C+类体系中 ,不能被派生类继承的有 ( )。 ( A)构造函数 ( B)虚函数 ( C)静态成员函数 ( D)赋值操作函数
9、 25 下列程序的输出结果是 ( )。 #include void ff(int x), if(double x); void main() float a(88 18); 趣 a); char b(a); ff(b); void if(int x1 cout using narnespace std; void add(int X, int Y, int*z) *z=y+X; intmain() int a, b, c; add(8, 4, &a); add(6, a, &b); add(a, b, &c); cOut using namespace std; class TestClass
10、 public: TestClass 0cout using namespace std; class TestClass public: TestClass(int rl, int r2) R1=r1; r2=r2: voidprint(); void printoconst; private: intRl, R2; ); void TestClass: print( ( A) 5, 4 ( B) 20, 52 ( C) 0, 0 ( D) 4, 5 30 静态数据成员是为 ( )的数据。 ( A)私有 ( B)保护 ( C)所有对象共享 ( D)类成员 31 下 列说法中错误的是 ( )。
11、 ( A)公有继承时基类中的 public成员在派生类中仍是 public的 ( B)公有继承时基类中的 private成员在派生类中是 public的 ( C)私有继承时基类中的 public成员在派生类中是 private的 ( D)保护继承时基类中的 public成员在派生类中是 protected的 32 有如下程序: #include using namespace std; class TestClass public: TestClass()cout using namespace std; class TestClass public: void fun0coutfun();
12、34 下面关于虚函数的描述中正确的是 ( )。 ( A)虚函数是一个静态成员函数 ( B)虚函数是一个非成员函数 ( C)虚函数既可以在函数说明时定义,也可以在函数实现时定义 ( D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 35 有如下程序: #include using namespace std; class TestClass l public: virtual void fun()cout using namespace std; long fun(int n) if(n 2) retum(fun(n-1)+fun(n-2); else return 2; int
13、main() cout using namespace std; template T fun(T a, T b)retum(a=b)?a: b; void main() cout, *、:、 ?:这五个运算符之外,其他运算符都可以重载;在类型转换符函数的定义中不需要声明返回类型;运算符函数的返回值类型可以声明为基本数据类型。 18 【正确答案】 B 【试题解析】 所谓函数重载是指同一函数名可以对应多个函数实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。但函数的返回类型不能作为判断重载的依据。 19 【正确答案】 C 【试题解析】 C+中 const关键字用来表示一个常
14、量,同时 const也用来修饰函数。这两个概念需要明确: const所修饰的函数只能是类的成员函数,因为 const所修饰的函数中,要由编译器负责保护类的成员变量不被修改。而相对的,mutable则是用来修饰类的成员变量,让该变量在 const所修饰的成员函数中可以被修改。而且 const修饰的函数只能是类的成员函数, mutable修饰的变量只能是类的成员变量。 20 【正确答案】 A 【试题解析】 本题考查的函数模板的使用,有时不能根据用户传进来的参数决定所有模板函数的值 类型,如函数的返回值,还有用户希望自己指定参数类型,这时就需要显式地指出参数模板的类型,显示指定模板的类型格式为:返回
15、值类型函数模板 (参数表 )。 21 【正确答案】 D 【试题解析】 用 new创建对象是不用显式调用构造函数的,它自己会自动调用。 22 【正确答案】 C 【试题解析】 派生类的构造函数会调用基类的构造函数。对于基类子对象的初始化会在基类的构造函数中进行。派生类会为基类提供参数,当基类的构造函数收到参数时会将参数传递给相应的基类子对象。 23 【正确答案 】 A 【试题解析】 只要是派生类,都可以丛基类中继承,除非把基类的构造函数定义为私有的,这样派生类无法构造。 24 【正确答案】 A 【试题解析】 不能被继承的有构造函数、拷贝构造函数、赋值函数、析构函数。 25 【正确答案】 A 【试题
16、解析】 本题主要考查函数调用时从实参到形参的类型一致性。相同类型或小类型的实参可以传给大类型的形参,但是不允许大类型的实参传给小类型的形参。 26 【正确答案】 D 【试题解析】 this指针是成员函数所属对象的指针,它指向类对 象的地址;它隐含于每个类的非静态成员函数中; this指针只能在类的成员函数中使用,它指向该成员函数被调用的对象;静态成员函数没有 this指针,因为类中只有一个静态成员函数实例,使用 this指针无意义。 27 【正确答案】 B 【试题解析】 由主函数 main入手,调用 add函数,其中第三个参数为引用,即传值为地址。当 add函数中第三个参数改变时,主函数中这个
17、值也会改变。那么第一个 add调用后 a=12,所以第二个调用中 a=12。调用后 b=18。那么第三个调用后 c=30。 28 【正确答案】 A 【试题解析】 由主函数入手,定义了类 TestClass的对象 a和 d,当类对象进入其作用域时调用构造函数,构造函数在建立对象时由系统自动执行,而且只执行一次。因为定义了两个对象,所以构造函数 TestClass()被调用的次数是 2。“d=userCode(, a);话句 d中调用成员为 a的 userCode()成员函数,所以是 3次。 29 【正确答案】 B 【试题解析】 常对象只能调用其中的 const成员函数,即 “const Test
18、Class b(20,52); ”只能调用 “void print()const; ”。常对象保证所有数据成员的数值不被修改,所以这里是 20, 52。 30 【正确答案】 C 【试题解析】 静态数据成员是一一种特殊的数据成员。静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。所有对象共享这些静态数据成员,都可以引用它。 31 【正确答案】 B 【试题解析】 公有继承中,基类的公有成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。所以 B是错误的,即选择 B)。 32 【正确答案】 A 【试题解析】 TestClass是 TestClassl的基
19、类。由主函数 main入手,定义TestClassl的对象 d,调用基类 TestClass构造函数输出 BB,调用基类成员函数fun输出 Bf,然后调用派生类的构造函数,输出 DD。 33 【正确答案】 C 【试题解析】 程序中的 TestClassl为 TestClass的派生类, TestClassl公有继承TestClass,所以可以调用其中的公有成员 fun函数,如果要显示调用它,那么使用域符号 “: ”,这样就实现了对函数的显示调用,即选择 C)。 34 【正 确答案】 D 【试题解析】 在基类中用 virtual声明成员函数为虚函数,所以 AB错误。在派生类中重新定义此函数,要求
20、函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同。 35 【正确答案】 C 【试题解析】 主函数中定义 TestClassl的对象 aa,木 p对象指针, TestClass2的对象 bb以及 TestClass3的对象 cc。 p指向 cc, TestClass3为 TestClass2的派生类,构造函数输出 2。 TestClass3中 fun函数中为 TestClass2中的 fun,调 用TestClass2的构造函数,输出 2。 “p一 fun(); ”, TestClass2继承于 TestClassl中的 fun,所以输出 1。然后输出 TestClass3中的 “co
21、ut2时递归调用fun(n 1)+fun(n一 2),否则返回 2。所以当 n=3时,调用 fun(2)+fun(1),即返回2+2,等于 4。 37 【正确答案】 D 【试题解析】 “?: ”为条件运算符, (a=b)?a: b是当 a大于 b时取 a,否则取b。所以第一个 fun(3, 6)调用中, 6大于 3,所以输出 6,同理第二个fun(3 14F,6 28F)调用中输出 6 28。 38 【正确答案】 D 【试题解析】 此题考查的是数组和指针的概念。题目中 data10共有 10个元素,分别是 data0、 data1、 data2、 data3data9 ,首元素是 data0,所以选项 D)错误:其他选项均正确。 39 【正确答案】 C 【试题解析】 此题考查的是类的定义。在定义类的成员变 量时,如果没有使用关键字,所有成员默认定义为 Drivate私有权限。 40 【正确答案】 B 【试题解析】 此题考查的是内联函数。 C+语言引入内联函数的原因是用它来取代 C语言的预处理宏函数。