[计算机类试卷]国家二级(C++)笔试模拟试卷175及答案与解析.doc

上传人:rimleave225 文档编号:502633 上传时间:2018-11-29 格式:DOC 页数:20 大小:58KB
下载 相关 举报
[计算机类试卷]国家二级(C++)笔试模拟试卷175及答案与解析.doc_第1页
第1页 / 共20页
[计算机类试卷]国家二级(C++)笔试模拟试卷175及答案与解析.doc_第2页
第2页 / 共20页
[计算机类试卷]国家二级(C++)笔试模拟试卷175及答案与解析.doc_第3页
第3页 / 共20页
[计算机类试卷]国家二级(C++)笔试模拟试卷175及答案与解析.doc_第4页
第4页 / 共20页
[计算机类试卷]国家二级(C++)笔试模拟试卷175及答案与解析.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、国家二级( C+)笔试模拟试卷 175及答案与解析 1 下列选项中不符合良好程序设计风格的是 ( A)源程序要文档化 ( B)数据说明的次序要规范化 ( C)避免滥用 goto语句 ( D)模块设计要保证高耦合、高内聚 2 从工程管理角度,软件设计一般分为两步完成,它们是 ( A)概要设计与详细设计 ( B)数据设计与接口设计 ( C)软件结构设计与数据设计 ( D)过程设计与数据设计 3 下列选项中不属于软件生命周期开发阶段任务的是 ( A)软件测试 ( B)概要设计 ( C)软件维护 ( D)详 细设计 4 在数据库系统中,用户所见的数据模式为 ( A)概念模式 ( B)外模式 ( C)内

2、模式 ( D)物理模式 5 数据库设计的 4个阶段是:需求分析、概念设计、逻辑设计和 ( A)编码设计 ( B)测试阶段 ( C)运行阶段 ( D)物理设计 6 下列叙述中正确的是 ( A)一个算法的空间复杂度大,则其时间复杂度也必定大 ( B)一个算法的空间复杂度大,则其时间复杂度必定小 ( C)一个算法的时间复杂度大,则其空间复杂度必定小 ( D)上述 3种说法都不对 7 在长为 64的有序线性表中 进行顺序查找,最坏情况下需要比较的次数为 ( A) 63 ( B) 64 ( C) 6 ( D) 7 8 数据库技术的根本目标是要解决数据的 ( A)存储问题 ( B)共享问题 ( C)安全问

3、题 ( D)保护问题 9 下列有关内联函数的叙述中,正确的是 ( A)内联函数在调用时发生控制转移 ( B)内联函数必须通过关键字 inline来定义 ( C)内联函数是通过编译器来实现的 ( D)内联函数体的最后一条语句必须是 return语句 10 下列情况中,不会调用复制构造函数的是 ( A)用一个对象去初 始化同一类的另一个新对象时 ( B)将类的一个对象赋予该类的另一个对象时 ( C)函数的形参是类的对象,调用函数进行形参和实参结合时 ( D)函数的返回值是类的对象,函数执行返回调用时 11 下列有关继承和派生的叙述中,正确的是 ( A)如果一个派生类私有继承其基类,则该派生类对象不

