1、二级 C+笔试-340 及答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.数据处理的最小单位是( )。(分数:2.00)A.数据B.数据元素C.数据项D.数据结构2.有如下程序: #includeiostream) using namespace std; classBase public: Base(int x0)coutx; ; Class Derived:public Base public: Derived(int x0)coutx; private: Base Val; ; int main() Derived d(1); re
2、turn 0; (分数:2.00)A.100B.000C.010D.0013.下列选项中不属于结构化程序设计方法的是( )。(分数:2.00)A.自顶向下B.逐步求精C.模块化D.可复用4.有如下 4 个语句: coutAsetfill(*)1eftsetw(7)Bendl; coutsetrill(*)(1eftsetw(7)ABendl; coutAserfill(*)rightsetw(7)Bendl; coutsetfill(x)rightsetw(7)ABendl;(分数:2.00)A.和B.和C.和D.和 其中能显示 A* * * * * *B 的是( )。5.对下列二叉树 (分数
3、:2.00)A.ACBDFEGB.ACBDFGEC.ABDCGEFD.FCADBEG6.派生类的成员函数不能访问基类的( )。(分数:2.00)A.公有成员和保护成员B.公有成员C.私有成员D.保护成员7.下列各组类型声明符中,含义相同的一组是( )。(分数:2.00)A.unsigned longint 和 longB.signed short 和 shortC.unsigned short 和 shortD.shortint 和 int8.下面程序的输出结果是( )。 #includeiostream.h #includestring.h void main() char p110,p21
4、0; strcpy(p1,”abc”); strcpy(p2,”ABC”); charsty50=“xyz”; strcpy(str+2,strcat(p1,p2); coutstr; (分数:2.00)A.xyzabcABCB.zabcABCC.xyabcABCD.yzabcABC9.SQL 语言又称为( )。(分数:2.00)A.结构化定义语言B.结构化控制语言C.结构化查询语言D.结构化操纵语言10.下列叙述中,不属于软件需求规格说明书的作用的是( )。(分数:2.00)A.便于用户、开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的
5、依据D.便于开发人员进行需求分析11.有以下程序: #includeiostream using namespace std; Class sample private: int n; public: sample() sample(int m) n=m; sample add(sample s1,samplc s2) this-n=s1.n+s2.n; return(*this); void disp() cout“n”nendl; ; int main() sample s1(10),s2(5),s3; s3.add(s1,s2); s3.disp(); return 0; 程序运行后,输
6、出的结果是( )。(分数:2.00)A.n10B.n5C.n20D.n=1512.有如下程序: #includeiostream using namespace std; class MyClass public: MyClass()+count; MyClass()-count; static int getCount()return count; private: static int count; ; int MyClass:count=0; int main() MyClass obj; Coutobi.getCount(); MyClass*ptrnew MyClass; cout(
7、MyClass:getCount(); delete ptr; coutMyClass:getCount(); return 0; 程序的输出结果是( )。(分数:2.00)A.121B.232C.221D.12213.定义如下枚举类型:enumMonday,Tuesday,Wednesday,Thrusday,Friday2;则下列语句正确的是( )。(分数:2.00)A.表达式 WednesdayFriday 的值是 trueB.Day day;day3;C.Day day;dayMonday+3;D.Day day;dayTuesday+10;14.以下叙述中正确的是( )。(分数:2.
8、00)A.构成 C+语言程序的基本单位是类B.可以在一个函数中定义另一个函数C.main()函数必须放在其他函数之前D.所有被调用的函数一定要在调用之前进行定义15.有如下程序: #includeiostream using namespace std; class VAC public; intf()constreturn 3; int f()return 5; ; Int main() VAC v1; const VAC v2; coutv1.f()v2.f(); return 0; 运行时的输出结果是( )。(分数:2.00)A.53B.35C.55D.3316.有如下程序: #incl
9、udeiostream using namespace std; class B public: Virtual void show()cout“B”; ; class D:publicB public: void show()cout“D”; ; void funl(B*ptr)ptr-show(); voidun2(BB.next= T2; public; dataClass(T1 aT2 b)ia;j=b; void show()couti“,”jn; ; int main() dataClassint,doubleobl10,0.23; dataClass(char,char*)ob2
10、(X,”my data”); ob1.show(); ob2.show(); return 0; 请将程序补充完整,使程序在运行时输出: 10,0.23 X,my data(分数:2.00)填空项 1:_47.有如下程序: #includeiostream using namespace std; class A public: A()cout“A”; A()cout“A”;) ; class B A a; public, B()cout“B”; B()cout“B”; ; int main() B b; return 0; 程序的输出结果是_。(分数:2.00)填空项 1:_48.请将下列栈
11、类 Stack 补充完整。 class Stack private: intpList100/int 数组,用于存放栈的元素 inttop;/栈顶元素(数组下标) public: Stack();top(0) void Push(const int class A public:A()coutA; ; class B:_ public:B()coutB;) ; class C:_ public:C()coutC; ; class D:public B,public C public:D()coutD; ; void main()D obj;(分数:2.00)填空项 1:_二级 C+笔试-340
12、 答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.数据处理的最小单位是( )。(分数:2.00)A.数据B.数据元素C.数据项 D.数据结构解析:解析 数据处理的最小单位是数据项。2.有如下程序: #includeiostream) using namespace std; classBase public: Base(int x0)coutx; ; Class Derived:public Base public: Derived(int x0)coutx; private: Base Val; ; int main() Derived
13、 d(1); return 0; (分数:2.00)A.100B.000C.010D.001 解析:解析 本题考查的知识点是:类的构造。建立一个类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下):执行自身的构造函数。本题 Derived 类继承于 Base 类,所以首先会构造基类 Base,但 Derived 类的构造函数没有初始化列表,所以将调用 Base 类的默认构造函数,输出一个 0。接下来由于它的成员中还定义了一个 Base 类的对象,而构造函数也没有显
14、示初始化这个对象,所以再次调用 Base 类的默认构造函数输出、一个 0。最后构造自身,因为主函数中传入了构造参数 1,所以构造自身时输出了一个 1。故最终输出结果为 001。3.下列选项中不属于结构化程序设计方法的是( )。(分数:2.00)A.自顶向下B.逐步求精C.模块化D.可复用 解析:解析 可复用属于面向对象程序设计方法,其它选项属于结构化程序设计方法。4.有如下 4 个语句: coutAsetfill(*)1eftsetw(7)Bendl; coutsetrill(*)(1eftsetw(7)ABendl; coutAserfill(*)rightsetw(7)Bendl; cou
15、tsetfill(x)rightsetw(7)ABendl;(分数:2.00)A.和B.和C.和 D.和 其中能显示 A* * * * * *B 的是( )。解析:解析 本题考查 C+流的使用。setfill()作用是设置填充字符;left 是使输出数据在指定宽度内左对齐;right 是使输出数据在指定宽度内右对齐。5.对下列二叉树 (分数:2.00)A.ACBDFEG B.ACBDFGEC.ABDCGEFD.FCADBEG解析:解析 二叉树的遍历有 3 种:前序、中序和后序。中序遍历首先遍历左于树或左子结点,然后访问根结点,最后遁历右子树或右子结点。分析本题二又树,对其进行中序遍历,结果为
16、ACBDFEG。6.派生类的成员函数不能访问基类的( )。(分数:2.00)A.公有成员和保护成员B.公有成员C.私有成员 D.保护成员解析:解析 基类的私有成员在派生类中都是不可见的,如果一个派生类要访问基类中声明的私有成员,可以将这个派生类声明为友元。7.下列各组类型声明符中,含义相同的一组是( )。(分数:2.00)A.unsigned longint 和 longB.signed short 和 short C.unsigned short 和 shortD.shortint 和 int解析:解析 本题考查的知识点是:基本类型的派生类型。派生类型声明符是由基本类型关键字char、int
17、、float、double 前面加上类型修饰符组成的。类型修饰符包括:short 短类型,缩短字长;long 长类型,加长字长;signed 有符号类型,取值范围包括正负值 unsigned 无符号类型,取值范围只包括正值。其中 signed 和 unsigned 只能同时出现一个,如果省略则默认为 signed。short 和 long 也只能同时出现一个,如果修饰的类型是 int,则可以省略 int。unsigned long int 的省略形式为 unsigned long;选项 B 中,signed short int 的省略形式就是 short,正确 ounsigned short
18、int 的省略形式是unsigned short;short int 的省略形式是 short。故本题应该选择 B。8.下面程序的输出结果是( )。 #includeiostream.h #includestring.h void main() char p110,p210; strcpy(p1,”abc”); strcpy(p2,”ABC”); charsty50=“xyz”; strcpy(str+2,strcat(p1,p2); coutstr; (分数:2.00)A.xyzabcABCB.zabcABCC.xyabcABC D.yzabcABC解析:解析 该函数的调用方式是 strcp
19、y(字符数组,字符串)其中”字符串”可以是串常量,也可以是字符数组。函数的功能是将”字符串”完整地复制到”字符数组”中,字符数纽中原有内容被覆盖。使用该函数时注意:字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志,/0一起复制。不能用赋值运算符”将一个字符串直接赋值给一个字符数组,只能用 strcpy()函数来处理。strcat(字符数组,字符串)功能是把”字符串”连接到”字符数组”中的宇符串尾端,并存储于”字符数组”中。”字符数组”中原来的结束标志,被”字符串”的第一个字符覆盖,而”字符串”在操作中未被修改。使用该函数时注意:由于没有边界检查,编程者要注意保证”字符数
20、组”定义得足够大,以便容纳连接后、的目标字符串;否则,会因长度不够而产生问题。连接前两个字符串都有结束标志/0,连接后”字符数组”中存储的字符串的结束标志,/0被舍弃,只在目标串的最后保留一个/0。9.SQL 语言又称为( )。(分数:2.00)A.结构化定义语言B.结构化控制语言C.结构化查询语言 D.结构化操纵语言解析:10.下列叙述中,不属于软件需求规格说明书的作用的是( )。(分数:2.00)A.便于用户、开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需求分析 解析:解析 软件需求规格说明书便于用户、开发
21、人员进行理解和交流,反映出用户问题的结构,可以作为软件开发三作的基础和依据,而且可以作为确认测试和验收的依据。它是需求分析的结果,而不是为了便于卉发人员进行需求分析。因此正确答累是选项 D。11.有以下程序: #includeiostream using namespace std; Class sample private: int n; public: sample() sample(int m) n=m; sample add(sample s1,samplc s2) this-n=s1.n+s2.n; return(*this); void disp() cout“n”nendl; ;
22、 int main() sample s1(10),s2(5),s3; s3.add(s1,s2); s3.disp(); return 0; 程序运行后,输出的结果是( )。(分数:2.00)A.n10B.n5C.n20D.n=15 解析:解析 本题考查 this 指针的使用类成员函数 add 中通过 this 指针实现私有数据成员 n 的赋值。12.有如下程序: #includeiostream using namespace std; class MyClass public: MyClass()+count; MyClass()-count; static int getCount()
23、return count; private: static int count; ; int MyClass:count=0; int main() MyClass obj; Coutobi.getCount(); MyClass*ptrnew MyClass; cout(MyClass:getCount(); delete ptr; coutMyClass:getCount(); return 0; 程序的输出结果是( )。(分数:2.00)A.121 B.232C.221D.122解析:解析 本题考查的知识点是静态成员。类中的静态成员是解决同:个类的不同对象之间的数据和函数共享问题的。静态
24、成员被所有属于这个类的对象共享。这种共享与全局变量或全局函数相比,既没有破坏数据隐藏的厚则,又保证了安全性。题目中,首先定义了一个 obj 对象,其构造函数使 MyClass 的静态数据成员 count 增 1,所以第一条输出语句输出的结果是 1。然后通过指针动态创建了一个 MyClass 类的对象,构造函数再次被调用,count 变为 2,所以第 2 次输出结果是 2。接下来是用 dilete 删除了刚才动态创建的 MyClass 对象。析构函数被调用,count 减 1 变为 1,笫 3 次输出 1。故本题的输出为 121。13.定义如下枚举类型:enumMonday,Tuesday,We
25、dnesday,Thrusday,Friday2;则下列语句正确的是( )。(分数:2.00)A.表达式 WednesdayFriday 的值是 true B.Day day;day3;C.Day day;dayMonday+3;D.Day day;dayTuesday+10;解析:解析 枚举类型定义了一些整型符号常量的集合,使用枚举类型时应该注意以下几点:枚举类型的第一个常量默认值是 0,枚举类型常量的值允许彼此相同;虽然枚举类型常量是整数类型,但是不允许使用整数直接赋值给枚举类型变量,也不允许与整数进行运算,只可以与整数进行比较。14.以下叙述中正确的是( )。(分数:2.00)A.构成
26、C+语言程序的基本单位是类 B.可以在一个函数中定义另一个函数C.main()函数必须放在其他函数之前D.所有被调用的函数一定要在调用之前进行定义解析:解析 关于 C+语言,我们应该了解以下必须要掌握的基础知识:C+程序是由类构成的。一个函数由两部分组成:函数的首部和函数体。一个类由两部分组成:类成员变量和类成员函数。一个C+程序总是从 main 函数开始执行的,而不论 main 函数在整个程序中的位置如何(main 函数可以放在程序最前头,也可以放在程序最后,或写在一些函数之前,在另一些函数之后)。C+程序在书写上,表现形式比较自由,一行内可以写几个语句,一个语句可以分写在几行上。每个语句和
27、数据定义的最后必须有一个分号。可以用/*/和/对 C+语言的程序的任何部分作注释。15.有如下程序: #includeiostream using namespace std; class VAC public; intf()constreturn 3; int f()return 5; ; Int main() VAC v1; const VAC v2; coutv1.f()v2.f(); return 0; 运行时的输出结果是( )。(分数:2.00)A.53 B.35C.55D.33解析:解析 本题考查的是常成员函数的应用。VAC 类中说明了两个函数,一个是常成员函数,一个是普通函数;在
28、主函数中说明了两个对象,通过普通对象 v1 调用的是普通函数,输出 5;通过常对象 V2 调用的是常成员函数,输出 3。16.有如下程序: #includeiostream using namespace std; class B public: Virtual void show()cout“B”; ; class D:publicB public: void show()cout“D”; ; void funl(B*ptr)ptr-show(); voidun2(BB.next=在选项 D 中,用*运算符取出结构体变量,并且保存的就是 b 的地址,所以正确。34.下列叙述中,不属于测试的特
29、征的是( )。(分数:2.00)A.测试的挑剔性B.完全测试的不可能性C.测试的可靠性 D.测试的经济性解析:解析 软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。软件测试有 3 个重要特征:测试的挑剔性、完全测试的不可能性及测试的经济性。没有测试的可靠性这一说法。35.下列关于模板的说法正确的是( )。(分数:2.00)A.模板的实参在任何时候都可以省略B.类模板与模板类所指的是同一概念C.类模板的参数必须是虚拟类型的D.类模板中的成员函数全部都是模板函数 解析:解析 在 C+中规定如果一个类被声明为类模板,那么其中的所有成员函数就都成为了模板函数。二、
30、B填空题/B(总题数:14,分数:28.00)36.数据管理技术发展过程经过人工管理、文件系统和数据库系统 3 个阶段,其中数据独立性最高的是 1阶段。(分数:2.00)填空项 1:_ (正确答案:数据库系统。)解析:解析 相对于文件系统人工管理和数据项管理,数据库系统的数据独立性大大增加。37.在关系模型中,把数据看成是二维表,每一个二维表称为一个 1。(分数:2.00)填空项 1:_ (正确答案:关系。)解析:解析 在关系模型中,数据被看成二维表,每二个二维表称为一个关系。38.软件结构是以 1 为基础而组成的一种控制层次结构。(分数:2.00)填空项 1:_ (正确答案:模块。)解析:解
31、析 采用模块化原理可以使软件结构清晰,不仅容易设计,也容易阅读和理解。模块化使得软件容易测试和调试,因而有利于提高软件的可靠性,也有利于软件的组织管理。大型程序可由不同的程序员编写不同的模块,还可以进一步分配技术熟练的程序员编写较难的部分。39.数据字典是各类数据描述的集合,它通常包括 5 个部分,即数据项、数据结构、数据流; 1 和处理过程。(分数:2.00)填空项 1:_ (正确答案:数据存储。)解析:解析 数据字典是各类数据描述的集合,它通常包括 5 个部分,即数据项:数据的最小单位;数据结构:若干数据项有意义的集合;数据流:可以是数据项,也可以是数据结构,表示某一处理过程的输入或输出,
32、数据存储:处理过程中存取的数据,通常是手工凭证、手工文档或计算机文件,处理过程。40.在岂个容量为 25 的循环队列中,若头指针 front=9,尾指针 Year16,则该循环队列中共有 1 个元素。(分数:2.00)填空项 1:_ (正确答案:7。)解析:解析 设循环队列的容量为 n。如果 rearfront,则循环队列中的元素个数为 rear-front;如果 rearfront,则循环队列中的元素个数为 n+(rear-front)。本题中,front=9,rear16,即rearfront,因此,循环队列中的元素个数为 rear-front=16-9=7。41.如果使用数组名称为函数参
33、数,形实结合时,传递的是 1。(分数:2.00)填空项 1:_ (正确答案:地址。)解析:解析 本题考查的是函数参数的传递方式。函数参数的传递方式分为传值和传地址两种。使用数组名作为函数参数,因为数组名代表的是数组的首地址,所以传递的是地址。42.如果要把返回值为 void 的函数 A 声明为类 B 的友元函数,则应在类 B 的定义中加入的语句是 1。(分数:2.00)填空项 1:_ (正确答案:friendvoidA-|_|-;。)解析:解析 C+中类的友元函数在声明时应在该函数前面加上关键字 friend,同样如果要声明一个类为另一个类的友元类也要在前面类名前加上 friend。43.与成
34、员访问表达式 p-name 等价的表达式是 1。(分数:2.00)填空项 1:_ (正确答案:(*p).name。)解析:解析 一个基类型为类类型的指针称为对象指针。对于指向对象的指针,下面两种表示方式是等价的:对象指针名-成员名;(*对象指针名),成员名。44.已知有函数 f 的定义如下: int f() static int s0; s+=2; return s; 则在某程序中第 2次执行函数调用语句“f();”时,函数 f 的返回值是_。(分数:2.00)填空项 1:_ (正确答案:4。)解析:解析 本题考查的是内部静态变量。当函数执行完返回调用点,该变量并不檄消,其值将继续保留,下次进
35、入该函数时,其值仍然存在。45.如下程序声明了一个电话号码类 PhoneNumber,重载了流插入运算符,以便于电话号码的输出。请将程序补充完整。 #includeiostream #includeiomanip #includestring using namespace std; class PhoneMunber public: void setNumber(string number)this-numbernumber; /重载流插入操作符 friend_(ostream T2; public; dataClass(T1 aT2 b)ia;j=b; void show()couti“,
36、”jn; ; int main() dataClassint,doubleobl10,0.23; dataClass(char,char*)ob2(X,”my data”); ob1.show(); ob2.show(); return 0; 请将程序补充完整,使程序在运行时输出: 10,0.23 X,my data(分数:2.00)填空项 1:_ (正确答案:templateclass T1,class T2。)解析:解析 本题是对模板的考查。由 T1 i;T2 j;语句知,应该在 i,j 对象声明为 T1 和 T2 类型前,定义模板 T1 和 T2。根据题目中给出的“模板类 dataCla
37、ss,使用 C+的关键字“template”来声明 T1和 T2 的定义。47.有如下程序: #includeiostream using namespace std; class A public: A()cout“A”; A()cout“A”;) ; class B A a; public, B()cout“B”; B()cout“B”; ; int main() B b; return 0; 程序的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:ABBA。)解析:解析 本题考查派生类的构造函数与析构函数的调用。建立一个派生类对象时,派生类的构造函数的调用顺序如下:基类的构造函
38、数、成员对象的构造函数,派生类自身的构造函数。析构函数的调用顺序与构造函数严格相反。48.请将下列栈类 Stack 补充完整。 class Stack private: intpList100/int 数组,用于存放栈的元素 inttop;/栈顶元素(数组下标) public: Stack();top(0) void Push(const int class A public:A()coutA; ; class B:_ public:B()coutB;) ; class C:_ public:C()coutC; ; class D:public B,public C public:D()coutD; ; void main()D obj;(分数:2.00)填空项 1:_ (正确答案:virtual publicA virtual public A。)解析:解析 本题考查虚基类的应用。通过虚基类所派生的类,在所产生的对象中,只包含了一个和其他类共享的基础对象,也就是说,从同一个基类中以虚拟方式派生的所有类,在它们所产生的对象里,不会有一份基础对象,而只是在内存里保留一份基础对象,而派生类中只保留指向此基础对象的指针,这样就不会同时有两份基类对象的情形发生。题中程序最后字符 A 只输出了一次,所以类 A 必须为类 B 和类 C的虚基类。