1、国家二级( C+)笔试模拟试卷 211及答案与解析 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)不允许使用 GOTO语句 ( D)语言中所没有的控制结构,应该采用
3、前后一致的方法来模拟 6 有下列二叉树,对此二叉树中序遍历的结果为 ( )。 ( A) BDYEACFXZ ( B) DYBEAFCZX ( C) ABCDEFXYZ ( D) ABDYECFXZ 7 已知一个有序 线性表为 (13, 18, 24, 35, 47, 50, 62, 83, 90, 115, 134),当用二分法查找值为 90的元素时,查找成功的比较次数为 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 9 8 如果一个关系中,存在多个属性 (或属性组 )都能用来唯一标识该关系的元组,且其任何一个子集都不具有这一特性。这些属性 (或属性组 )都被称为关系的( )。
4、 ( A)连接码 ( B)主码 ( C)外码 ( D)候选码 9 设 R是一个 2元关系,有 3个元组, S是一个 3元关系 ,有 4个元组。如T=RS,则 T的元组为 ( )个。 ( A) 6 ( B) 8 ( C) 12 ( D) 16 10 在数据库设计中,将 E-R图转换为关系模式的过程属于 ( )。 ( A)需求分析阶段 ( B)逻辑设计阶段 ( C)概念设计阶段 ( D)物理设计阶段 11 下列语句中,错误的是 ( )。 ( A) const int buffer=-256; ( B) const int temp; ( C) const double*point; ( D) co
5、nst double*rt=new double(5 5); 12 下列变量名中,合法的 ( )。 ( A) CHINA ( B) byte-size ( C) double ( D) A+a 13 在进行任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是 ( )。 ( A) fail ( B) eof ( C) bad ( D) good 14 对于语句 cout main() int m=5: if(m+5) cout void main() intx; cinx; if(x+5) cout using namespace std;
6、 inti=1; class Fun public: static int i; int value()return i-1; int valueoconstreturn i+1; ; int Fun: i=2; int main() int i=3: Fun fun1; const Fun fun2; _ return 0; 若程序的输出结果是: 123 则程序中横线处的语句是 ( )。 ( A) cout using namespace std; classA public: A0cout #include“string h” void main() char a=“Hello Test”
7、,b=“Test”; strcpy(a, b); cout void main() char str25=“1234”,“5678”, *p2; im ij, s=0; for(i=0; i 0;j+=2) s=10*s+pij-0; cout using namespace std; void fun(char*q) +q; cout #include int fun(int*p, int n, int*j) inti; *j=0; for(i=0; i im fun(int); void main() int a=2, i; for(i=0; i using namespace std;
8、inta; int fun(); int main() extern int a; int b; a=10; b=fun(); cout usin g namespace std: class TestClass 1 public: TestClass 1 ()cout using namespaee std; classA public: A()cout5成立 (此时 m的值变为 6),所以执行语句cout5不成立,因为 “+”后缀,之后 x的值变为 5,执行语句 cout5成立,所以执行语句 cout(xendl;输出7。 17 【正确答案】 D 【试题解析】 this指针不能在程序中修改
9、,不能被幅值;静态成员没有 this指针,因为类中只有一个静态成员函数实例,使用 this指针无意义。 18 【正确答案】 A 【试题解析】 函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。因此,函数模板使一个函数可以定义成对许多不同数据类型完成同一个任务。 19 【正确答案】 A 【试题解析】 此题因为定义的变量 i是 static类型的 (main()函数内部的 i只是一个 局部变量 ),所以,选项 A中 fun1 value()的返回值是 1, Fun: i引用的是外部变量会输出 2; fun value();会调用常成员函数 int value
10、()constretun i+1; 使得外部静态变量 i的值增加为 3,故输出 3。 20 【正确答案】 A 【试题解析】 选项 A中,重载函数中是允许使用默认参数的;为了使重载函数有意义,不要使用重载函数来描述毫无相干的函数;重载函数中编译是根据参数表进行选择,包括参数的个数和类型。 21 【正确答案】 D 【试题解析】 此题中,语句 C obj对象初始化首先调用基类的构造函数 A(),输出 “A”,其次是 C类中对象的构造函数的调用,即调用 B(),输出 “B”;最后是调用自身的构造函数 C(),输出 “C”。 22 【正确答案】 B 【试题解析】 程序中首先定义字符数组 a和 b,其值分
11、别为 “Hello Test”和“Test”。然后利用 strcpy复制函数,将 b的值复制给 a,所以输出 a的结果为Test。 23 【正确答案】 A 【试题解析】 程序中的 “for(i=0; i2; i+)pi=stri; ”语句将 str中的值赋值 给指针数组 p。在接下来的二重 for循环中,跳取 “j+=2”, p指针指向的值即 “1”,“3”, “5”, “7”。在分别对字符到整型的转换,即减去字符 0,然后依次转换为千位,百位,十位,个位 “10*s”操作输出整型 s,即 “1357”。 24 【正确答案】 C 【试题解析】 由程序 main主函数入手,调用 fun函数,在
12、fun函数中执行“cout=*qendl; ”语句实现程序输出。主函数中变量 char*s为指针数组,char*表示 p指向的字符指针数据。 *p就代表 p指向的字符指针。语句 “p=s; ”表明 p指向字符指针 s,而 *p则是 s中的第一个字符串 “HI”。主函数将变量 p传值给函数 fun(char*q)中的 q,在函数体内部首先执行 “+q”语句,就是将 q的指针指向 s中的下一个字符串,即 “HELLO”,所以输出语句 “cout*qendl; ”输出该字符串值。 25 【正确答案】 A 【试题解析】 由程序中的主函数 main入手,调用 fun函数。其中第一个实参为数组 a的名字,
13、数组名作为实参,传递韵是数组的起始地址。所以在 fun函数中指针 p指向了数组的第一个元素 a0。另外实参整型 j传递的是引用,也就是 j的地址。在 fun函数中在 for循环中,依次将当前元素 pi与 j指针值为标识的 p进行比较,取较大的。最后循环后的结果就是 p存放数组中的最大值,并且指针 j为该值的标识位。可以看出数组的最大值是 9标识位为 2。 26 【正确答案】 C 【试题解析】 主函数中在 for循环中依次调用 fun函数。其中 c为静态变量,到程序结束有效。第一次循环中 2+1+4=7,第二次循环 20+1+5=8,第三次循环2+1+6=9。即答案为 7 8 9。 27 【正确
14、答案】 C 【试题解析】 由主函 数 main入手,首先定义外部变量 a,它的作用域为从变量的定义处开始,到本程序文件的末尾,赋值为 10。然后调用 fun函数,在: fun函数中计算 10*a,其中 a的作用域为到文件结尾,所以这里的 a为 10,即 10*10。 28 【正确答案】 B 【试题解析】 静态数据成员不能在参数初始化表对静态数据成员初始化,只能在类体外进行初始化。 29 【正确答案】 B 【试题解析】 派生类中构造函数的执行顺序是:先调用基类构造函数,对基类数据成员初始化,然后调用子对象构造函数,对子对象数据成员初始化;最 后执行派生类构造函数本身,对派生类数据成员初始化。由主
15、函数 main入手,首先定义了一个 TestClass2对象 obj。其中 TestClass2公共继承 TestClass1,对象 obj可以访问 TestClass1中的公有成员函数。 TestClass2中定义了一个 TestClass1的指针p,给 p分配新空间,即指向类 TestClass1,输出 “TestClass1”。在 TestClass2的构造函数中首先输出 “TestClass2”,并在 TestClass1构造函数中输出“TestClass1”。 TestClass2析构函数中输出 “ TestClass2”,删除指针 p,输出 “TestClass1”。析构 Test
16、Class1输出 “ TestClass1”。 30 【正确答案】 B 【试题解析】 题目中程序 Testclass为基类, Testclass1为派生类,派生类构造函数的一般形式为:派生类构造函数名 (总参数类表 ):基类构造函数名 (参数列表 )派生类中新增数据成员初始化语句 )。派生类 TestClass1的基类函数名为 TestClass,总参数为 int a, int b,所以选择 B。 31 【正确答案 】 B 【试题解析】 程序中的 TestClass1为 Testclass的派生类,如果不写继承方式,则默认为 private,所以 TestClass1私有继承 Testclas
17、s,对于基类中的保护成员,继承类的访问权限为 Drivale。所以选择 B。 32 【正确答案】 D 【试题解析】 基类的公有成员和保护成员在保护派生类中都成了保护成员,其私有成员仍为基类私有。 33 【正确答案】 B 【试题解析】 此题考查的是 C+语言中对象概念的理解。所谓封装性是指将数据和算法捆绑成一个整体,这个 整体就是对象。 C+语言通过建立用户定义类型 “类 ”来支持封装性和信息隐藏。 34 【正确答案】 A 【试题解析】 此题考查的是类和对象的概念。类是用户定义的一种数据类型,可以使用这个类型来说明一个或多个变量,即对象。 35 【正确答案】 C 【试题解析】 此题考查的是有关函
18、数的概念。内联函数是在函数定义之前加关键字 inline来声明的函数,而不是定义在另一个函数体内部的函数,故选项 A错误;无返回值的函数在执行完最后一条语句后,会自动返回而不必加入 return语句,故选项 B错误;如果函数只 是返回值类型不同,而其他完全相同,则不能作为函数重载来使用。 36 【正确答案】 逻辑 【试题解析】 数据的逻辑结构主要是反映数据之间的逻辑关系,而存储结构是用来反映数据的逻辑结构在计算机存储空间中的存放形式。循环队列主要是强调数据之间的关系,因此属于逻辑结构。 37 【正确答案】 外模式 【试题解析】 数据库系统的三级模式分别是内模式、概念模式和外模式。其中,物理模式
19、给出了数据库的物理存储结构和存取方法;概念模式是数据库系统中全局数据逻辑结构的描述;外模式是用户的数据视图,也就是用户所 见到的数据模式。 38 【正确答案】 软件工具 【试题解析】 软件开发环境或称软件工程环境是全面支持软件开发全过程的软件工具集合。这些软件工具按照一定的方法或模式组合起来,支持软件生命周期内的各个阶段和各项任务的完成。 39 【正确答案】 ACBEGFD 【试题解析】 我们分 4大步骤来推理: 找到根结点:由于前序遍历首先访问根结点,那么前序遍历结果的第一个结点肯定就是整个二叉树的根结点。前序遍历结果是 DBAcFEG,可知 D为二叉树的根结点。 分出左、右子树:中序遍历中
20、,访问根结点的次序为 居中,先访问左子树,再访问右子树。因此,在中序遍历的结果 ABCDEFG中,以根结点 D为中间界线,前面的 ABC在左子树,后面的 EFG在右子树。 分析左子树:首先确定左子树 ABC的根点。在前序遍历中, B最靠前,应该是 ABC三个结点的根结点;在中序遍历中, A靠前,应该是ABC三个结点的左子树, C为右子树。 分析右子树:同理分析 EFG三个结点,就可以完整地画出整个二叉树的原貌了。 40 【正确答案】 13 【试题解析】 度为 0的结点 (即叶子结点 )总比度为 2的结点多一个。 41 【正确答案】 *q 【试题解析】 C+中要访问一个指针所指向的数据,应该用
21、*运算符。 42 【正确答案】 2 【试题解析】 本题考查的是运算符的优先级。首先 x=3, y=2,判断 xy为否,则取 y的值,为 2。 43 【正确答案】 友元函数 【试题解析】 C+的友元提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间数据共享的机制。一个类可以利用 friend将一般函数、其他类成员函数或者其他类声明为友元。友元的声明可以放在类的任何一个区域。定义须在类外声明在公有私有部分均可。 44 【 正确答案】 4, 5 【试题解析】 本题考查了静态变量的用法。当函数执行完毕后,返回调用点时,静态变量并不撤销,其值将继续保留,若下次进入该函数,其值仍然存在。所以本题
22、输出 4, 5。 45 【正确答案】 AAB 【试题解析】 “Aa: ”语句将导致 A的构造函数被执行,输出 “A”, “Ab; ”语句将导致 B的构造函数执行,由于 B私有继承 A,故在执行 B的构造函数前,先执行 A的构造函数,输出 “A”,然后执行 B的构造函数,输出 “B”。 46 【正确答案】 2 【试题解析】 数组名实际上是数组第一个元 素的地址。对于本题 *q=x,将 x0的地址赋予 q, cout*(+q)endl;后 q便指向数组 x的第二个元素。所以输出2。 47 【正确答案】 虚函数 【试题解析】 多态性分为编译时多态性和运行时多态。编译时多态性是通过函数重载实现的,运行
23、时多态性是通过虚函数来实现的。 48 【正确答案】 # 【试题解析】 首先判断 a的值,题中 a的值为 0,然后判断 b的值, b的值为2,所以先输出 “ ”,而 case 0后面没有 break语句,所以再判断 c的值,这样又输出 “#”。 49 【正确 答案】 7 【试题解析】 enum类型实际上是 int类型的一个子集,其每一个枚举值代表一个整数。当 n个枚举型未被赋值时,它们自左至右依次为 0, 1, , n-1,如果第i个枚举值为 m,则其未赋值的后面枚举值分别是 m+1, m+2 。所以本题的答案是 7。 50 【正确答案】 4 【试题解析】 C+中的参数传递包括传值与传地址两种。传值是默认的参数传递方式。如果调用函数时,须要改变实参或者返回多个值,就应该采用传地址方式。传递指针属于显式的传地址方式,传递引用属于隐式的传地址方式。本题采用的是传递引 用,所以实参被改变。