4、能访问基类的保护成员 ( B)派生类的成员函数可以访问基类的所有成员 ( C)基类对象可以赋值给派生类对象 ( D)如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类 12 模板对类型的参数化提供 了很好的支持,因此 ( A)类模板的主要作用是生成抽象类 ( B)类模板实例化时,编译器将根据给出的模板实参生成一个类 ( C)在类模板中的数据成员都具有同样类型 ( D)类模板中的成员函数都没有返回值 13 下列关于 C+流的叙述中,正确的是 ( A)与键盘、屏幕、打印机和通信端口的交互都可以通过流类来实现 ( B)从流中获取数据的操作称为插入操作,向流中添加数据的操作称为提取操作 (

5、C) cin是一个预定义的输入流类 ( D)输出流有一个名为 open的成员函数,其作用是生成一个新的流对象 14 下列符号中可以用作 C+标识符的是 ( A) _radius ( B) foo bar ( C) else ( D) 3 room 15 下列语句中,错误的是 ( A) const int buffer=256; ( B) const int temp; ( C) const double*point; ( D) const double*rt=new double(5.5); 16 有如下程序: int x=3: d0 x-=2: cout x: while(!(-x); 执行

6、这个程序的输出结果是 ( A) 1 ( B) 30 ( C) 12 ( D)死循环 17 有如下程序: #include iostream using namespace std; int main( ) int*P; *P=9; cout “The value at P: “ *P: return 0; 编译运行程序将出现的情况是 ( A)编译时出现语法错误,不能生成可执行文件 ( B)运行时一定输出: The value at P: 9 ( C)运行时一定输出: The value at P: *9 ( D)运行时有可能出错 18 有如下程序: #include iostream usin

7、g namcspace std; int main( ) void function(double val); double val; function(val); eout val; return 0; void function(double val) val=3: 编译运行这个程序将出现的情况是 ( A)编译出错,无法运行 ( B)输出: 3 ( C)输出: 3.0 ( D)输出一个不确定的数 19 有如下类定义: class AA int a; public: int getRef( )eonstreturn a; / int getValue( )constreturn a; / v

8、old set(int n)eonsta=n; / friend void show(AA aA) eonsttout a; / ; 其中的 4个函数定义中正确的是 ( A) ( B) ( C) ( D) 20 有如下程序: #include iostream using namespace std; using namespace std; class Base public: void fun( )cout “Base:fun“ endl: ; class Derived: public Base public: void fun( ) eout “Derived:fun“endl: ;

9、int main( ) Derived d; d fun( ); return 0; 已知其执行后的输出结果为: Base:fun Derived:fun 则程序中下画线处应填入的语句是 ( A) Base.fun( ); ( B) Base:fun( ); ( C) Base- fun( ); ( D) fun( ); 21 下面是重载为非成员函数的运算符函数原型,其中错误的是 ( A) Fraction operator+(Fraction, Fraction); ( B) Fraction operator-(Fraction); ( C) Fractionoperator=(Fract

10、ion, Fraction); ( D) Fractionoperator+=(Fraction, Fraction); 22 有如下函数模板: template typename T, typenaine U T cast(U u)return u; 其功能是将 U类型数据转换为 T类型数据。已知 i为 int型变量,下列对模板函数 cast的调用中正确的是 ( A) cast(i); ( B) cast (i); ( C) cast char*, int (i); ( D) cast double, int (i); 23 若磁盘上已存在某个文本文件,其全路径文件名为 d: ncretes

11、t.txt,下列语句中不能打开该文件的是 ( A) ifstream file(“d:ncretest.txt“); ( B) ifstream file(“d: ncretest.txt“); ( C) ifstream file; file open(“d: ncretest.txt“); ( D) ifstream*pFile=new ifstream(“d: ncretest.txt“); 24 有如下类定义: class Foo public: Foo(int v): value(v) / Foo() / private: Foo( ) / int value=0; / ; 其中存在

12、语法错误的行是 ( A) ( B) ( C) ( D) 25 有如下类定义: class Point int x_, y_; public: Point( ): x_(0), y_(0) Point(int x, int y=0): x_(x), y_(y) ; 若执行语句: Point a(2), b3,*c4; 则 Point类的构造函数被调用的次数是 ( A) 2次 ( B) 3次 ( C) 4次 ( D) 5次 26 有如下类定义: class Test public: Test()a=0; C=0; t / int f(int A) constthis- a=a; / static

13、int g( )return a; / void h(int B) Test:b=b; ; / private: int a; static int b; const int c; ; int Test:b=0: 在标注号码的行中,能被正确编译的是 ( A) ( B) ( C) ( D) 27 有如下程序: #include lostream using namespace std; class A public: A( )cout “A“; A( )cout “ A“; ; class B:public A A*P; public: B( )cout “B“; P=new A( ); B(

14、)cout“ B“; delete P; ; int main( ) B obj; return 0; 程序的输出结果是 ( A) BAA A B A ( B) ABA B A A ( C) BAA B A A ( D) ABA A B A 28 有如下类定义: class MyBase int k; public: MyBase(int n=0): k(n) int value( )constreturn k; ; class MyDerived: MyBase int j; public: MyDerived(int i): j(i) int getK( )eonstreturn k; i

15、nt getJ( )constreturn j; ; 编译时发现有一处语法错误,对这个错误最准确的描述是 ( A)函数 getK试图访问基类的私有成员变量 K ( B)在类 MyDerived的定义中,基类名 MyBase前缺少关键字 public、 protected或 private ( C)类 MyDerived缺少一个无参的构造函数 ( D)类 MyDerived的构造函数没有对基数数据成员 K进行初始化 29 在一个派生类对象结束其生命周期时 ( A)先调用派生类的析构函数,后调用基类的析构函数 ( B)先调用基类的析构函数,后调用派生 类的析构函数 ( C)如果基类没有定义析构函数

16、,则只调用派生类的析构函数 ( D)如果派生类没有定义析构函数,则只调用基类的析构函数 30 有如下运算重载函数定义: Double operator+(int i, int k)return double(i+k); 但定义有错误,对这个错误的最准确的描述是 ( A) +只能作为成员函数重载,而这里的 +是作为非成员函数重载的 ( B)两个 int型参数的和应该是 int型,而这里将 +的返回类型声明为 double ( C)没有将运算符重载函数声明 为某个类的友元 ( D) C+已经提供了求两个 int型数据之和运算符 +,不能再定义同样的运算符 31 语句 ofstream f(“SAL

17、ARY DAT“, ios_base:app)的功能是建立流对象 f,并试图打开文件 SALARY DAT与 f关联,而且 ( A)若文件存在,则将其置为空文件;若文件不存在,则打开失败 ( B)若文件存在,则将文件指针定位于文件尾;若文件不存在,则建立一个新文件 ( C)若文件存在,则将文件指针定位于文件首;若文件不存在,则打开失败 ( D)若文件存在,则打开失败;若 文件不存在,则建立一个新文件 32 有如下程序: #include iostream using namespace std: class A public: virtual void funcl( )cout “A1“; v

18、oid 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) A1A2 ( C) BlA2 ( D) AlB2 33 某二叉树中度为 2的结点有 18个,则该二又树中有 _个叶子结点 34 在面向对象方法中,类的实例称为 _。 35 诊断和改正程序中错误的工作通常称为 _。 36 在

19、关系数据库中,把数据表示成二维表,每一个二维表称为 _。 37 问题处理方案的正确而完整的描述称为 _。 38 下列程序的输出结果是 _。 #include iostream #include cstring using namespace std; void fun(const char*S, char C) e=sstrlen(s)/2; int main( ) char str =“ABCDE“; char ch=str1; fun(str, ch); cout ch; return 0; 39 补充完整下面的类定义: const double PI=3.14; class Circle

20、 /圆形物体的抽象基类 protected: double r; /半径 public: Circle(double radius=0): r(radius) (13) ; /计算 圆形物体表面积的纯虚函数声明 ; class Cylinder: public Circle /圆柱体类 double h; /高度 public: Cylinder(double radius=0, double height=0); Circle(radius), h(height) Virtual double Area( )return 2*PI*r*(r+h); /计算圆柱体的表面积 ; 40 如下程序

21、声明了一个使用两个通用数据类型的模板类 dataClass,其中构造函数用于初始化两个数据成员,成员函数 show用于输出两个数据成员的数值。 #include iostream using namespaee std; _ T1 i: T2 j; public: dataClass(T1 a, T2B) i=a; j=b; void show( )tout i “, “ j n; ; int main( ) dataClass int, double obl(10, 0.23); dataClass char, char* ob2(X, “my data“); obl show( ); ob

