1、国家二级(C+)笔试-试卷 1 及答案解析(总分:102.00,做题时间:90 分钟)一、选择题(总题数:36,分数:72.00)1.选择题()下列各题 A、B、C、D 四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。(分数:2.00)_2. (分数:2.00)A.B.C.D.3. (分数:2.00)A.B.C.D.4. (分数:2.00)A.B.C.D.5. (分数:2.00)A.B.C.D.6. (分数:2.00)A.B.C.D.7. (分数:2.00)A.B.C.D.8. (分数:2.00)A.B.C.D.9. (分数:2.00)A.B.C.D.10. (分数:2.
2、00)A.B.C.D.11. (分数:2.00)A.B.C.D.12. (分数:2.00)A.B.C.D.13. (分数:2.00)A.B.C.D.14. (分数:2.00)A.B.C.D.15. (分数:2.00)A.B.C.D.16. (分数:2.00)A.B.C.D.17. (分数:2.00)A.B.C.D.18. (分数:2.00)A.B.C.D.19. (分数:2.00)A.B.C.D.20. (分数:2.00)A.B.C.D.21. (分数:2.00)A.B.C.D.22. (分数:2.00)A.B.C.D.23. (分数:2.00)A.B.C.D.24. (分数:2.00)A.B
3、.C.D.25. (分数:2.00)A.B.C.D.26. (分数:2.00)A.B.C.D.27. (分数:2.00)A.B.C.D.28. (分数:2.00)A.B.C.D.29. (分数:2.00)A.B.C.D.30. (分数:2.00)A.B.C.D.31. (分数:2.00)A.B.C.D.32. (分数:2.00)A.B.C.D.33. (分数:2.00)A.B.C.D.34. (分数:2.00)A.B.C.D.35. (分数:2.00)A.B.C.D.36. (分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:30.00)37.填空题(每空)请将每一个空的正确答案
4、写在答题卡上。注意:以命令关键字填空的必须拼写完整。(分数:2.00)_38.在算法的 4 个特性中,算法必须能在执行有限个步骤之后终止指的是算法的 1 特性。(分数:2.00)填空项 1:_39.栈中允许进行插入和删除的一端叫做 1。(分数:2.00)填空项 1:_40.在关系代数运算中, 1 操作会消去关系中的某些列并删去重复的元组。(分数:2.00)填空项 1:_41.Jackson 方法是一种面向 1 的结构化方法。(分数:2.00)填空项 1:_42.在关系模型中,二维表的行称为 1。(分数:2.00)填空项 1:_43. (分数:2.00)填空项 1:_44.已有函数 fun(a,
5、b),为了使函数指针变量 p 指向函数 fun,则使用的赋值语句是 1(分数:2.00)填空项 1:_45. (分数:2.00)填空项 1:_46. (分数:2.00)填空项 1:_47. (分数:2.00)填空项 1:_48. (分数:2.00)填空项 1:_49. (分数:2.00)填空项 1:_50. (分数:2.00)填空项 1:_51. (分数:2.00)填空项 1:_国家二级(C+)笔试-试卷 1 答案解析(总分:102.00,做题时间:90 分钟)一、选择题(总题数:36,分数:72.00)1.选择题()下列各题 A、B、C、D 四个选项中,只有一个选项是正确的,请将正确选项涂写
6、在答题卡相应位置上。(分数:2.00)_解析:2. (分数:2.00)A.B. C.D.解析:解析:本题考查数据结构中有关算法的基本知识和概念。数据的结构会直接影响算法的选择和效率。而数据结构包括两方面,即数据的逻辑结构和数据的存储结构。因此,数据的逻辑结构和存储结构都影响算法的效率。选项 A 的说法是错误的。算法的时间复杂度是对算法在计算机内执行时所需时间的度量;与时间复杂度类似,空间复杂度是对算法在计算机内执行时所需存储空间的度量。3. (分数:2.00)A.B.C.D. 解析:解析:本题考查软件工程中软件设计的概念和原理。人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得到
7、如下的启发式规则:改进软件结构,提高模块独立性。通过模块的分解或合并,力求降低耦合、提高内聚。低耦合是指降低不同模块间相互依赖的紧密程度,高内聚是指提高一个模块内各元素彼此结合的紧密程度。模块的规模应适中。一个模块的规模不应过大,过大的模块往往是由于分解不够充分;过小的模块开销大于有益操作,而且模块过多将使系统接口复杂,因此过小的模块有时不值得单独存在。模块的功能应该可以预测,但也要防止模块功能过分局限。如果模块包含的功能太多,则不能体现模块化设计的特点;如果模块的功能过分局限,使用范围就过分狭窄。本题的正确答案是选项 D。4. (分数:2.00)A. B.C.D.解析:解析:就软件测试而言,
8、它的目的是发现软件中的错误。但是,发现错误并不是最终目的,最终目的是通过测试发现错误之后还必须诊断并改正错误,这才是测试的目的。由于测试的目标是暴露程序中的错误,所以从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在软件测试阶段通常由其他人员组成测试小组来完成测试工作。经过上述分析可知,选项 A 的说法是正确的,而选项 B、C、D 的说法是错误的。5. (分数:2.00)A.B.C. D.解析:解析:面向对象方法具有封装性、继承性、多态性几大特点。就是这几大特点,为软件开发提供了一种新的方法学。封装性:所谓封装就是将相关的信息、操作与处理融合在一个内含的部件中(对象中)。它是面向对
9、象程序设计的基础。继承性:子类具有派生它的类的全部属性(数据)和方法,而根据某一类建立的对象也具有该类的全部属性(数据)和方法,这就是继承性。继承有利于提高软件开发效率,容易达到一致性。多态性:多态性就是多种形式。不同的对象在接收到相同的消息时,采用不同的动作。6. (分数:2.00)A.B.C.D. 解析:解析:本题考查数据结构中队列的基本知识。队列是一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出的特性。在队列中,允许插入元素的一端叫做队尾,允许删除元素的一端则称为队头。7. (分数:2.00)A.B.C. D.解析:解析:根据对二叉树根的访问先后顺
10、序不同,分别称为前序遍历、中序遍历和后序遍历。这 3 种遍历都是递归定义的,即在其子树中也按照同样的规律进行遍历。下面就是前序遍历方法的递归定义。当二叉树的根不为空时,依次执行如下 3 个操作:访问根结点,按前序遍历左子树,按前序遍历右子树。根据如上前序遍历规则来遍历本题中的二叉树。首先访问根结点,即 A,然后遍历 A 的左子树。遍历左子树同样按照相同的规则首先访问根结点 B,然后遍历 B 的左子树。遍历 B 的左子树,首先访问 D,然后访问 D 的左子树,D 的左子树为空,接下来访问 D 的右子树,即 Y。遍历完 B 的左子树后,再遍历 B 的右子树,即 E。到此遍历完 A 的左子树,接下来
11、遍历 A 的右子树。按照同样的规则,首先访问 C,然后遍历 C的左子树,即 F。C 的左子树遍历完,接着遍历 C 的右子树。首先访问右子树的根结点 X,然后访问 X 的左子树,即 Z,接下来访问 X 的右子树,右子树为空,遍历的结果为 ABDYECFXZ,故本题的正确答案为选项 C。8. (分数:2.00)A. B.C.D.解析:9. (分数:2.00)A.B. C.D.解析:解析:本题考查数据库的关系运算。两个关系的并运算是指将第一个关系的元组加到第二个关系中,生成新的关系。因此,并运算不改变关系表中的属性个数,也不能减少元组个数。两个关系的交运算是包含同时出现在第一和第二个关系中的元组的新
12、关系。因此,交运算不改变关系表中的属性个数,但能减少元组个数。投影是一元关系操作。投影操作选取关系的某些属性,这个操作是对一个关系进行垂直分割,消去某些属性,并重新安排属性的顺序,再删除重复的元组。因此,投影运算既可以减少关系表中的属性个数,也可以减少元组个数。两个关系的笛卡儿积是指一个关系中的每个元组和第二个关系的每个元组连接。因此,笛卡儿积运算能够增加元组属性的个数。在上述 4 种运算中,交运算不改变关系表中的属性个数但能减少元组个数。10. (分数:2.00)A.B.C. D.解析:解析:E-R 模型中,有 3 个基本的抽象概念:实体、联系和属性。E-R 图是 E-R 模型的图形表示法,
13、在 E-R 图中,用矩形框表示实体,菱形框表示联系,椭圆形框表示属性。11. (分数:2.00)A. B.C.D.解析:解析:本题考查数据库系统的基本概念和知识。数据的逻辑结构是数据间关系的描述,它只抽象地反映数据元素之间的逻辑关系,而不管其在计算机中的存储方式。数据的存储结构又叫物理结构,是逻辑结构在计算机存储器里的实现。这两者之间没有必然的联系。因此,选项 A 的说法是错误的。数据库可以看成是长期存储在计算机内的、大量的、有结构的和可共享的数据集合。因此,数据库具有为各种用户所共享的特点。不同的用户可以使用同一个数据库,可以取出它们所需要的子集,而且容许子集任意重叠。数据库的根本目标是要解
14、决数据的共享问题。因此,选项 B 的说法是正确的。数据库设计是在数据库管理系统的支持下,按照应用的要求,设计一个结构合理、使用方便、效率较高的数据库及其应用系统。数据库设计包含两方面的内容:一是结构设计,也就是设计数据库框架或数据库结构;二是行为设计,即设计基于数据库的各类应用程序、事务等。因此,选项 C 的说法是正确的。数据库系统除了数据库管理软件之外,还必须有其他相关软件的支持。这些软件包括操作系统、编译系统、应用软件开发工具等。对于大型的多用户数据库系统和网络数据库系统,还需要多用户系统软件和网络系统软件的支持。因此,选项 D 的说法是正确的。因此,本题的正确答案是选项 A。12. (分
15、数:2.00)A.B.C. D.解析:解析:采用 int A =3,4,9,8定义数组 A,则 A 中只有 4 个元素,而题干要求的是 7 个元素,A4、A5、A63 个元素就不存在。13. (分数:2.00)A.B. C.D.解析:解析:类的三大特性是:封装、继承、多态。C+中实现信息的封装主要靠类的封装特性来实现。14. (分数:2.00)A.B.C. D.解析:解析:虚函数是在类的声明中使用 virtual 关键字来限定的成员函数,在成员函数实现时不能再使用 virtual 关键字进行限定。派生类中的虚函数必须和基类中的虚函数的形参个数、形参类型、返回值完全一致。虚函数不能用 stati
16、c 关键字进行修饰。15. (分数:2.00)A.B.C.D. 解析:解析:重载后的运算符的优先级和结合性都不会改变,运算符重载进行对原有的运算符进行适当的改造,重载的功能与原有的功能相类似,但是不能改变原运算符的操作对象个数。16. (分数:2.00)A.B. C.D.解析:解析:在引用函数模板时,如果没在函数名和参数之间加上类型参数,就默认表示参数类型严格按照模板定义的类型匹配;如果在函数名和参数之间加上了类型参数,则对实参自动进行类型转换。17. (分数:2.00)A. B.C.D.解析:解析:setfill()对当前输出整行有效,setw(5)设置紧跟其后的输出宽度为 5,当输出宽度不
17、超过 5 时用“”来填充;如果宽度超过 5 则不填充,原样输出所有数据;在没有设置左右对齐时,默认为右对齐,用填充字符填充左边18. (分数:2.00)A. B.C.D.解析:解析:Dowhile( )先执行循环体然后判断条件,所以在 k=5,10,15,20 时将打印$,而while( )先判断条件,然后执行循环体,所以 k=20 到 1,分别打印*。19. (分数:2.00)A.B.C.D. 解析:解析:在 C+中,数组的下标为 0-1,如果定义数组指针,则指针刚开始时是指向数组的头元素20. (分数:2.00)A.B. C.D.解析:解析:对数组定义为普通数组时,要求数组的下标是常表达式
18、,若定义成数组指针则不需要指定数组的大小。21. (分数:2.00)A.B.C. D.解析:解析:C 是传值调用,所以被调函数中形参值改变不会影响到实参,而且没有返回值,所以不会对调用函数产生影响。A 是把引用作为函数参数,D 是把指针作为函数参数,都属于传地址调用,改变形参均会影响参数 x 的值。B 选项有函数返回值。22. (分数:2.00)A.B.C. D.解析:解析:fun( )的第一个参数是传值调用,第二个是传址调用,故在函数中修改形参的值会被传回到实参中,故结果为 0 和 2。23. (分数:2.00)A.B. C.D.解析:解析:构造函数 A 中的形参 a 对静态成员 a 形成了
19、屏蔽,故只有在成员函数 init( )中才将静态成员 a 的值修改为 1,而在其他成员函数中没发生变换,故 obj.a=1。24. (分数:2.00)A.B.C. D.解析:解析:派生类在公有派生和保护派生两种方式下,可以访问基类的保护成员。虚基类也可 以被实例化,虚函数如果在派生类中不被重新定义,则直接被派生类继承。25. (分数:2.00)A.B.C. D.解析:解析:C+规定,以下运算符不能被重载:“”,“*”,“:”,“?:”,“:sizeof”。26. (分数:2.00)A. B.C.D.解析:解析:函数模板定义的一般格式为: Templatetypename 类型参数 返回类型 函
20、数名(模板形参表) 函数体27. (分数:2.00)A.B.C. D.解析:解析:cin 是 istream 输入流类的派生类 istream_withassign 对象。cout 是 ostream 输出流类的派生类 ostream_withassign 对象。28. (分数:2.00)A. B.C.D.解析:解析:test 的构造函数重载,test A3调用 test(int A) 函数,然后删除时调用析构函数,故输出选项 A。29. (分数:2.00)A.B. C.D.解析:解析:只有在创建对象时才会调用类的构造函数,在定义指针时不会调用构造函数,本程序共生成了 3 个同类对象 a,b2
21、。30. (分数:2.00)A.B.C. D.解析:解析:只有在创建对象时才会调用类的构造函数,在定义指针时不会调用构造函数,只有给指针new 一个地址时会调用构造函数,所以本程序中一共生成了 6 个 Point 对象(A,B,C,newPoint3)。number 作为静态数据成员,被同一类的不同对象所共享,故结果为 6。31. (分数:2.00)A. B.C.D.解析:解析:pb 作为基类指针,可以指向派生类对象,但是它只能访问基类的成员函数,而不能访问派生类的成员函数,所以 pb-show( );访问的是基类的 show( )函数,故打印 10,20。32. (分数:2.00)A.B.C
22、. D.解析:解析:派生类的构造函数定义的一般格式为: 派生类名(参数总表):基类名(参数表) 派生类新增数据成员的初始化语句 在生成对象 b 时,就自动给基类构造函数传递实参 10+i,所以 dispa( )打印结果为 12,dispb( )打印结果为 2。33. (分数:2.00)A.B.C. D.解析:解析:类指针可以指向派生类对象,但是只能访问基类的数据成员和成员函数。f( )作为虚函数,在派生类中被重新定义,可以通过基类指针或者引用来访问基类和派生类中的同名函数。34. (分数:2.00)A.B. C.D.解析:解析:Point& operator+( )x+;return*this
23、;是在成员函数运算符重载单目运算符(前缀方式),Point operator+(int)Point old=*this;+(*t11is);return old;定义运算符的成员函数重载+(后缀方式),所以均打印 11、11。35. (分数:2.00)A. B.C.D.解析:解析:本段程序实现从键盘接收一段字符串,并计算字符串的长度,cin 输入流对象会将空白符、回车符、tab 键作为终止标志,所以输入 Ahcdefg abcd 得到的字符串长度为 7。36. (分数:2.00)A.B.C. D.解析:解析:通过调用友元函数,实现求解 n!的算法。sum=5!+4!+3!+2!。二、填空题(总
24、题数:15,分数:30.00)37.填空题(每空)请将每一个空的正确答案写在答题卡上。注意:以命令关键字填空的必须拼写完整。(分数:2.00)_解析:38.在算法的 4 个特性中,算法必须能在执行有限个步骤之后终止指的是算法的 1 特性。(分数:2.00)填空项 1:_ (正确答案:正确答案:有穷性)解析:解析:算法的四个基本特性包括:可靠性、确定性、有穷性和拥有足够的情报,其中,算法的有穷性指的是算法必须在有限的时间内完成,即算法必须在执行有限个步骤之后终止。39.栈中允许进行插入和删除的一端叫做 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:栈顶)解析:解析:栈是限定在表的一
25、端进行插入和删除操作的线性表。在表中,允许插入和删除的一端叫做“栈顶”,不允许插入和删除的一端叫做“栈底”。40.在关系代数运算中, 1 操作会消去关系中的某些列并删去重复的元组。(分数:2.00)填空项 1:_ (正确答案:正确答案:投影)解析:解析:对关系的投影操作是从关系中选择若干属性列组成新的关系。实际上是对关系垂直分割,删去重复的元组。41.Jackson 方法是一种面向 1 的结构化方法。(分数:2.00)填空项 1:_ (正确答案:正确答案:数据结构)解析:解析:Jackson 方法是种结构化分析方法,它是一种面向数据结构的方法。42.在关系模型中,二维表的行称为 1。(分数:2
26、.00)填空项 1:_ (正确答案:正确答案:关系的元组)解析:解析:在关系型数据库中,用二维表来表示关系,二维表的表名即关系名,二维表的行称为关系的元组,二维表的列称为关系的属性。43. (分数:2.00)填空项 1:_ (正确答案:正确答案:j=i)解析:44.已有函数 fun(a,b),为了使函数指针变量 p 指向函数 fun,则使用的赋值语句是 1(分数:2.00)填空项 1:_ (正确答案:正确答案:p=fun)解析:解析:函数入口地址称为函数的指针。可以使用指针变量指向 fun 函数,然后通过该指针变量调用此函数。赋值语句就是将函数 fun 的入口地址赋值给指针变量 p,只需将函数
27、名赋给 p,不能写成“p=fun(a,b)”形式。函数名就代表了函数入口地址,即 p=fun45. (分数:2.00)填空项 1:_ (正确答案:正确答案:xyyx)解析:46. (分数:2.00)填空项 1:_ (正确答案:正确答案:外部变量)解析:解析:在文件 lCPP 中的变量如果也要在文件 2CPP 中访问,那么该变量要声明为外部变量。47. (分数:2.00)填空项 1:_ (正确答案:正确答案:stack-1cp)解析:48. (分数:2.00)填空项 1:_ (正确答案:正确答案:友元函数)解析:解析:此题考查的是非成员函数对类的成员的访问权限,非成员函数只有在声明为类的友元函数
28、才能访问这个类的所有 private 成员,否则是不能访问类的私有成员的。49. (分数:2.00)填空项 1:_ (正确答案:正确答案:成员初始化列表)解析:解析:c+语言规定对基类数据成员的初始化必须在派生类的构造函数中的成员初始化列表中进行。50. (分数:2.00)填空项 1:_ (正确答案:正确答案:ooutBasc:a)解析:解析:此题考查的是基类和派生类的构造函数。派生类构造函数的执行顺序为:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序:然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。此题要求结果是输出 12,分析题目,首先调用基类的构造函数,然后是调用子对象的构造函数,横线处要求输出基类成员 a 的值,填入 coutBase:a 即可。51. (分数:2.00)填空项 1:_ (正确答案:正确答案:*str=NULL)解析: