1、国家二级( C+)笔试模拟试卷 256及答案与解析 1 算法的空间复杂度是指 ( )。 ( A)算法程序的长度 ( B)算法程序中的指令条数 ( C)算法程序所占的存储空间 ( D)算法执行过程中所需要的存储空间 2 下列叙述中正确的是 ( )。 ( A)在面向对象的程序设计中,各个对象之间具有密切的关系 ( B)在面向对象的程序设计中,各个对象都是公用的 ( C)在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小 ( D)上述三种说法都不对 3 算法的有穷性是指 ( )。 ( A)算法程序的长度是有限的 ( B)算法程序所处理的数据量是有限的 ( C)算法程序的运行时间是有限的 (
2、D)算法只能被有限的用户使用 4 有如下程序: #include iostream using namespace std: class A public: virtual void funcl( )cout “A1“; void func2( )cout“A2“; ; class B: public A public: void funcl( )cout “B1“; void fllnc2( )cout “B2“; ; int main( ) A*p=new B; p- funcl( ); p-func2( ); return 0: 运行程序,屏幕上将显示输出 ( A) B182 ( B)
3、A1A2 ( C) BlA2 ( D) AlB2 5 要定义一个具有 5个元素的一维数组 veer,并使其各元素的初值依次是 30、50、 -88、 0和 0,则下列 定义语句中错误的是 ( A) int vect =30, 50, -88; ( B) int vect =30, 50, -88, 0, 0; ( C) int vect5=30, 50, -88; ( D) int vect5=30, 50, -88, 0, 0; 6 对下列二叉树 进行中序遍历的结果是 ( )。 ( A) ACBDFEG ( B) ACBDFGE ( C) ABDCGEF ( D) FCADBEG 7 在关系
4、数据库中,用来表示实体之间联系的是 ( A)树结 构 ( B)网结构 ( C)线性表 ( D)二维表 8 一个栈的入栈序列是 1, 2, 3, , n,其输出序列为 P1, P2, P3, , Pn,若P1=n,则 Pi为 ( )。 ( A) i ( B) n=i ( C) n-i+1 ( D)不确定 9 将 5个数据进行快速排序,在最坏情况下需要比较的次数是 ( A) 4 ( B) 5 ( C) 10 ( D) 20 10 集簇属于 ( )。 ( A)模式 ( B)内模式 ( C)外模式 ( D)概念模式 11 有如下程序: #include iostream using namespace
5、 std; class sample private: int x,y; public: sample(int i,int j) x=i; y=j; void disp () cout “disp1“ end1; void disp() const cout “disp2“ end1; ;int main () const sample a(1,2); a.disp(); return 0; 该程序运行后的输出结果是 ( A) disp1 ( B) disp2 ( C) disp1 disp2 ( D)程序编译时出错 12 在一个类体的下列声明中,下确的纯虚函数声明星 ( A) virtual
6、 voidvf0:0; ( B) void vf(int)=0; ( C) virtual int vf(int); ( D) virtual void vf(int) 13 下列关于 C+函数的说明中,正确的是 ( )。 ( A)内联函数就是定义在另一个函数体内部的函数 ( B)函数体的最后一条语句必须是 return语句 ( C)标准 C+要求在调用一个函数之前,必须先声明其原型 ( D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式 14 下列有关继承和派生的叙述中,正确的是 ( )。 ( A)如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员 ( B)派生
7、类的成员函数可以访问基类的所有成员 ( C)基类对象可以赋值给派生类对象 ( D)如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类 15 下列各类函数中,不是类的成员函数的是 ( A)构造函数 ( B)析构函数 ( C)友元函数 ( D)拷贝构造函数 16 this指针是 C语言实现什么的一种机制 ? ( A)抽象 ( B)封装 ( C)继承 ( D)重载 17 下面有关纯虚函数的表述中正确的是 ( )。 ( A)含有纯虚函数的类不可能是派生类 ( B)纯 虚函数是没有给出显现版本 (即无函数体定义 )的虚函数 ( C)派生类必须实现基类的纯虚函数 ( D)纯虚函数的声明总是以 “
8、=0”结束 18 执行语句:coutsetfill(*)setw(10)setfill(#)left123“OK”endl; return 0; 后将输出 ( )。 ( A) 123*OK ( B) 123#OK ( C) 123*OK* ( D) 123#OK# 19 C+本身没有定义 I/O操作,但 I/O操作包含在 C+实现中。 C+标准库iostream提供了基本的 I/O类,它包括类 iostream和 ( )。 ( A) fstream ( B) ostream ( C) iostream ( D) cin 20 模板对类型的参数化提供了很好的支持,因此 ( )。 ( A)类模板的
9、主要作用是生成抽象类 ( B)类模板实例化时,编译器将根据给出的模板实参生成一个类 ( C)在类模板中的数据成员都具有同样类型 ( D)类模板中的成员函数都没有返回值 21 当调用函数时,实参是一个数组名,则向函数传送的是 _。 ( A)数组的长度 ( B)数组的首地址 ( C)数组每一个元素的地址 ( D)数组每个元素中的值 22 若有以下定义: Int a23=2, 4, 6, 8, 10, 12:则以下描述不正确的是 _。 ( A) *(a+1)为元素 a10的指针 ( B) a1+1为元素 a11的指针 ( C) *(a+1)+2为元素 a12的指针 ( D) *a1+2的值是 12
10、23 ( )是析构函数的特征。 ( A)一个类中只能定义一个析构函数 ( B)析构函数名与类名不同 ( C)析构函数的定义只能在类体内 ( D)析构函数可以有一个或多个参数 24 所有在函数中定义的变量,连同形式参数,都属于 ( A)全局变量 ( B)局部变量 ( C)静态变量 ( D)寄存器变量 25 下面程序的运行结果是 #include iostream.h void fun(int * a, int * b) int x= * a; * a = * b; * b=x; cout *a *b “; void main( 0 int x =1, y =2; fun( strcpy(arr,
11、 “you“); strcpy(arr1, “me“); arr03 cout arr endl; ( A) you class Base public: Base( ) x=0; int x; ; class Derived1:virtual public Base public: Derived1( ) x=10; ; class Derived2:virtual public Base public: Derived2( ) x=20; ; class Derived: public Derived1,protected Derived2 ; int main( ) Derived ob
12、j; cout obj. x endl; return 0; 该程序运行后的输出结果是 _。 43 下列程序的执行结果是 _。 #include ioStream.h #include iomanip.h using namespace std; void main() cout setfill(x) setw(10); cout “Hello“ end1; 44 表达式 x. operator ( ) 还可写成 _。 45 在 C+中,打开一个文件,就是将这个文件与一个【 】建立关联;关闭一个文件,就是取消这种关联。 46 将函数模板中的参数实例化后,函数模板变为【 】。 47 函数重载要求
13、重载的函数必须有和原函数一样的【 】。 48 有如下定义语句: MyClass*p10; 当类对象数组指针 p离开它的作用域时,系统自动调用析构函数【 】次。 49 若有以下程序: #include iostream using namespace std; #define PI 3.14 class Point private: int x,y; public: Point (int a,int b) x=a; y=b; int getx () return x; int gety() return y; ; class Circle : public Point int r; public
14、: Circle(int a, int b,int C) : Point (a, b) r=c; int getr() return r; double area() return PI*r*r; ; int main() Circle c1(5,7,10); cout c1.area() end1; return 0; 程序执行后的输出结果是【 】。 50 C+类对象销毁时,自动执行的函数是【 】。 国家二级( C+)笔试模拟试卷 256答案与解析 1 【正确答案】 D 【试题解析】 一个算法的空间复杂度一般是指执行这个算法所需的存储空间。 一个算法所占用的存储空间包括算法程序所占用的空间、
15、输入的初始数据所占用的存储空间及算法执行过程中所需要的额外空间。 2 【正确答案】 C 【试题解析】 面向对象的程序设计是用对象模拟问题领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互联系。 3 【正确答案】 C 【试题解析】 算法的有穷性,是指算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。 4 【正确答案】 B 【试题解析】 基类指针可以指向派生类对象,但是指针只能访问继承自基 类的成员,而不能访问派生类中的新增加成员或重新定义后的成员。故 p- funcl( ); p- func2( );都执行基类的成员函数,打印 A1A2。 5 【正确答
16、案】 A 【试题解析】 int vect =30, 50, -88;只能保证数组有 3个元素,而不是 5个元素。 6 【正确答案】 A 7 【正确答案】 D 【试题解析】 在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。即关系模型是用表格数据来表示实体本身及其相互之间的联系。本题的正确答案是 D。 8 【正确 答案】 C 【试题解析】 栈是先进后出的线性表。当 p1=n,即 n 是最先出栈的,根据栈的运算原理, n必定是最后入栈的,那么输入顺序必定是 1, 2, 3, , n,则出栈的序列是 n, n-1, n-2, , 1,所以答案是 C。 9 【正确答案】 C 【试题解析】
17、对长度为 n 的线性表进行快速排序,在最坏情况下需要 n(n-1)/2次比较,现线性表的长度为 5,在最坏情况下需要比较的次数为 5(5-1)/2=10。 10 【正确答案】 B 【试题解析】 内模式 (Internal Schema)又称物理模式 (Physical Schema),它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及 hash等存取方式与存取路径。 11 【正确答案】 B 【试题解析】 本题考核常对象、常数据和常函数。 C+中,在定义常对象时必须进行初始化,而且不能被更新。如果将一个对象说明为常对象,则通过该对象只能调用它的常成员函数。题中,对象 a
18、被定义成类 sample的常对象,所以通过对象 a只能调用其常成员函数 disp()。所以程序最后输出 disp2。 12 【正确答案】 A 【试题解析】 本题考核纯虚函数的声明。声明纯虚函数的一般格式为: virtual类型函数名 (参数表 )=0; 13 【正确答案】 C 【试题解析】 选项 A) 中,内联函数不是定义在另一个函数体内部的函数,而是将 incline放在函数定义中函数类型之前;函数体的最后一条语句可以是任意的语句,选项 B) 错误;编译器不会根据函数返回值的类型来区分重载形式,选项 D) 错误。标准 C+要求在调用一个函数之前,必须先声明其原型,选项 C) 正确。 14 【
19、正确答案】 D 【试题解析】 如果派生类私 有继承基类,不能访问基类中的私有成员,所以选项A)、 B)是错误的。派生类是对基类的具体化,所以选项 C)错误。如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类,即选择选项 D)。 15 【正确答案】 C 【试题解析】 构造函数包括默认构造函数和拷贝构造函数等,析构函数和构造函数一样属于类的特殊的成员函数。而友元函数则是为了增加类的访问灵活行而允许其他类的成员函数或全局函数访问类的内部变量或成员函数的一种机制,其缺点是破坏了类的封装性。 16 【正确答案】 B 【试题解析】 this指针是 C语言实现封装的一种机制,它将对象和该对象调用的
20、成员函数连接在一起,在外部看来,每一个对象都拥有自己的函数成员。 17 【正确答案】 D 【试题解析】 C+中的某些情况下基类无法确定一个虚函数的具体操作方法或内容,只能靠派生类来提供各个具体的实现版本。基类中必须靠派生类提供重定义的虚函数叫做纯虚函数。为了将一个虚函数声明为一个纯虚函数,需要在结束符号前加上 =0;若派生没有重定义纯虚函数,这个函数仍然是纯虚函数。 18 【正确答案】 B 【试题解析】 cout fill()用 于设置或返回输出的填充字符,默认是空格, fill()函数的设置一直有效,直到下一个 fill()函数改变该值为止。 setw(int n)作用是设置输入输出的宽度,
21、此设置只对一次输入或输出有效,在完成一次数据的输入或输出后,宽度设置自动恢复为 0。注意:默认为输出数据在指定宽度内右对齐。 19 【正确答案】 B 【试题解析】 C+中, istream类提供了向流中插入数据的有关操作, ostream类提供了从流中读取数据的有关操作。 20 【正确答案】 B 21 【正确答案】 B 22 【正确 答案】 D 23 【正确答案】 A 24 【正确答案】 B 【试题解析】 C+语言函数中定义的变量都是属于这个函数的局部变量。 25 【正确答案】 D 【试题解析】 本题考查的是指针和引用,函数 fun 完成把 x和 y互换的操作。 26 【正确答案】 B 【试题
22、解析】 本题考核函数重载。所谓函数重载,是指同一个函数名可以对应多个函数的实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。即重载函数不许具有相同的形参列表。函数的返回类型不能作为函数重载的判断依 据。 const是函数的一部分参与函数的重载 27 【正确答案】 B 【试题解析】 本题考核指针的赋值操作。 A) 选项中, ”时,就会先调用虚基 类 Base的构造函数,使得 x=0,然后执行类 Derived 1的构造函数使得 x=10,再执行类 Derived 2 的构造函数,使得 x=20。最后输出 x的值为 20。 43 【正确答案】 xxxxxHello 【试题解析
23、】 此题考查的是 I/O 的格式化输出。 Setfill(x)表示填充字符为 x,并且一直有效; setw(10)表示将输入输出的宽度设置为 10,宽度设置的效果只对以此次输入或输出有效,在完成一个数据的输入或输出后,宽度自动恢复为 0;题目中字符串 “Hello“的宽度不够 10,所以其前面将 有 5个填充符 x。 44 【正确答案】 x 【试题解析】 C语言中用成员函数重载 x为 x. operator ( ) ,用友元函数重载 x为 :operator (x) 。 45 【正确答案】 流 【试题解析】 在 C+中,对文件的操作是由文件流完成的。文件流类在流与文件之间建立链接。 46 【正
24、确答案】 模板函数 【试题解析】 函数模板的数据类型参数标识符实际上是一个类型形参,在使用函数模板时,要将这个形参实例化为确定的数据类型。将类型形参实例化的参数称为模板 实参,用模板实参实例化的函数称为模板函数。模板函数的生成就是将函数模板的类型形参实例化的过程。 47 【正确答案】 函数名 【试题解析】 重载函数的函数名应和原函数一致。注意: 重载函数的方式方法,重载函数的参数,重载函数的返回值。 48 【正确答案】 0 【试题解析】 类对象数组指针 p本身不定义类对象,而是定义了数组指针 p 可以指向一个 MyClass 的对象。 49 【正确答案】 314 【试题解析】 本程序设计了一个点类 Point,包含了横、纵两个坐标数据 x和y,由它派生出了圆 类 Circle,并加入了新的数据成员,即一个半径数据 r和一个求圆面积的函数成员 area。在主函数中,首先定义了一个圆 Circle类的对象 c1,并通过它的构造函数初始化其数据成员。由此可知,其半径 r的值为 10,所以其面积为 PI*10*10=314,即对象 c1 的函数成员 area的返回值为 314。 50 【正确答案】 析构函数 【试题解析】 C+类对象销毁时,自动执行的函数是析构函数。