22、2 show( ); return 0; 请将程序补充完整,使程序在运行时输出: 10, 0.23 X, my data 41 下列程序的输出结果为: Ohject id=0 Object id=1 请将程序补充完整。 #include iostream using namespaee std; class Point public: Point(int xx=0, intyy=0)X=xx; Y=yy; countP+; Point( )countP-; int GetX( )return X; int GetY( )return Y; static void GetC( ) cout “O

23、bject id=“ countP endl; private: int X, Y; static int countP; ; _ /静态数据成员的初始化 int main( ) Point:GetC( ); Point A(4, 5); A GetC( ); return 0; 国家二级( C+)笔试模拟试卷 175答案与解析 1 【正确答案】 D 【试题解析】 编程风格是在不影响程序性能的前提下,有效地编排和组织程序,以 提高可读性和可维护性。要按照规则进行编程。这些规则包括: 程序文档化。程序文档应包含恰当的标识符、适当的注解和程序的视觉组织等。 数据说明。出于阅读理解和维护的需要,最好

24、使模块前的说明语句次序规范化。 功能模块化。即把源程序代码按照功能划分为低耦合、高内聚的模块。 注意 goto语句的使用。合理使用 goto语句可以提高代码的运行效率,但 goto语句的使用会破坏程序的结构特性。因此,除非确实需要,否则最好不使用 goto语。因此,本题的正确答案是 D。 2 【正确答案】 A 【试题解析】 从工程管理的角 度,软件设计可分为概要设计和详细设计两大步骤。概要设计是根据需求确定软件和数据的总体框架;详细设计是将其进一步简化成软件的算法或表示和数据结构。而在技术上,概要设计和详细设计又由若干活动组成,包括总体结构设计、数据设计和过程设计。因此,本题的正确答案是A。

25、3 【正确答案】 C 【试题解析】 软件生命周期由软件定义、软件开发和软件维护 3个时期构成,每个时期又进一步划分为若干个阶段。软件定义时期的基本任务是确定软件系统的工程需求。软件定义可分为软件系统的可行性研究和需求分析两个阶段。软件开发时期是具 体设计和实现在前一时期定义的软件,它通常由 5个阶段组成:概要设计、详细设计、编写代码、组装测试和确认测试。软件维护时期的主要任务是使软件持久地满足用户的需要。即当软件在使用过程中发现错误时应加以改正:当环境改变时应该修改软件,以适应新的环境;当用户有新要求时应该及时改进软件,以满足用户的新要求。根据上述对软件生命周期的介绍,可知选项 c中的软件维护

26、不是软件生命周期开发阶段的任务。因此,本题的正确答案是 C。 4 【正确答案】 B 【试题解析】 数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式也称子模式或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。模式也称逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。内模式也称存储模式或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方法的描述。 5 【正确答案】 D 【试题解析】 数据库的生命周期可以分为两个阶段:一是数据库设计阶段,二是数据库实现阶段。数据库的设计阶段又分为 4个子阶段,即需求分析、

27、概念设计、逻辑设计和物理设计。因此,本题的正确答案是 D。 6 【正确答案】 D 【试题解析】 时间复杂度是指一个算法执行时间的相对度量;空间复杂度是指算法在运行过程中临时占用的存储空间大小的度量。有时为了加快算法的运行速度,不得不增加空间开销;有时为了能有效地存储算法和数据,又不得不牺牲运行时间。时间和空间的效率往往是矛盾存在的,但是,这不适用于所有的情况,也就是说,时间复杂度和空间复杂度之间虽然经常矛盾,但是二者不存在必然的联系。因此,选项 A、 B、 C的说法都是错误的。 7 【正确答案】 B 【试题解析】 在长度为 64的有序线性表中,其中的 64个数据元素是按照从大到小或从小到大的顺

28、序有序排列的。在这样的线性表中进行顺序查找,最坏的情况就是查找的数据元素不在线性表中或位于线性表的最后。按照线性表的顺序查找算法,首先用被查找的数据和线性表的第一个数据元素进行比较。若相等,则查找成功;否则,继续进行比较,即和线性表的第二个数据元素进行比较。同样,若相等,则查找成功;否则,继续进行比较。以此类推,直到在线性表中查找到该数据或查找到线性表的最后一个元素,算法才结束。因此,在长度为 64的有序线性表中进行顺序查找,最坏的情况下需要比较 64次。因此,本题的正 确答案为B。 8 【正确答案】 B 【试题解析】 数据库可以看成是长期存储在计算机内的、大量的、有结构的和可共享的数据集合。

29、因此,数据库具有为各种用户所共享的特点。不同的用户可以使用同一个数据库,可以取出它们所需要的子集,而且允许子集任意重叠。数据库的根本目标是要解决数据的共享问题。因此,选项 B的说法是正确的。 9 【正确答案】 C 【试题解析】 内联函数也具有函数的基本功能,可以没有返回值;内联函数由编译器在调用该函数时将函数体的代码插入到调用该函数的语句处,同时以实参代替形参,以 便程序在运行时不再进行函数调用,即在调用时不发生控制转移。 10 【正确答案】 D 【试题解析】 用一个对象去初始化同一类的另一个新对象时,将类的一个对象赋予该类的另一个对象时,函数的形参是类的对象,调用函数进行形参和实参结合时都会

30、调用复制构造函数,生成一个新的对象,只有返回值为对象时,才调用构造函数,而不是复制构造函数,生成一个新对象给函数返回,故答案为 D。 11 【正确答案】 A 【试题解析】 派生类的成员函数在不同的继承方式下,能访问的数据成员也不一样。在公有继承方式下,派生类 的成员函数能访问基类的公有和保护成员;在保护继承方式下,能访问基类的公有和保护成员;而在私有继承方式下,则不能访问基类的任何成员。可以将派生类对象赋值给基类对象,但不能将基类对象赋值给派生类对象。如果一个抽象类的派生类中没有抽象说明纯虚函数,则该函数在派生类中仍然为纯虚函数,而这个派生类也仍然是一个抽象类。 12 【正确答案】 B 【试题

31、解析】 类模板是一个通用类,不知道其数据成员和成员函数的返回类型和形参类型,系统会根据实参的类型来取代类模板中的虚拟类型从而实现不同类的功能。类模板中的数据成员 的类型并非一定要一致。 13 【正确答案】 A 【试题解析】 在 C+中,所有设备的交互都通过流来实现。从流中提取数据称为输入操作,或者提取操作;向流中添加数据称为输出操作,或者插入操作。 cin是标准的输入流对象, cout标准输入流对象。文件流中有 open成员函数,其作用是使磁盘文件同某一已经定义的文件流对象建立关联。 14 【正确答案】 A 【试题解析】 在 C+中,变量标识符必须以大小写字母、下画线开始,是由数字或者字母下画

32、线等组成的一个字符串,其中 C+关键字不能作为标识符,不能 包含 -、 +、 *、 /等运算符号。 15 【正确答案】 B 【试题解析】 用 const修饰常量就变为常变量,常变量一旦被建立,就不能被更改。在被定义时就应该给常变量赋初始值,而常指针则不同,被定义后,它指向的地址不能发生改变,但是指向的地址中的数据可以改变。 16 【正确答案】 C 【试题解析】 Do.while()循环是先执行循环体,然后判断条件。第一次进入循环x=1,打印 1,第二次进入循环 x=0,执行 x-=2后, x=-2,打印 x,退出循环。 17 【正确答案】 D 【 试题解析】 int*p;指针变量定义时没有被初

33、始化,也没有指向具体的地址,所以在后面打印时报错。应当做如下初始化: int*p=new int( ); 18 【正确答案】 D 【试题解析】 在主函数中的 val没有初始值,而且在调用函数 function( )时采用的是传值调用,所以在函数中改变 val的值不会影响到主函数中的 val值,故输出是一个不确定的值。 19 【正确答案】 B 【试题解析】 友元函数不能使用 const修饰,故 错误, 的函数类型和返回类型不匹配。如果一个类的 成员函数被声明为 const类型,表示该函数不会改变对象的状态,也就是说该函数不会修改类的非静态数据成员,而 对类的数据成员 a进行了赋值,故不能用 co

