1、二级 C+笔试-165 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下面是关于静态成员的说法,其中不正确的是( )。(分数:2.00)A.静态函数没有 this 指针B.同一个类的不同对象拥有相同的静态数据成员C.静态数据成员的初始化必须在类外进行D.静态函数可以访问所有数据成员2.设 A 是一个类的类名,下面函数的参数的引用形式是( )。(分数:2.00)A.function(A &p)B.function(A p)C.function(A *p)D.function(const)3.下面程序输出的结果是( )。#includeios
2、treamusing namespace std;class Aint X;public:A(int x):x(+x)A()coutx;class B:public Aint y;public:B(int y):A(y),y(y)B()couty;void main()B b(3);(分数:2.00)A.34B.43C.33D.444.下面关于数组的初始化正确的是( )。(分数:2.00)A.chara=a,b,cB.chara2=a,b,cC.chara23=a,b,e,d,e,fD.chara=“a“,“b“,“c“5.下列关于重载函数的调用时选择的依据中,错误的是( )。(分数:2.00
3、)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.已知类 A 中有如下一函数说明Void Test(A &(分数:2.00)A.;其中参数 A&a 的含义是( )
4、。A) 参数类型为指向 A 的指针10.线性表是一个具有 n 个( )的有限序列。(分数:2.00)A.表元素B.数据元素C.字符D.数据项11.根据下面的程序,可以在主程序中使用的合法语句是( )。#include iostreamusing namespace std;class Personint age;voidtest()public:Person(intage)this-age=age;void ShowAge()cout“the Persons age is“,age;void main()Person wang(23);(分数:2.00)A.wangage=45B.wangwa
5、ng(45)C.wangShowAge()D.wangtest()12.在 C+中,继承的方式有( )种。(分数:2.00)A.2B.3C.4D.513.下面程序输出的结果是( )。#includeiostreamusing namespace std;int test(int n1,int n2) return n1 +n2;float test (int f1,float f2)return f1-f2;float test(float x,float y)return(x+y)/2;float test(float x,int y)return(x+y)*2;void main()int
6、 a1=10;float a2=2.5f;couttest(a1,a2);(分数:2.00)A.12.5B.7.5C.6.25D.2514.下列特点不是构造函数的特点的是( )。(分数:2.00)A.构造函数的函数名必须与类名相同B.构造函数可以重载C.构造函数必须有返回值D.构造函数在对象创建时,自动执行15.要想在 A 类的基础上公有派生出 B 类,合法的 C+语句是( )。(分数:2.00)A.B:public AB.B:public AC.B:drived AD.public A16.集簇属于( )。(分数:2.00)A.模式B.内模式C.外模式D.概念模式17.下列关于 C+多态性的
7、叙述,正确的是( )。(分数:2.00)A.C+语言的多态性分为编译时的多态性和运行时的多态性B.编译时的多态性可通过虚函数实现C.运行时的多态性可通过函数重载实现D.运行时的多态性可通过操作符重载实现18.对于函数原型 void function(int x,float y,char z=a),合法的函数调用是( )。(分数:2.00)A.function(2,3Of)B.function(2,3,4)C.function(2)D.function()19.下列实现 C 语言语句 printf(“Hello!“)的相同功能的语句是( )。(分数:2.00)A.cout“Hello!“B.ci
8、n“Hello!“C.cout“Hello!“D.cin“Hello!“20.应在下面程序下划线中填写的正确的语句是( )。#include iostreamusing namespace std;class Apublic:void test()cout “this is A!“;class B:public Avoid test()_ /显示调用基类函数 test()cout “this is B!“;void main()(分数:2.00)A.A:test()B.test()C.B:test()D.this-test()21.数据之间的相互关系和数据运算是指( )。(分数:2.00)A.
9、数据B.数据元素C.数据项D.数据结构22.下面的程序输出的结果是( )。#include iostreamusing namespace std;void main()int a=2;int &c=a;a+;coutc;(分数:2.00)A.2B.3C.4D.*a23.C+程序的执行是从( )开始执行的?(分数:2.00)A.main 函数B.程序的第一行C.iostream.hD.stdio.h24.设单链表中结点的结构为(data,link)。已知指针 q 所指结点是指针 p 所指结点的直接前驱,若在*q与*p 之间插入结点*s,则应执行下列哪一个操作?( )。(分数:2.00)A.s
10、-link=p-link;p-link=sB.q-link=s;s-link=pC.p-link=s-link;s-link=pD.p-link=s;s-link=q25.下列关键字不能作为函数返回值类型的是( )。(分数:2.00)A.floatB.intC.doubleD.virtual26.设有 50 行 60 列的二维数组 A5060,其元素长度为 4 字节,按行优先顺序存储,基地址为 200,则元素 A1825的存储地址为( )。(分数:2.00)A.3700B.4376C.3900D.462027.若需要利用形参直接访问实参,则应把形参变量说明为( )参数。(分数:2.00)A.指
11、针B.引用C.传值D.常值28.根据下面的程序,可以在主程序中使用的合法语句是( )。#include iostreamusing namespace std;class Personint age;public:void SetAge(int x)age=x;void ShowAge()cout“the Persons age is“ age;class Student:private Personpublic:int study_code;void main()Student wangqiang;wangqiangstudy_code=23;(分数:2.00)A.wangqiangage=
12、231B.wangqiangSetage(23)C.wangqiangShowAge()D.wangqiangstudy_code=1229.下列关于动态联编的叙述中,错误的是( )。(分数:2.00)A.动态联编的基础是虚函数B.动态联编时在运行时确定所调用的函数代码C.只有通过基类的指针或引用才能实现动态联编D.重载也是动态联编30.以下选项中不属于软件工程的目标是( )。(分数:2.00)A.有效性B.独立性C.可移植性D.可重用性31.类的析构函数的作用是( )。(分数:2.00)A.一般成员函数的初始化B.类的初始化C.对象的初始化D.删除类创建的对象32.要实现多态性,派生类中的虚
13、函数必须( )。(分数:2.00)A.函数名、参数及返回值必须与基类中对应的虚函数完全相同B.参数个数不必与基类中对应的虚函数的函数名完全相同C.参数类型不必与基类中对应的虚函数的函数名完全相同D.返回值类型不必与基类中对应的虚函数的函数名完全相同33.用单链表表示的链式队列的队头在链表的( )位置。(分数:2.00)A.链头B.链尾C.链中D.链表尾部前一个位置34.下面程序输出的结果是( )。#include iostreamusing namespace std;void swap(int &a,int &b)int temp;temp=a;a=b;b=temp;void main()i
14、nt x=2;int y=3;swap(x,y);coutxy;(分数:2.00)A.23B.32C.abD.ba35.如果只想得到 1024 个元素组成的序列中第 5 个最小元素之前的部分排序的序列,用 ( )方法最快。(分数:2.00)A.冒泡排序B.快速排序C.简单选择排序D.堆排序二、填空题(总题数:15,分数:30.00)36.数据结构的存储结构包括顺序、索引、散列和 【1】 四种。(分数:2.00)填空项 1:_37.在顺序存储结构中进行插入和删除操作比在链表中进行插入和 【2】 操作的效率低。(分数:2.00)填空项 1:_38.如果一个对象部分地包含自己,或自己定义自己,则称这
15、个对象是 【3】 的对象。(分数:2.00)填空项 1:_39.一棵树的广义表表示为 a(b(c,d(e,f),g(h),i(j,k(x,y),结点 f 的层数为 【4】 。假定树根结点的层数为 0。(分数:2.00)填空项 1:_40.一棵树按照左子女-右兄弟表示法转换成对应的二叉树,则该二叉树中树根结点肯定没有 【5】 子女。(分数:2.00)填空项 1:_41.C+中类作用域符是 【6】 。(分数:2.00)填空项 1:_42.在函数原型声明中,可以省略参数名,但必须声明函数参数的 【7】 。(分数:2.00)填空项 1:_43.在类中声明的静态浮点数的默认初始化值是 【8】 。(分数:
16、2.00)填空项 1:_44.定义一个函数时,若只允许函数体访问形参的值而不允许修改它的值,则应把该形参声明为 【9】 类型。(分数:2.00)填空项 1:_45.在 C+中,给一变量取别名,可以通过 【10】 方式。(分数:2.00)填空项 1:_46.面向对象的基本特点包括继承性、封装性和 【11】 。(分数:2.00)填空项 1:_47.C+源程序中,只有 【12】 个主函数。(分数:2.00)填空项 1:_48.虚基类是含有 【13】 函数的类。(分数:2.00)填空项 1:_49.下面程序执行的结果是 【14】 #includeiostreamusing namespace std;
17、class Apublic:static int x;A(inty)coutx+y;int A:x=2;void main()A a(5);(分数:2.00)填空项 1:_50.下面程序执行的结果是 【15】 。#include iostreamusing namespace std;void main()int sum=0;int array6=1,2,3,4,5,6;int *p;p=&array0;for(int i=0;i6;i+)sum=sum+*p;p+;coutsum;(分数:2.00)填空项 1:_二级 C+笔试-165 答案解析(总分:100.00,做题时间:90 分钟)一、
18、选择题(总题数:35,分数:70.00)1.下面是关于静态成员的说法,其中不正确的是( )。(分数:2.00)A.静态函数没有 this 指针B.同一个类的不同对象拥有相同的静态数据成员C.静态数据成员的初始化必须在类外进行D.静态函数可以访问所有数据成员 解析:解析 只有静态函数才能访问静态成员。2.设 A 是一个类的类名,下面函数的参数的引用形式是( )。(分数:2.00)A.function(A &p) B.function(A p)C.function(A *p)D.function(const)解析:解析 重载的语法。3.下面程序输出的结果是( )。#includeiostreamu
19、sing namespace std;class Aint X;public:A(int x):x(+x)A()coutx;class B:public Aint y;public:B(int y):A(y),y(y)B()couty;void main()B b(3);(分数:2.00)A.34 B.43C.33D.44解析:解析 对象创建的次序为:先基类,后派生类;析构时,先派生类,后基类。4.下面关于数组的初始化正确的是( )。(分数:2.00)A.chara=a,b,cB.chara2=a,b,cC.chara23=a,b,e,d,e,fD.chara=“a“,“b“,“c“ 解析:解
20、析 “ “是字符串符号,而不是字符符号。5.下列关于重载函数的调用时选择的依据中,错误的是( )。(分数:2.00)A.根据函数参数个数不同B.根据函数参数类型不同C.根据函数名字不同 D.根据函数的返回值不同解析:解析 函数的重载要求函数名相同。6.以下不是数据库系统组成部分的是( )。(分数:2.00)A.数据库B.操作系统管理员 C.数据库管理系统D.用户解析:解析 数据库管理系统(Database Management System,DBMS)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,包括硬件系统、数据库集合、数据库管理系统及
21、相关软件、数据库管理员和用户。7.不能重载的运算符是( )。(分数:2.00)A.+B./C.* D.-解析:解析 在 C+中,不能重载的运算符有 6 个,它们是“”,“*”,“-”,“:”,“sizeof”和三目运算符“?:”。8.下列关于虚函数的描述,错误的是( )。(分数:2.00)A.构造函数可以是虚函数 B.析构函数可以是虚函数C.虚函数必须通过引用或基类的指针实现D.虚函数的函数名必须与基类中对应的虚函数的函数名完全相同解析:解析 构造函数不能是虚函数。9.已知类 A 中有如下一函数说明Void Test(A &(分数:2.00)A.;其中参数 A&a 的含义是( )。A) 参数类
22、型为指向 A 的指针解析:解析 参见引用的语法。10.线性表是一个具有 n 个( )的有限序列。(分数:2.00)A.表元素B.数据元素 C.字符D.数据项解析:解析 线性表是一个具有 n 个数据元素的有限序列。11.根据下面的程序,可以在主程序中使用的合法语句是( )。#include iostreamusing namespace std;class Personint age;voidtest()public:Person(intage)this-age=age;void ShowAge()cout“the Persons age is“,age;void main()Person wa
23、ng(23);(分数:2.00)A.wangage=45B.wangwang(45)C.wangShowAge() D.wangtest()解析:解析 ShowAse 是类的公有成员,可以由对象访问,其他的为私有成员,类对象不能访问。12.在 C+中,继承的方式有( )种。(分数:2.00)A.2B.3 C.4D.5解析:解析 类继承方式有三种,它们分别是公有、私有和保护。13.下面程序输出的结果是( )。#includeiostreamusing namespace std;int test(int n1,int n2) return n1 +n2;float test (int f1,fl
24、oat f2)return f1-f2;float test(float x,float y)return(x+y)/2;float test(float x,int y)return(x+y)*2;void main()int a1=10;float a2=2.5f;couttest(a1,a2);(分数:2.00)A.12.5B.7.5 C.6.25D.25解析:解析 此处为函数的重载,第一个参数为 int,第二个参数为 float,故执行第二个函数。14.下列特点不是构造函数的特点的是( )。(分数:2.00)A.构造函数的函数名必须与类名相同B.构造函数可以重载C.构造函数必须有返回值
25、 D.构造函数在对象创建时,自动执行解析:解析 构造函数不能有返回值。15.要想在 A 类的基础上公有派生出 B 类,合法的 C+语句是( )。(分数:2.00)A.B:public A B.B:public AC.B:drived AD.public A解析:解析 C+派生格式。16.集簇属于( )。(分数:2.00)A.模式B.内模式 C.外模式D.概念模式解析:解析 内模式(Internal Schema)又称物理模式(Physical Schema),它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及 hash 等存取方式与存取路径。17.下列关于 C+多态性
26、的叙述,正确的是( )。(分数:2.00)A.C+语言的多态性分为编译时的多态性和运行时的多态性B.编译时的多态性可通过虚函数实现C.运行时的多态性可通过函数重载实现 D.运行时的多态性可通过操作符重载实现解析:解析 运行时的多态性可通过函数重载实现。18.对于函数原型 void function(int x,float y,char z=a),合法的函数调用是( )。(分数:2.00)A.function(2,3Of) B.function(2,3,4)C.function(2)D.function()解析:解析 由于只有第三个参数有默认值,故要求给出前两个参数的值。19.下列实现 C 语言
27、语句 printf(“Hello!“)的相同功能的语句是( )。(分数:2.00)A.cout“Hello!“B.cin“Hello!“C.cout“Hello!“ D.cin“Hello!“解析:解析 C+输出语句语法。20.应在下面程序下划线中填写的正确的语句是( )。#include iostreamusing namespace std;class Apublic:void test()cout “this is A!“;class B:public Avoid test()_ /显示调用基类函数 test()cout “this is B!“;void main()(分数:2.00)
28、A.A:test() B.test()C.B:test()D.this-test()解析:解析 A:表示 A 的作用域。21.数据之间的相互关系和数据运算是指( )。(分数:2.00)A.数据B.数据元素C.数据项D.数据结构 解析:解析 数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。故正确答案为选项 D。22.下面的程序输出的结果是( )。#include iostreamusing namespace std;void main()int a=2;int &c=a;a+;coutc;(分数:2
29、.00)A.2B.3 C.4D.*a解析:解析 c 是 a 的引用,故 a+相当于 c+。23.C+程序的执行是从( )开始执行的?(分数:2.00)A.main 函数 B.程序的第一行C.iostream.hD.stdio.h解析:解析 从主函数开始执行。24.设单链表中结点的结构为(data,link)。已知指针 q 所指结点是指针 p 所指结点的直接前驱,若在*q与*p 之间插入结点*s,则应执行下列哪一个操作?( )。(分数:2.00)A.s -link=p-link;p-link=sB.q-link=s;s-link=p C.p-link=s-link;s-link=pD.p-lin
30、k=s;s-link=q解析:解析 由于指针 q 所指结点是指针 p 所指结点的直接前驱,若在*q 与*p 之间插入结点*s,首先将q 指向 s,再将 s 指向 p,即插入了结点 s。25.下列关键字不能作为函数返回值类型的是( )。(分数:2.00)A.floatB.intC.doubleD.virtual 解析:解析 virtual 是虚函数的标志,而不是返回值的标志。26.设有 50 行 60 列的二维数组 A5060,其元素长度为 4 字节,按行优先顺序存储,基地址为 200,则元素 A1825的存储地址为( )。(分数:2.00)A.3700B.4376C.3900D.4620 解析
31、:解析 200+(1860+25)44620。27.若需要利用形参直接访问实参,则应把形参变量说明为( )参数。(分数:2.00)A.指针B.引用 C.传值D.常值解析:解析 在进行参数传递时,引用参数是利用形参直接访问实参,形参的变化直接影响实参的变化,而传值参数不会影响实参变量。28.根据下面的程序,可以在主程序中使用的合法语句是( )。#include iostreamusing namespace std;class Personint age;public:void SetAge(int x)age=x;void ShowAge()cout“the Persons age is“ a
32、ge;class Student:private Personpublic:int study_code;void main()Student wangqiang;wangqiangstudy_code=23;(分数:2.00)A.wangqiangage=231B.wangqiangSetage(23)C.wangqiangShowAge()D.wangqiangstudy_code=12 解析:解析 由于是私有继承,基类中所有成员成为派生类中的私有成员,故不能由派生类的对象访问,只有派生类的公有成员可由派生类对象访问。29.下列关于动态联编的叙述中,错误的是( )。(分数:2.00)A.动
33、态联编的基础是虚函数B.动态联编时在运行时确定所调用的函数代码C.只有通过基类的指针或引用才能实现动态联编D.重载也是动态联编 解析:解析 重载是静态联编。30.以下选项中不属于软件工程的目标是( )。(分数:2.00)A.有效性B.独立性 C.可移植性D.可重用性解析:解析 软件工程的目标是,在给定的成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。基于这一目标,软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。31.类的析构函数的作用是( )。(分数:2.00)A.一般成员函数的初始
34、化B.类的初始化C.对象的初始化 D.删除类创建的对象解析:解析 构造函数的目的是对象初始化。32.要实现多态性,派生类中的虚函数必须( )。(分数:2.00)A.函数名、参数及返回值必须与基类中对应的虚函数完全相同 B.参数个数不必与基类中对应的虚函数的函数名完全相同C.参数类型不必与基类中对应的虚函数的函数名完全相同D.返回值类型不必与基类中对应的虚函数的函数名完全相同解析:解析 函数名、参数及返回值必须与基类中对应的虚函数完全相同。33.用单链表表示的链式队列的队头在链表的( )位置。(分数:2.00)A.链头 B.链尾C.链中D.链表尾部前一个位置解析:解析 用单链表表示的链式队列的队
35、头在链表的链头位置。34.下面程序输出的结果是( )。#include iostreamusing namespace std;void swap(int &a,int &b)int temp;temp=a;a=b;b=temp;void main()int x=2;int y=3;swap(x,y);coutxy;(分数:2.00)A.23B.32 C.abD.ba解析:解析 函数的参数是引用,故能实现引用调用。35.如果只想得到 1024 个元素组成的序列中第 5 个最小元素之前的部分排序的序列,用 ( )方法最快。(分数:2.00)A.冒泡排序B.快速排序C.简单选择排序D.堆排序 解析
36、:解析 从平均时间性能而言,快速排序最佳,其所需时间最少,但快速排序在最坏情况下的时间性能不如堆排序和归并排序。当序列中的记录基本有序或元素个数较少时,冒泡排序和简单选择排序为最佳排序方法,故本题答案应该为选项 D。二、填空题(总题数:15,分数:30.00)36.数据结构的存储结构包括顺序、索引、散列和 【1】 四种。(分数:2.00)填空项 1:_ (正确答案:链接)解析:解析 数据结构的存储结构包括顺序、链接、索引和散列四种。37.在顺序存储结构中进行插入和删除操作比在链表中进行插入和 【2】 操作的效率低。(分数:2.00)填空项 1:_ (正确答案:删除)解析:解析 在链表中进行插入
37、和删除操作的效率比在顺序存储结构中进行相同操作的效率高。只需要改变指针指向即可。38.如果一个对象部分地包含自己,或自己定义自己,则称这个对象是 【3】 的对象。(分数:2.00)填空项 1:_ (正确答案:递归)解析:解析 如果一个对象部分地包含自己,或自己定义自己,则称这个对象是递归的对象。39.一棵树的广义表表示为 a(b(c,d(e,f),g(h),i(j,k(x,y),结点 f 的层数为 【4】 。假定树根结点的层数为 0。(分数:2.00)填空项 1:_ (正确答案:3 a(b(c,d(e,f), g(h), i(j,k(x,y))解析:解析 转换后 a 为第 0 层;b,i 为第
38、 1 层;c,d,g,j,k 为第 2 层;e,f,h,x,y 为第 3 层。40.一棵树按照左子女-右兄弟表示法转换成对应的二叉树,则该二叉树中树根结点肯定没有 【5】 子女。(分数:2.00)填空项 1:_ (正确答案:右)解析:解析 对于根结点没有兄弟,所以没有右子女。41.C+中类作用域符是 【6】 。(分数:2.00)填空项 1:_ (正确答案:)解析:解析 类作用域符:。42.在函数原型声明中,可以省略参数名,但必须声明函数参数的 【7】 。(分数:2.00)填空项 1:_ (正确答案:类型)解析:解析 不能省略参数的类型。43.在类中声明的静态浮点数的默认初始化值是 【8】 。(
39、分数:2.00)填空项 1:_ (正确答案:O)解析:解析 静态变量由系统自动初始化为 0。44.定义一个函数时,若只允许函数体访问形参的值而不允许修改它的值,则应把该形参声明为 【9】 类型。(分数:2.00)填空项 1:_ (正确答案:const)解析:解析 用 const 修饰的参数为常类型参数。45.在 C+中,给一变量取别名,可以通过 【10】 方式。(分数:2.00)填空项 1:_ (正确答案:引用)解析:解析 引用是给对对象的别名,对引用的操作就是对被引用对象的操作。46.面向对象的基本特点包括继承性、封装性和 【11】 。(分数:2.00)填空项 1:_ (正确答案:多态性)解
40、析:解析 继承性、封装性及多态性是面向对象的基本特点。47.C+源程序中,只有 【12】 个主函数。(分数:2.00)填空项 1:_ (正确答案:1)解析:解析 C+源程序中,只有 1 个主函数。48.虚基类是含有 【13】 函数的类。(分数:2.00)填空项 1:_ (正确答案:虚)解析:解析 虚基类是含有虚函数的类。49.下面程序执行的结果是 【14】 #includeiostreamusing namespace std;class Apublic:static int x;A(inty)coutx+y;int A:x=2;void main()A a(5);(分数:2.00)填空项 1
41、:_ (正确答案:7)解析:解析 程序的静态变量初始化为 2,而构造函数招待过程中 y 变量为初始化为 5,故程序执行的结果为 7。50.下面程序执行的结果是 【15】 。#include iostreamusing namespace std;void main()int sum=0;int array6=1,2,3,4,5,6;int *p;p=&array0;for(int i=0;i6;i+)sum=sum+*p;p+;coutsum;(分数:2.00)填空项 1:_ (正确答案:21)解析:解析 本题用数组地址来访问数组内容,通过数组指针来操作数组内容,依次取出数组内容进行加和,然后进行输出。