1、二级 C+笔试-350 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下列程序的运行结果为#includeiostreamhint i=0;class Apublic:A()i+;;void main()Aa,b3,*c;c=b;coutiend1;(分数:2.00)A.2B.3C.4D.52.单个用户使用的数据视图的描述称为(分数:2.00)A.外模式B.概念模式C.内模式D.存储模式3.下列描述正确的是(分数:2.00)A.表示 mn 为 true 或 mn 为 true 的表达式为 mnA(ABm)num=anum+;void pr
2、int()coutnum;void main()Aa(1),b((分数:2.00)A.;void main()Aa,b3,*c;c=b;coutiend1;(分数:2.00)A.2B.3C.4 D.5解析:解析 外部变量 i 实际上记录的是调用构造函数的次数。2.单个用户使用的数据视图的描述称为(分数:2.00)A.外模式 B.概念模式C.内模式D.存储模式解析:解析 选项 A)正确,外模式是用户的数据视图,也就是用户所见到的数据模式;选项 B)不正确,全局数据视图的描述称为概念模式,即数据库中全部数据的整体逻辑结构的描述;选项 C)不正确,物理存储数据视图的描述称为内模式,即数据库在物理存储
3、方面的描述;选项 D)不正确,存储模式即为内模式。3.下列描述正确的是(分数:2.00)A.表示 mn 为 true 或 mn 为 true 的表达式为 mnA(ABm)num=anum+;void print()coutnum;void main()Aa(1),b((分数:2.00)A.;&解析:解析 本题;号查考生对拷贝构造函数的掌握。因为+运算是右结合的,所以在使用 a 对 b 赋值时,b 的 num 变为 l 而 a 的 num 变为 2(先赋值再自加)。12.树是结点的集合,它的根结点数目是(分数:2.00)A.有且只有 1 B.1 或多于 1C.0 或 1D.至少 2解析:解析 树
4、是一个或多个结点组成的有限集合,其中一个特定的结点称为根,其余结点分为若干个不相交的集合。每个集合同时又是一棵树。树有且只有 1 个根结点。13.设 int a=10,b=ll,c=12;,表达式(a+b)c&b=c 的值是(分数:2.00)A.2B.0 C.-2D.1解析:解析 本题考查的是运算符的优先级,应该先计算 a+b 的值为 21,然后与 c 比较大小的值为 0,根据“&”的运算规则,整个表达式的值为 0。14.语句 ofstream f(“SALARYDAT“,iosappiosbinary);的功能是建立流对象 f,试图打开文件SALARYDAT 并与之连接,并且(分数:2.00
5、)A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件 B.若文件存在,将其置为空文件;若文件不存在,打开失败C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件解析:解析 本题考查的是文件流的操作, app 表示追加方式打开文件(即将指针移至文件尾),bi- naw 表示以二进制方式打开文件。15.建立派生类对象时,3 种构造函数分别是 a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这 3 种构造函数的调用顺序为(分数:2.00)A.abc B.acbC.cabD.cba解析:解
6、析 奉题考查的是在继承中派生类的对象调用构造函数的顺序,应该是先调用基类的构造函数,然后是成员中的对象对应类的构造函数,最后是派生类自己的构造函数。16.将 E-R 图转换到关系模式时,实体与联系都可以表示成(分数:2.00)A.属性B.关系 C.键D.域解析:解析 数据库逻辑设计的主要工作是将 ER 图转换成指定 RDBMS 中的关系模式。首先,从 ER图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,ER 图中属性也可以转换成关系的属性。实体集也可以转换成关系。17.SQL 语言又称为(分数:2.00)A.结构化定义语言B.结构化控制语言C.结构化查询语言 D.结构化操纵语言解析
7、:解析 结构化查询语言(Structured Qaery Language,简称 SQL)是集数据定义、数据操纵和数据控制功能于一体的数据库语言。18.不能作为重载函数的调用的依据是(分数:2.00)A.参数个数B.参数类型C.函数类型D.函数名称 解析:解析 所谓重载函数是指同一个函数名可以对应多个函数的实现,编译器会根据参数个数、参数类型和函数返回值类型不同而自动调用相应的函数。19.下列叙述中,不属于软件需求规格说明书的作用的是(分数:2.00)A.便于用户、开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需
8、求分析 解析:解析 软件需求规格说明书(SRS,Software Requirement Specification)是需求分析阶段的最后成果,是软件开发中的重要文档之一。它有以下几个方面的作用:便于用户、开发人员进行理解和交流;反映出用户问题的结构,可以作为软件开发下作的基础和依据;作为确认测试和验收的依据。20.对类的构造函数和析构函数描述正确的是(分数:2.00)A.构造函数可以重载,析构函数不能重载 B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载解析:解析 一个类中只能定义一个析构函数,否则会造成对同一对象的多次删
9、除;而构造函数可以根据不同的参数个数和类型进行多次重载。21.程序设计语言的基本成分是数据成分、运算成分、控制成分和(分数:2.00)A.对象成分B.变量成分C.语句成分D.传输成分 解析:解析 程序设计语言是用于书写计算机程序的语言,其基本成分有以下 4 种,数据成分:用来描述程序中的数据。运算成分:描述程序中所需的运算。控制成分:用来构造程序的逻辑控制结构。传输成分:定义数据传输成分,如输入输出语言。22.下面程序的运行结果是#includeiostreamhvoid main()int num=1;int &ref=num;ref=ref+2;coutnum;num=num+3;cout
10、refend1;(分数:2.00)A.13B.16C.36 D.33解析:解析 本题考查的是考生刘引用的掌握,ref 实际上就是变量 num 的别名,所以 ref=ref+2 时,num 已经变成了 3。23.下面关于 break 语句的描述中,不正确的是(分数:2.00)A.break 可以用于循环体内B.break 语句可以在 for 循环语句中出现多次C.break 语句可以在 switch 语句中出现多次D.break 语句可用于 if 条件判断语句内 解析:解析 本题考查的是 break 语句的使用,break 可以结束 switch 语句和 for 循环语句,但是不能使用在条件判断
11、语句内。24.已知一棵二叉树前序遍历和中序遍历分别为 ABDEGCFH 和 DBGEACHF,则该二叉树的后序遍历为(分数:2.00)A.GEDHFBCAB.DGEBHFCA C.ABCDEFGHD.ACBFEDHG解析:解析 利用前序和中序遍历的方法可以确定二叉树的结构,具体步骤如下:前序遍历的第一个结点 A 为树的根结点;中序遍历中 A 的左边的结点为 A 的左子树,A 右边的结点为 A 的右子树;再分别对 A 的左右子树进行上述两步处理,直到每个结点都找到正确的位置。25.下面关于数组的描述错误的是(分数:2.00)A.在 C+语言中数组的名字就是指向该数组第一个元素的指针B.长度为 n
12、 的数组,下标的范围是 0n-1C.数组的大小必须在编译时确定D.数组只能通过值参数和引用参数两种方式传递给函数 解析:解析 本题考查的是数组的基本使用,数组还可以通过对应的指针调用传递参数,其余选项的说法都是正确的。26.在 C+语言中,数据封装要解决的问题是(分数:2.00)A.数据的规范化B.便于数据转换C.避免数据丢失D.防止不同模块之间数据的非法访问 解析:解析 数据封装为了防止不同模块间数据的非法访问及修改。27.下面关于虚函数的描述,错误的是(分数:2.00)A.在成员函数声明的前面加上 virtual 修饰,就可把该函数声明为虚函数B.基类中说明了虚函数后,派生类中对应的函数也
13、必须说明为虚函数 C.虚函数可以是另一个类的友元函数,但不能是静态成员函数D.基类中说明的纯虚函数在其任何派生类中都必须实现解析:解析 基类中说明的虚函数,在派生类中自然就是虚函数,对于纯虚函数必须在后面继承的派牛类中给出具体的实现;静态成员函数不能进行动态联编,所以虚函数不能是静态的。28.下列程序的输出结果为#includeiostreamhint func(int n)if(n1)return1;else return n+func(n-1);return 0;void main()coutfunc(5)end1;(分数:2.00)A.0B.10C.15D.16 解析:解析 本题考杏的是
14、递归函数的使用,题中递归函数的结束条件为 n1,递推公式为 f(n)=n +f(n-1),所以计算结果为 5+4+3+2+1+1,最后一个 1 为 n=0 时的返回值。29.下列不属于软件工程的 3 个要素的是(分数:2.00)A.工具B.过程C.方法D.环境 解析:解析 软件工程包括 3 个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。30.如果进栈序列为 e1,e2,e3,e4,则可能的出栈序列是(分数:2.00)A.e3,e1,e4,e2B.e2,e4,e3,e1 C.e3,e4,e1,e2D.任意
15、顺序解析:解析 由栈“后进先出”的特点可知:选项 A)中 e1 不可能比 e2 先小,选项 C)中 e3 不可能比 c4先出,且 e1 不可能比 e2 先小,选项 D)中栈是先进后出的,所以不可能是任意顺序。选项 B)中出栈过程如图所示:*31.在设计程序时,应采纳的原则之一是(分数:2.00)A.不限制 go to 语句的使用B.减少或取消注解行C.程序越短越好D.程序结构应有助于读者理解 解析:32.下列语句中不是死循环的是(分数:2.00)A.int i=10; B.for(int i=1;i10;i+)while(1) i-;i-; if(i= =1)break;C.int i=0;D
16、.int i=1;do for(;)1=i+1;i+;while(i=0);解析:解析 选项 A)中 i 自减到 l 时就会执行 break 语句跳出循环,选项 B)中 i10 永远成立不会跳出循环,选项 C)中第一次进入循环体后 i0 永远不会跳出循环,选项 D)中未给出结束循环的条件。33.可以用 p.a 的形式访问派生类对象 p 的基类成员 a,其中 a 是(分数:2.00)A.私有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.公有继承的公有成员 解析:解析 只有公有继承的公有成员才能被派生类的对象直接访问,其他的情况都会因为访问权限问题产生错误。34.下面关于模板的描述
17、,错误的是(分数:2.00)A.函数模板和类模板的参数可以是任意的数据类型 B.类模板不能直接使用,必须先实例化为相应的模板类,然后定义了模板类的对象后才能使用C.函数模板不能直接使用,需要实例化为模板函数后才能使用D.类模板的成员函数都是模板函数解析:解析 类模板不能被重载,而函数模板可以,它们不能被未知的数据类型替换。35.以下各选项组中,均是 C+语言关键字的组是(分数:2.00)A.public operator this B.shod string staticC.it while=D.private cout printf解析:解析 关键字是系统已预定义的单词,在程序中有不同的用途
18、,考生应该熟记。二、填空题(总题数:14,分数:30.00)36.数据结构分为逻辑结构与存储结构,线性链表属于 【1】 。(分数:2.00)填空项 1:_ (正确答案:存储结构)解析:解析 数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构;数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式。在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。37.在面向对象方法中,类之间共享属性和操作的机制称为 【2】 。(分数:2.00)填空项 1:_ (正确答案:继承)解析:解析 类是面向对象语言中必备的程序语言结构,用来实现抽象数据类型。类与类之间的
19、继承关系实现了类之间的共享属性和操作,一个类可以在另一个已定义的类的基础上定义,这样使该类型继承了其超类的属性和方法,当然,也可以定义自己的属性和方法。38.耦合和内聚是评价模块独立性的两个主要标准,其中 【3】 反映了模块内务成分之间的联系。(分数:2.00)填空项 1:_ (正确答案:内聚)解析:解析 内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量,内聚是从功能角度来度量模块内的联系;耦合性是模块间互相连接的紧密程度的度量。39.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于 【4】 的联系。(分数:2.00)填空项 1:_ (正确
20、答案:一对多(或 1:N))解析:解析 两个文体集间的联系实际上是实体集间的函数关系,这种函数关系可以有 3 种,即一对一(1;1)的联系、一对多(1:N)或多对一(N:1)的联系和多对多(M:N)的联系。40.数据库设计分为以下 6 个设计阶段:需求分析阶段、 【5】 、逻计设计阶段、物理设计阶段、实施阶段、运行和维护阶段。(分数:2.00)填空项 1:_ (正确答案:数据库概念没计阶段)解析:解析 数据库设计分为以下 6 个设计阶段:需求分析阶段、概念没计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。41.开发一个 C+语言程序的步骤通常包括编辑、 【6】 、链接、运行
21、和调试。(分数:2.00)填空项 1:_ (正确答案:编译)解析:解析 C+语言是以编译方式实现的高级语言, C+语言程序的实现,必须要使用某种 C+语言的编译器对程序进行编译。42.假设 int a=1,b=2;则表达式 a+-b 的值为 【7】 。(分数:2.00)填空项 1:_ (正确答案:2)解析:解析 因为运算符+和-都是右结合的且优先级高于双目运算符+,所以上式的运算顺序为先a+, -b,再 a+b,最后 a 自加 1。43.下面程序的输出结果为 【8】 。#includeiostreamh)Void main()int num=0,i=8;doi-;num+while(-i);c
22、outnumend1;(分数:2.00)填空项 1:_ (正确答案:4)解析:解析 本题考查的是考生分析简单循环结构的能力。大体过程为第 1 次进入循环,i 变成 7,num变为 1, i 变为 6;第 2 次进入循环,i 变成 5,num 变为 2,i 变为 4;第 3 次进入循环,i 变成 3,num变为 3,i 变为 2:第 4 次进入循环,i 变成 l,num 变为 4,i 变为 0,循环结束。44.通过使用 new 和 delete 两个运算符进行的分配为 【9】 存储分配。(分数:2.00)填空项 1:_ (正确答案:动态)解析:解析 本题考杏的是对动态分配内存的掌握,在 C+语言
23、中,使用关键字 Hew 和 delete 进行动态内存中请和释放。45.下面程序的运行结果为 【10】 。#includeiostreamhvoid fun(intx=0,iot y=0)coutXy;Void main()fun(5);(分数:2.00)填空项 1:_ (正确答案:50)解析:解析 本题考查的是函数的默认参数,如果一个函数中有多个参数,则默认参数应从右至左逐个定义,所以题目中 x 使用参数 5,y 使用默认参数 0。46.在 C+语言中,访问一个对象的成员所用的运算符是 【11】 ,访问一个指针所指向的对象的成员所用的运算符是 【12】 。(分数:4.00)填空项 1:_ (
24、正确答案:11成员选择运算符(或”)12成员访问运算符(或”- ”))解析:解析 本题考查的是使用对象和对象指针访问成员所使用的符号的不同,考生请注意它们的区别。47.C+语言支持的两种多态性分别是编译时的多态性和 【13】 的多态性。(分数:2.00)填空项 1:_ (正确答案:运行时)解析:解析 本题考查的是多态的概念,多态性主要是指发出同样的消息而被不同类型的对象接收时导致完全不同的行为,它一般分为编泽时的多态性和运行时的多态性,比如函数重载和虚函数。48.重载的运算符保持其原有的 【14】 、优先级和结合性不变。(分数:2.00)填空项 1:_ (正确答案:操作符个数)解析:解析 本题考查的是运算符重载的概念,用户重新定义的运算符不改变原运算符的优先性和结合性,也不改变运算符的语法结构也就是说重载运算符不会产生新的运算符。49.cout.put(A);,还可以表示为 【15】 。(分数:2.00)填空项 1:_ (正确答案:coutA;)解析:解析 本题考查的是 C+语言的流输出操作。 coat 是 C+语言定义好的输出流对象,其中包括成员函数 put(char c),具功能是输出 个字符到屏幕,实际上 C+语言中已经重载了操作符“”作为流输出操作符。