34、nst赋值,故 错。 20 【正确答案】 B 【试题解析】 从打印结果可以看出,在对象 d调用 fun( )函数时调用了基类的fun( )函数,所以,在派生类中应该显式调用基类的 fun( )函数,故应该写成:Base:fun( );。 21 【正确答案】 C 【试题解析】 类的赋值运算符 “=”只能被重载为成员函数,不能重载为友元函数。 22 【正确答案】 D 【试题解析】 选择 A、 B错在没有给 T参数类型,在函数的返回值中应该为 T确定一个确切的类型。选项 C错在赋给 T的类型和函数中返回值的类型不匹配,故答案为 D。 23 【正确答案】 A 【试题解析】 文件流的打开路径用 “”隔开

35、,而不是 “”,但可以用 “/”隔开。 24 【正确答案】 D 【试题解析】 类的数据成员只能被定义类型,而不能对其设置默认值。如果要设置默认值需要在构造函数的参数中进行设置。 25 【正确答案】 C 【试题解析】 a(2)执 行一次,调用带参构造函数; b3生成一个对象数组,所以执行 3次无参构造函数,生成 3个对象数组元素; *c4定义一个对象指针,并没产生对象,所以没有调用构造函数。 26 【正确答案】 D 【试题解析】 类的常变量一旦被定义就不能更改,所以选项 A错。定义常成员函数不能更新对象的数据成员,也不能调用该类中的普通函数,更不能改变该类的数据成员的值。静态成员函数不能访问非静

36、态数据成员。 27 【正确答案】 B 【试题解析】 基类与派生类的构造函数与析构函数的执行顺序是先执行基类的构造 函数,然后执行派生类的构造函数。删除对象时,先执行派生类的析构函数,最后执行基类的析构函数成员。 28 【正确答案】 A 【试题解析】 派生类的成员函数不能访问基类的私有函数。 29 【正确答案】 B 【试题解析】 在删除派生类对象时,应先执行派生类的析构函数,然后执行基类的析构函数。 30 【正确答案】 C 【试题解析】 “+”作为双目运算符,在对其进行重载时,如果重载为成员函数,则只需要定义一个形参;如果重载为友元函数,则需要定义两个形参。从题干中可以看出,在重载函数声 明中,

37、没有 friend关键字,却有两个形参,故会提示友元函数重载报错。 31 【正确答案】 B 【试题解析】 ios_base:app所表示的文件打开方式为:如果文件存在则将文件指针指向文件尾,否则就建立一个新文件。 32 【正确答案】 B 【试题解析】 基类指针可以指向派生类对象,但是指针只能访问继承自基类的成员,而不能访问派生类中的新增加成员或重新定义后的成员。故 p- funcl( ); p- func2( );都执行基类的成员函数,打印 A1A2。 33 【正确答案】 19 34 【正确答案】 对象 【试题解析】 在面向对象概念中,所有的同类的实体的抽象就构成一个类,而类被实例化就形成一个

38、对象。 35 【正确答案】 程序调试 36 【正确答案】 关系 37 【正确答案】 算法 38 【正确答案】 C 39 【正确答案】 virtual double Area( )=0 【试题解析】 声明纯虚函数的一般形式如下: Virtual函数类型函数名 (参数表 )=0; 40 【正确答案】 template class T1, class T2 class dataClass 【试题解析】 类模板声明的一般格式为: template typename类型参数 Class类名 类成员声明 ; 其中类型参数可以为多个。题中出现了两个类型参数 T1、 T2,故应该在类模板的头部声明中声明两个类型参数 T1、 T2。 41 【正确答案】 int P0int:counfP=0; 【试题解析】 静态数据成员的初始化格式为: 数据类型类名 :静态数据成员名 =初始值;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1