1、国家二级( C+)笔试模拟试卷 162及答案与解析 1 下列选项中不符合良好程序设计风格的是 ( )。 ( A)源程序要文档化 ( B)数据说明的次序要规范化 ( C)避免滥用 goto语句 ( D)模块设计要保证高耦合、高内聚 2 下列叙述中正确的是 ( )。 ( A)软件测试应该由程序开发者来完成 ( B)程序经调试后一般不需要再测试 ( C)软件维护只包括对程序代码的维护 ( D)以上三种说法都不对 3 对于长度为 n的线性表,在最 坏情况下,下列各排序法所对应的比较次数中正确的是 ( )。 ( A)冒泡排序 n/2 ( B)冒泡排序为 n ( C)快速排序为 n ( D)快速排序为 n
2、(n-1)/2 4 为了使模块尽可能独立,要求 ( )。 ( A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强 ( B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 ( C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱 ( D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强 5 在 软件设计中,不属于过程设计工具的是 ( )。 ( A) PDL(过程设计语言 ) ( B) PAD图 ( C) N-S图 ( D) DFD图 6 设有如下三个关系表:下列操作中正确的是 ( )。 ( A) T RS ( B) T RS ( C) T RS ( D) T R/S 7 将
3、E-R图转换到关系模式时,实体与联系都可以表示成 ( )。 ( A)属性 ( B)关系 ( C)键 ( D)域 8 设有两个串 p和 q, 求 q在 p中首次出现位置的运算称为 ( )。 ( A)连接 ( B)模式匹配 ( C)求子串 ( D)求串长 9 实体是信息世界中广泛使用的一个术语,它用于表示 ( )。 ( A)有生命的事物 ( B)无生命的事物 ( C)实际存在的事物 ( D)一切事物 10 数据库系统的核心的是 ( )。 ( A)数据模型 ( B)数据库管理系统 ( C)数据库 ( D)数据库管理员 11 下列叙述中正确的是 ( )。 ( A)全局变量的作用域一定比局部变量的作用域
4、范围大 ( B)静态类别变量的生存期贯穿于整个程序的运行期间 ( C)函数的形参都属于全局变量 ( D)未在定义语句中赋初值的 auto变量和 static变量的初值都是随机值 12 假定 MyClass为一个类,则执行 MyClassab(2), *p;语句时,自动调用该类构造函数 ( )次。 ( A) 2 ( B) 3 ( C) 4 ( D) 5 13 能正确表示逻辑关系: ”a10或 a0”的 C+语言表达式是 ( )。 ( A) a 10 or a 0 ( B) a 0|a 10 ( C) a =10 ( D) MyClass(); 16 关于类和对象描述错误的是 ( )。 ( A)对
5、象 (Object)是现实世界中的客观事物,对象具有确定的属性 ( B)类是具有相同属性和行为的一组对象的集合 ( C)对象是类的抽象, 类是对象的实例 ( D)类是对象的抽象,对象是类的实例 17 下列对重载函数的描述中,错误的是 ( )。 ( A)重载函数中不允许使用默认参数 ( B)重载函数中编译是根据参数表进行选择的 ( C)不要使用重载函数来描述毫不相干的函数 ( D)构造函数重载将会给初始化带来多种方式 18 以下程序的运行结果是 ( )。 #include iostream.h void sub(int x, int y,int*z) *Z=y-x; void main() in
6、t a, b, c; sub(10, 5, ( D) p a; 21 有以下程序段: int k 0; while(k 1)k+; while循环执行的次数是( )。 ( A)无限次 ( B)有语法错,不能执行 ( C)一次也不执行 ( D)执行 1次 22 设有数组定义: chararray: ”China”;则数组 array所占的空间为 ( )。 ( A) 4个字节 ( B) 5个字节 ( C) 6个字节 ( D) 7个字节 23 下列关于 getline()函数的描述中,错误的是 ( )。 ( A)该函数可以用来从键盘上读取字符串 ( B)该函数读取的字符串长度是受限制的 ( C)该函
7、数读取字符串时,遇到终止符时便停止 ( D)该函数中所使用的终止符只熊是换行符, 24 有以下程序: void fun(int a*a, int i, int i) int t; if(i j); t=ai; ai aj; aj t; fun(a, +i, -j); main() inta 1, 2, 3, 4, 5,6, i; fun(a, 0, 5); for(i 0; i(6; i+) cout (ai; 执行后输出结果是 ( )。 ( A) 6 5 4 3 2 1 ( B) 4 3 2 1 5 6 ( C) 4 5 6 1 2 3 ( D) 1 2 3 4 5 6 25 下列描述中错误
8、的是 ( )。 ( A)析构函数可以被继承 ( B)虚函数不能被继承 ( C)派生类可以有多个基类 ( D)纯虚基类的子类可以是虚基类 26 设有程序段: int k 10; while(k 0)k k-1; 则下面描述中正确的是( )。 ( A)循环执行 10次 ( B)无限循环 ( C)循环体语句一次也不执行 ( D)循环体语句执行一次 27 有如下程序: #include iostream using namespace std; Class A public: A()cout “A”; A()cout “ A”; ; A*p; public: B()cout “B”; p new A;
9、 B()cout “ B”; delete p; ; 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 C+语言类体系中,不能被派生类继承的有 ( )。 ( A)转换函数 ( B)构造函数 ( C)虚函数 ( D)静态成员函数 29 下面程序的运行结果是 ( )。 #include iostream.h class base protected: int a; public: base()cout “0”; ; Class basel: Virtual
10、 base public: basel()cout “1”; ; Class base2: virtual base public: base2()cout “2”; ) ( A) 0123 ( B) 3120 ( C) 0312 ( D) 3012 30 对于类定义: class A public: virtual void funcl() void func2() ); class B: public A public: voidfuncl()cout “class Bfunc 1” endl; virtual void func2()cout “class B func 2” endl;
11、 ; 下面正确的叙述是( )。 ( A) A: func2()和 B: funcl()都是虚函数 ( B) A: func2()和 B: funcl()都不是虚函数 ( C) B: funcl()是虚函数,而 A: func2()不是虚函数 ( D) B: funcl()不是虚函数,而 A: func2()是虚函数 31 下面关于运算符重载的描述错误的是 ( )。 ( A)运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构 ( B)不是所有的运算符都可以进行重载 ( C)运算符函数的调用必须使用关键字 operator ( D)在 C+语言中不可通过运算符重载创造
12、出新的运算符 32 与语句 cout endl;不等价的是 ( )。 ( A) cout n; ( B) cout 12; ( C) cout xA; ( D) cout 0; 33 下面程序的运行结果是 ( )。 #include iostream.h intfun(inta, int n) int result 1; for(int i “i n; i+) resultresultxai; return result; void main() inta3 3, 4, 5; cout fun(a, 3) endl; ( A) 12 ( B) 15 ( C) 20 ( D) 60 34 下面程
13、序的运行结果是 ( )。 #include iostream.h void main() int i1; while(i 8) if(+i%3! 2)continue; else cout i; ( A) 25 ( B) 36 ( C) 258 ( D) 369 35 下列程序的运行结果为 #include iostream.h template class TT class FF TT a1, a2, a3; public: FF(TT b1, TT b2, TT b3)a1 b1; a2=b2; a3 b3; TT Sum()return a1+a2+a3; ; void main() F
14、F int x(int(1.1),2, 3), y(int(4.2), 5, 6); cout x.Sum() ( A) 6.1 15.2 ( B) 6 15 ( C) 6 15.2 ( D) 6.1 15 36 在面向对象方法中,类的实例称为 _。 37 一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是_。 38 关系操作的特点是 _操作。 39 数据库保护分为安全性控制、 _、并发性控制和数据的恢复。 40 全面支持软件开发过程的软工具集合被称为 _。 41 函数定义的格式是 _函数名 (形式参数表 )函数体。 42 C+语言程序的注释可以出现在程序中的任何地方,一个注释以
15、 _作为开始和结束的标记。 43 纯虚函数的声明总是以 _结束。 44 下列程序的输出结果是 _。 #include iostream.h) template class T Tmax(T x, int n) int i; T maxv x0; for(i 1; i(n; i+) if(maxv maxv xi; return maxv; void main() inta 3, 2, 7, 6, 8, 9; double b 1.2, 3.4, 2.5, 7.3, 6 45 用以下语句调用库函数 malloc,使字符指针 st指向具有 11个字节的动态存储空间,请填空。 st=(char*);
16、 46 有如下定义: Class MA int value; public: MA(int n 0): value(n) ; MA*ta, tb; 其中 MA类的对象名标识符是 _。 47 下列程序在构造函数和析构函数中 申请和释放类的数据成员 int*a,申请时使用形参 b初始化 a,请填空。 class A public: A(int b); A(); private: int * a; ; A: A(int b) _; A: A() _; 48 程序中有如下语句: for(int i 0; i 5; i+)cout *(p+i) “, “; 能够依次输出 int型一维数组 DATA的前
17、5个元 素。由此可知,变量 p的定义及初始化语句是 _。 49 表达式 c3 c1.operator+(c2)或 c3 operator+(cl, c2)还可以表示为 _。 国家二级( C+)笔试模拟试卷 162答案与解析 1 【正确答案】 D 【试题解析】 对于软件设计中的模块设计要保证高内聚和低耦合,源程序要有文档说明,同时对程序中数据的说明要规范化。 goto语句破坏程序的结构,要尽量避免使用。 2 【正确答案】 D 【试题解析】 程序调试就是来诊断和改正程序中的错误,由程序 开发者完成。软件测试是为了发现错误而执行程序的过程,它由专门的测试人员完成。软件维护是指软件系统交付使用以后,为
18、了改正错误或满足新的需要而修改软件的过程,是软件生存周期中非常重要的一个阶段。 3 【正确答案】 D 【试题解析】 本题主要考查对排序算法的理解。冒泡排序法首先将第一个记录的关键宇与第二个记录的关键宇进行比较,若逆序则交换,然后比较第二个与第三个,以此类推,直至第 n-1个与第 n个记录的关键宇进行比较。第一趟冒泡排序使最大的关键宇元素放到最后。以此类推,进行第 2 n次冒泡排序。如果在排序 过程中不存在逆序,则排序结束。在最坏情况下,冒泡排序中,若初始序列为“逆序 ”序列,需要比较 n(n-1)/2次。快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将待排记录分割成独立的两部分,
19、其中一部分记录的关键宇比另一部分记录 4 【正确答案】 B 【试题解析】 耦合是指模块之间的关联程度,而内聚是指模块内部各部分的聚合程度。模块之间的关联程度越小,模块内部的聚合程度越高,就越容易维护。在程序设计中应追求高内柬低耦合。 5 【正确答案】 D 【试题解析】 PDL是过程设计语 言 (Procedure Desig n Language)的简写,也称程序描述语言,用于描述模块算法设计和处理细节的语官, N-S图是编程过程中常用的一种分析工具,提出了最初分析阿题方法 PAD是问题分析图(ProblemAnalysis Diagram)的简写,它用二维树型结构的图表示程序的控制流,将这种
20、图转换为程序代码比较容易; DFD(数据流图 )是描述数据处理过程的工具。 6 【正确答案】 C 【试题解析】 关系代数中的集合运算有并、差、交和笛卡尔积 4种。根据本题关系 T中的元组可知,它是由关系 R和关系 S进行笛卡尔积运算得到的。 7 【正确答案】 B 【试题解析】 关系数据库逻辑设计的主要工作是将 E-R图转换成指定 RDBMS中的关系模式。从 E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系, E-R图中属性也可以转换成关系的属性。实体集也可以转换成关系。 8 【正确答案】 B 【试题解析】 字串的定位操作通常称为串的模式匹配,是各种串处理系统中最重要的操作之一。
21、 9 【正确答案】 C 【试题解析】 实体是客观存在且可以相互区别的事物。实体可以是具体的对象,如一个人,也可以是抽象的事件,如拔河比赛等。因此,实体既可以是有生命的事物,也可以是无生命的事物,但它必须是客观存在且可以相互区别的。 10 【正确答案】 B 【试题解析】 数据库系统由数据库、数据库管理系统、数据库应用系统、数据库管理员和用户构成。所谓数据库是指长期存储在计算机内的、有组织的;可共事的数据集合,数据库管理系统是位于用户与操作系统之间的一层数据管理软件,是数据库系统的核心组成部分,可以管理数据,并提供用户操作的接口。 11 【正确答案】 B 【试题解析】 本题考查 的是变量的作用域及
22、其生存期。一个全局变量的生存周期从它被声明开始,直到程序结束,一个局部变量的生存期从它被声明开始,直到包含它的最近的一个程序块结束。静态变量的生存期将延续到整个程序的终止。 12 【正确答案】 A 【试题解析】 C+在创建一个对象时,会调用类的构造函数。执行MyClassab(2), *p:创建了两个对象 a、 b和指针 p,在创建对象 a和 b会调用构造函数,而创建指针 p时,由于 p本身不是对象,所以不调用类的构造函数。 13 【正确答案】 D 【试题解析】 逻辑运算符 “|”表示或的意思。 14 【正确答案】 C 【试题解析】 本题考查简单的 ifelse 语句。先执行条件 if(a b
23、),显然不成立,则执行 else语句。 15 【正确答案】 D 【试题解析】 C+语言中析构函数为符号 “ ”加类名,且析构函数没有返回值和参数,故前不加 void关键宇。所以正确的形式应该是 MyClass()。 16 【正确答案】 C 【试题解析】 C+中,类是用户自定义的一种数据类型,对象是类的实例,类定义了属于该类的所有对象的共同特性。一个类作为一种数据类 型,它可以定义多个对象。 17 【正确答案】 A 【试题解析】 选项 A中,重载函数中最允许使用默认参数的;为了使重载函数有意义,不要使用重载函数来描述毫不相干的函数;重载函数中编译是根据参数表进行选择的,包括参数的个数和类型。 1
24、8 【正确答案】 B 【试题解析】 在 C+语言中,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。 19 【正确答案】 B 【试题解析】 本题思路巧妙,分析时可以发现 b (a+b)-b,则此时 b中放的是a,完成交换工作的 一半。然后要将 b放到 a中,将表达式展开,则为 a (a+b)-a,此时正好把 b放到 a中。此时完成全部的交换。 20 【正确答案】 A 【试题解析】 从循环语句中可以看出,是在 0到 4的循环中输出数组 a中的前 5个元素,输出的值为 *(p+i),即为指针 p向后移动指向的元素。所以初始化要将指针 p指向数组 a,即 int*p=a;。
25、21 【正确答案】 A 【试题解析】 本来 while中的表达式应为 k 1,而本题却为 k=1,是赋值表达式而不是逻辑表达式。因此,编译器将其值一直认为是 1,因此表达式 一直为真,陷入无限次的循环。 22 【正确答案】 C 【试题解析】 本题考查在 C+语言中,字符串的存放规则。即字符串存放在字符数组中,而且在字符的后面自动插入标识字符串结束的标识符 0,因此,共 6个字符,每个字符占用一个字节,故正确答案为 C。 23 【正确答案】 D 【试题解析】 本题考查的是无格式输入输出流对象中的 getline()函数。该函数的功能是允许从输入洗中读取多个字符,并且允许指定输入终止字符 (默认是
26、换行符 ),在读取完成后,从读取的内容中删除该终止字符。 24 【正确答案】 A 【试题解析】 本题采用递归函数的方式将数组中的元素进行倒置,正确答案为A。 25 【正确答案】 B 【试题解析】 本题考查关于 C+语言基类中虚函数的继承问题。 C+语言中基类的虚函数是可以被派生类继承的。 26 【正确答案】 A 【试题解析】 选项 A,成为成员函数可以在类体内定义,也可以在类体外定义,所以成员函数不一定能是内联函数;成员函数可以重载,可以设置参数的默认值,成员函数可以是静态的,所以其他选项叙述均正确。 27 【正确答案】 B 【试 题解析】 本题考查的是类的构造函数和析构函数。派生类构造函数的
27、执行顺序:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用予对象的构造函数,调用顺序按它们在类中说明的顺序,最后是派生类构造函数中的内容。因此本题中,首先调用基类构造函数输出 A,然后调用于对象的构造函数输出 B, p newA再调用类 A的构造函数输出 A;析构函数的调用顺序和构造函数的调用顺序相反。 28 【正确答案】 B 【试题解析】 派生类对象的数据结构是由基类中说明的数据成员和派生类中说明的数据成员共同构成,所以不 能继承基类的构造函数,必须重新定义。 29 【正确答案】 A 【试题解析】 本题考查的是含有虚基类的继承中构造函数的调用顺序,应该先调用基类的构造函数,
28、接着是按照派生类继承列表的顺序依次调用虚基类的构造函数,最后调用派生类自己的构造函数。 30 【正确答案】 C 【试题解析】 基类中说明的虚函数,在派生类中自然就是虚函数,所以类 B中funcl()是虚函数;而类 A中的 func2没有被关键宇 virtual修饰,所以不是虚函数。 31 【正确答案】 C 【试题解析】 例如 ”: ”运算符就不能被重载,通过重载可以创造新的运算方式,但是不能臆造新的运算符;定义的时候必须使用关键宇 operator,而调用时可直接使用运算符; 32 【正确答案】 D 【试题解析】 题干表示的是回车换行,选项 A., B.和 C都表示回车换行。而D是字符串的结尾
29、标志。 33 【正确答案】 C 【试题解析】 for循环执行 2次,所以第一次 for循环为 result: 1*a1=4,第二次 for循环为 result=4*a2=20。 34 【正确答案】 C 【试题解析】 应 镇先做 +运算,然后进行 %运算,最后比较不等式,实际上最后输出的结果就是被 3除,余数为 2的不大于 8的数。 35 【正确答案】 B 【试题解析】 本题考查模板函数的应用,表达式 int(1.1)和 int(4.2)是将 1.1和 4.2强制转换为整型。 36 【正确答案】 对象。 【试题解析】 类是具有具有相同特征的对象的抽象,对象是类的实例。 37 【正确答案】 算法的
30、控制结构。 【试题解析】 算法的两个基本要素是:数据对象的运算和操作及算法的控制结构。 38 【正确答案】 集合。 【试题解析】 在关系数据库中,把数据表示成二维表,每一个二维表称为关系,因此关系其实是数据的集合,对关系的操作其实就是对数据组成的集合之间的操作。 39 【正确答案】 完整性控制。 【试题解析】 安全性控制:防止未经授权的用户有意或无意存取数据库中的数据,以免数据被泄露、更改或破坏,完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作;并发性控制:正确处理好多用户、多任务环境下的并发操作,防止错误发生,数据的恢复:当数据库被破坏或数据不正确时,使数据库
31、 能恢复到正确的状态。 40 【正确答案】 软件工程过程。 【试题解析】 软件开发环境或称软件工程环境,它是全面支持软件开发过程的软件工具集合。 41 【正确答案】 返回类型。 【试题解析】 本题考查基本的函数定义格式。 42 【正确答案】 /* */。 【试题解析】 C+语言程序的注释可以出现在程序中的任何地方,一个注释以“/*“开始,以 “*/“为结束。 43 【正确答案】 =0。 【试题解析】 纯虚函数是在声明虚函数时被 “初始化 ”为。的函数。定义的一般形式 : virtual函数类型 函数名 (参数列表 )=0。所以答案为 “=0”。 44 【正确答案】 7, 3.4。 【试题解析】
32、 函数的功能是求出数组中指定范围的元素中的最大值。所以在 a数组中前四个数据中最大值为 7,数组 b中前 3个元素中最大值为 3.4。 45 【正确答案】 malloc(11)或 malloc(sizeof(char)*11)。 【试题解析】 malloc函数的参数可以是一个具体的常数,也可以是一个表达式。在本题中,可以是 malloc(11),也可以借助于 sizeof运算符来表 示。 46 【正确答案】 tb。 【试题解析】 本题考查的是对象的定义。对象的定义格式:类名 对象名 (参数表 );所以题目中的 tb是对象名标识符,而 ta被定义成类 MA的指针,故空格处应填 tb。 47 【正
33、确答案】 a newint(B) delete a。 【试题解析】 C+中 new和 delete的使用有如下几种: a=new int; delete a a=new int(10); delete a; a=new int10;deletea; 48 【正确答案】 int*p DATA。 【试题解析】 本题考查的是指针变量的定义及初始化。题目中要求输出 int型数组 DATA的前 5个元素,由表达式 *(p+0)和 *(p+4)可知,变量 p是一个指向DATA首地址的 mt型指针,故它的定义及初始化语句是 iht*p=DATA。 49 【正确答案】 c3=c1+c2。 【试题解析】 本题考查的是 “+”运算符的重载。运算符函数的调用有两种形式,第一种是像一般函数那样用函数名调用,即 c1.Operator+(c2)或者 operator+(cl,c2);另一种是通过运算符构成表 达式,即 cl+c2。