2021年江苏省盐城市全国计算机等级考试C++语言程序设计真题(含答案)_第1页
2021年江苏省盐城市全国计算机等级考试C++语言程序设计真题(含答案)_第2页
2021年江苏省盐城市全国计算机等级考试C++语言程序设计真题(含答案)_第3页
2021年江苏省盐城市全国计算机等级考试C++语言程序设计真题(含答案)_第4页
2021年江苏省盐城市全国计算机等级考试C++语言程序设计真题(含答案)_第5页
已阅读5页,还剩41页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2021年江苏省盐城市全国计算机等级考试

C++语言程序设计真题(含答案)

学校:班级:姓名:考号:

一、1.选择题(10题)

1.对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较

次数中正确的是()o

A.冒泡排序为n/2B.冒泡排序为nC.快速排序为nD.快速排序为n(n-l)

/2

2.设有以下语句,对a数组元素的引用中(其中0<=i<10)不正确的是

inta[10]={0,l,2,3,4,5,6,7,8,9),*p=a;

A.a[p-alB*(&a[i])C.p[i]D.*(*(a+i))

3.有如下程序:#include<iostream>usingnamespacestd;Classx

{protected:inta;public:x(){a=l;}};classxl:virtualpublicx{public:

xl(){a+=l;cout<<

A.lB.123C.242D.244

4.下列选项中不全是C++语言关键字的是

A.const,break,default

B.long,void,using

C.virtual,extern,include

D.try,throw,this

5.C++语言本身没有定义I/O操作,使用I/O流的程序需要包括()。

A.stdio.hB.istream.hC.ostream.hD.iostrcam.h

6.有以下程序:#include<iostream>usingnamespacestd;class

CSample{private:inti;public:CSample();CSample(intval);void

DisplayO;~CSample();};CSample::CSample(){cout<<"Cl";i=

0;}CSample::CSample(intval){cout<<"C2";i=val;}void

CSample::Display(){cout<<i<<}CSample::〜CSample(){cout

<<"D";}intmain(){CSamplea,b(10);return0;}执行后的输出结

果为()。

A.C1C2DDB.DDC1C2C.C2C1DDD.C1DC2D

7.在进行单元测试时,常用的方法是()。

A.采用白盒测试,辅之以黑盒测试B.采用黑盒测试,辅之以白盒测试

C.只使用白盒测试D.只使用黑盒测试

8.以下程序中调用cin函数给变量a输入数值的方法是错误的,其错

误原因是#include<iostream.h>voidmain(){int*p,*q,a,b;p=&a;

cout<<"inputa:";cin>>p;}

A.*p表示的是指针变量p的地址

B.p表示的是变量a的地址,而不是变量a的值

C.*p表示的是指针变量p的值

D.*p只能用来说明p是一个指针变量

9.有以下程序#include<iostream>usingnamespacestd;class

MyClass{public:MyClass(intn){number=n;}〃拷贝的构造函数

MyClass(MyClass&other){number=other.number;}〜MyClass()

{}private:intnumber;};MyClassfun(MyClassp){MyClasstemp(p);return

temp;}intmain()MyClassobj1(10),obj2(0);MyClassobi3(obj1);

obj2=fun(obj3);return0;}程序执行时,MyClass类的拷贝构造函数被调

用的次数是()。

A.5B.4C.3D.2

10.关于构造函数A()的拷贝构造函数正确的是

A.A(A*B);B.A(AB);C.A(A&B);D.A(A);

二、单选题(13题)

11.以下各选项组中,均是C++语言关键字的组是()。

A.publicoperatorthis

B.shodstringstatic

C.itwhile>=

D.priratecoutprintf

12.一个队列的进队列顺序是1,2,3,4,则出队列顺序为()。

A.4,3,2,1B.2,4,3,1C.1,2,3,4D.3,2,1,4

13.已知类Myclass的定义如下

classMyClass{

public:

voidfunction1(MyClass&C){cout<<c.data;)

staticvoidfunction2(MyClass&C){cout<<c.data;}

voidfunction3(){cout<<data;}

staricvoidfunction4(){cout<<data;}

private:

intdata;

);

其中有编译错误的函数是()。

A.function1B.function2C.function3D.function4

14.有如下程序:

#include<iostream>

usingnamespacestd;

classB{

public:

virtualvoidshow(){cout«"B";}};

classD:publicB{

public:

voidshow(){cout«"D";}

);

voidfun1(B*ptr){ptr->show();

}voidfun2(B&ref){ref.show();

}voidfun3(BB){b.show();

)

intmain(){

Bb,*p=newD;

Dd;

funl(p);

fun2(b);

fun3(d);

returnO;

程序的输出结果是()。A.BBBB.BBDC.DBBD.DBD

15.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定

的图符构成。下列图符名标识的图符不属于数据流图合法图符的是

()o

A.控制流B.加工C.数据存储D.源和潭

16.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现

象称作

A.软件投机B.软件危机C.软件工程D.软件产生

17.下列数据模型中,具有坚实理论基础的是()。

A.层次模型B.网状模型C.关系模型D.以上3个都是

18.对于模板定义关键字class和typename说法不正确的是()。

A.程序中的class并不能都替换为typename

B.class和typename都可互相替换

C.程序中的typename都能替换为class

D.程序中的部分class可以替换为typename

19.下列函数的运行结果是()。

#include<iostream.h>

intadd(inta,intb);

voidmain()

{

extemintX,y;

cout«add(X,y)«endl;

)

intx(20),y(5);

intadd(inta,intb)

(

ints=a+b:

returns;

)

A.25B.30C.20D.15

20.下面对静态数据成员的描述中,正确的是()。

A.静态数据成员是类的所有对象共享的数据

B.类的每个对象都有自己的静态数据成员

C.类的不同对象有不同的静态数据成员值

D.静态数据成员不能通过类的对象调用

21.线性表L=(al,a2,a3,...ai,…an),下列说法正确的是()

A.每个元素都有一个直接前件和直接后件

B.线性表中至少要有一个元素

C.表中诸元素的排列顺序必须是由小到大或由大到小

D.除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个

直接前件和直接后件

22.下列关于赋值运算符“=”重载的叙述中,正确的是

A.赋值运算符只能作为类的成员函数重载

B.默认的赋值运算符实现了“深层复制”功能

C.重载的赋值运算符函数有两个本类对象作为形参

D.如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符

23.有如下程序:

#include<iostream>

usingnamespacestd;

voidfunction2(intn);

voidfunctionl(intn):{

if(n<=O)retum;

function2(n-2);

}

voidfunction2(intn){

if(n<=O)retum;

functionl(n-l);

}

intmain(){

functionl(5);

returnO;

下列关于程序运行情况的描述中,正确的是()oA.functionl运行1次,function2

运行2次

B.function1运行2次,function2运行1次

C.functionl运行2次,function2运行3次

D.function1运行2次,function2运行2次

三、2.填空题(12题)

24.冒泡排序算法在最好的情况下的元素交换次数为【】。

25.在深度为4的满二叉树中,叶子结点的个数为[]o

26.数据库系统其内部分为三级模式,即概念模式、内模式和外模式。

其中,是用户的数据视图,也就是用户所见到的数据模式。

27.表达式cout<<hex改用ios类的成员函数表示为【】。

28,为满足运算符+的可交换性,必须将其重载为【】。

29.若按功能划分,软件测试的方法通常分为白盒测试方法和【】测试

方法。

30.编译时的多态性可以通过使用获得。

31.下列程序中声明了两个类AA和BB,其中函数“print”是类AA的成

员函数,但是类BB的友元函数。

请在①、②和⑧处各填入正确的内容,使程序能正常运行。

#include<iostream.h>

【】;

classAA{

intt;

public:

AA(intx){t=x;}

voidprint(BB&b);

);

classBB{

ints;

public:

BB(inty){s=y;}

friendvoid[]print(BB&);

);

void[]

{cout<<"AA:"<<t<<"BB:"<<w.s<<endl;}<

voidmain(){

AAm(6);

BBn(8);

m.print(n);

)

输出结果为:AA:6;BB:8

32.表达式c3=c1.operator+(c2)或c3=operator+(cl,c2)还可以表示为

33.已知数组a中的元素个数为n,下列语句的作用是将下标为i的元

素移动到下标为i-l的单元,其中lWi<n。例如,当n=4,a中原有数据

为1、2、3、4时,则移动后a中元素为2、3、4、4O请将语句补充完

整:

for(inti=0;i<n-1;i++)a[i]=a。

34.将x+y*z中的“+”用成员函数重载,"*”用友元函数重载应写为

35.在C++中,一个函数一般由两部分组成,分别是函数头和【】。

四、程序改错题(10题)

36.使用VC++6.。打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错误,请改正错误,使程序正常运行,并且要求最后一个

catch必须抛出执行的任何异常。

程序异常,输出信息为

error

O

ERROR

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******errc)r******的下面。

试题程序:

#include<iostream.h)

intmain

throw("error");

)

!!********enor********

catch(chars)

{

cout«s«endl;

)

try

(

throw((int)0);

)

II********error********

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

)

II********enor********

catch

cout«"ERROR"«endl;

returnO;

)

37.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行时有错误,请改正程序中的错误,使得程序输出:

9,8,7,6,5

注意:错误的语句在/********error********/的下面,修改该语句即

可。其他的语句不能修改。

试题程序:

#include(iostream.h>

classTC

(

I********error********/

TC(inti)

(

m_i=i;

)

voidprint

(

cout«—m_i«,;

)

public:

intm_i;

intmain

I********error********/

inti;

TC04(10);

while(i>5)

I********errOr********/

1++:

04.print;

)

cout«endl;

retumO;

38.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果

为:

sizeof(S1)=5

sizeof(s2)=10

sizeof(s3)=l

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******error******的下面。

⑴不能删除assert()语句。

(2)只能修改后面的数字。

提示:assert函数如果为假,则会产生一个中断异常。

试题程序:

#include<iostream.h>

#include<assert.h>

voidmain()

(

char*sl="abc":

I!********ejpror********

assert(sizeof(s1)~3):

cout«"sizeof(sl)=5"«endl;

chars2[10]="ab":

/*1**1*>1**1**4**1**1*

//个不不不不不不个prmr不不不不不不不不

assert(sizeof(s2)==2);

cout«"sizeof(s2)=10"«endl;

chars3=23:

/*1**1**1**1*、!,*1**1*7,*1*

//小个不个个不不个prrcr不不不不不不不不

assert(sizeof(s3)==4);

cout«"sizeof(s3)=1"«endl;

return;

)

39.使用VC++6.。打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错误,请改正错误,使程序正常运行,并且要求最后一个

catch必须抛出执行的任何异常。

程序异常,输出信息为

error

O

ERROR

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******errc)r******的下面。

试题程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

}

II********error*********

catch(chars)

(

cout«s«endl;

)

try

{

throw((int)0);

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

II***************

catch

(

cout«"ERROR"«endl;

)

retumO;

)

40.使用VC++6.。打开考生文件夹下的源程序文件I.cpp,该程序运

行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

注意:错误的语句在//******errc)r******的下面,修改该语句即可。

试题程序:

#include(iostream.h)

classTC

{

inti;

public:

TC;

voiddisplay;

~TC;

);

//******ej*j*or******

TC:TC

cout«"Constructor"«",

i=0;

)

II******ej*ror******

TC:display

(

tout«"i="«i<<","«endl;

}

II******error******

TC:TC

(

COUI«"Destructor"«endl:

)

voidmain

{

TCa;

a.display;

)

41.使用VC++6.。打开考生文件夹下的源程序文件

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实

现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在

/I******error******曰勺।8jo

试题程序:

#include<iostream>

#include<fstream>

IJ********error*********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

outl.open("l.txt",binary|app);

for(inti=0;s[i]!=0;i++)

(

II********enor********

outl.puts(s[i]);

)

outl.close;

)

voidClearFile

{

ofstreamoutl;

outl.open("l.txt");

outl.close;

}

intmain

(

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

)

42.使用VC++6.。打开考生文件夹下的源程序文件1.cpp,该程序

运行有问题,请改正main函数中的错误,使程序的输出结果为:

number=1

number=10

number=100

注意:不要改动main函数,不能增加或删除行。也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h>

classTC

(

public:

TC(inti)

(

number=i;

)

voidSetNumber(intm)

{

number=m;

)

intGetNumberconst

returnnumber;

)

voidPrintconst

cout«"number="«number«endl;

private:

intnumber;

);

voidmain

II********error********

TCobjl;

objl.Print;

TCobj2(3);

II********enor********

objl.number=10;

//********en*or*%o******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

43.使用VC++6.0打开考生文件夹下的源程序文件1.cppo本程序要

求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输

入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕

中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

1I********enor********

cin.getline(str,120);

II********eno1********

while(str)

(

II********enor********

if(str[i])=a)

str[i]=str[i]-a+A;

i++;

)

cout«str«endl;

return;

)

44.使用VC++6.。打开考生文件夹下的源程序文件

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现

的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在

II******error******自勺卜

试题程序:

#include<iostream>

#include<fstream>

!1********error********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

!1********enor********

outl.open("l.txt",binary|app);

for(inti=0;s[i]!=0;i++)

{

II********error********

outl.puts(s[i]);

)

outl.close;

)

voidClearFile

{

ofstreamoutl;

outl.open("l.txt");

outl.close;

intmain

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

)

45.使用VC++6.。打开考生文件夹下的源程序文件1.cpp。本程序

要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可

能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出

到屏幕中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******errc)r******的下面。

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

cin.getline(str,120);

II***************

while(str)

(

II********enor********

if(str[i])=a)

str[i]=str[i]-a+A;

i++;

)

cout«str«endl;

return;

)

五、综合应用题(2题)

46.使用VC++6.。打开考生文件夹下的源程序文件3.cpp,其中定

义了类A、A1和A2,其中A1类由A类公有派生,A2类由A1类公

有派生。

(1)定义类A的构造函数,该构造函数有一个整型的参数x,在构造函

数中请将x赋值给数据成员a。请在注释“//********1********”之

后添加适当的语句。

(2)定义类A1的构造函数,该构造函数有两个整型的参数x和y,在构

造函数中请将x赋值给数据成员b,将y作为基类A构造函数的参数

值传人。请在注释“//********2*********之后添加适当的语句。

(3)定义类A2的构造函数,该构造函数有3个整型的参数x,y和z,

在构造函数中请将x赋值给数据成员C,将y和z分别赋值给基类A1

构造函数的参数X和yo请在注释“//********3*********之后添加

适当的语句。

⑷完成类A2的成员函数show的定义,该函数调用基类成员函数,输

出基类数据成员a和b及类A2自身的数据成员C的值,上述3个值

在输出时以空格隔开。请在注释“//********4*********之后添加适

当的语句。

程序输出结果如下:

7

3

738

注意:除在指定的位置添加语句之外,请不要改动程序的其他部分。

试题程序:

#include<iostream.h>

classA

(

inta;

public:

intgeta{retuma;}

};

classAl:publicA

(

intb;

public:

I[

intgetb{returnb;}

);

classA2:publicAl

{

intC;

public:

//****,****3********

voidshow

(

Ii********4********

}

);

voidmain

(

A2a(8.3.7):

cout«a.geta«endl:

cout«a.getb«endl:

a.show;

)

47.使用VC++6.。打开考生文件夹下的源程序文件3.cppo请完成

以下部分,实现在屏幕上输出为

C3

C2

这个程序需要修改的部分,请按照以下部分实现。

(1)类CO不能被实例化,请定义一个纯虚函数print,在注释1后添加

适当的语句。

(2)类C1私有虚继承类CO,请在注释2后添加适当的语句。

⑶类C2公有继承于CO,请在注释3后添加适当的语句。

(4)类c3公有继承于C2与C1,请在注释4后添加适当的语句o

注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修

改其他的程序代码。

试题程序:

#include(iostream.h)

classCO

};

II********2********

classCl:

public:

voidprint

cout<",,Cl"<<endl;

};

classC2:

public:

voidprint

cout<<"C2"<<endl;

)

};

II********4***x****

classC3:

(

public:

voidprint

(

cout<<"C3"<<endl;

)

};

voidmain

{

C3Obj3;

C20bj2;

obj3.print;

obj2.print;

return;

}

六、3.综合应用题(2题)

48.使用VC6打开考生文件夹下的工程test29_3o此工程包含一个

test29_3.cpp,其中定义了二维坐标类Coordinate和三维坐标类

ThreeDCoord,其中ThreeDCoord类由Coordinate类public派生,但两

个类的定义并不完整。请按要求完成下列操作,将程序补充完整。

⑴定义类Coordinate的保护数据成员x和y,它们都是int型的数据,

代表二维坐标的横纵坐标值。请在注释“〃**1**”之后添加适当的语句。

(2)根据类Coordinate定义后的成员函数Display的实现,补充该函数在

类Coordinate定义体内的声明,Display为二维坐标类的虚函数。请在注

释“〃**2**。”之后添加适当的语句。

(3)完成二维坐标类Coordinate的构造函数,将参数a和b分别赋值给数

据成员x和yo请在注释“〃**3**”之后添加适当的语句。

(4)根据ThreeDCoord类构造函数的声明,补充ThreeDCoord构造函数

的实现,参数a和b通过调用基类的构造函数来初始化基类的数据成员

x和y,c赋值给数据成员2。请在注释“〃**4**”之后添加适当的语句。

输出结果如下;

[1,2]

[3,4,5]

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件tese9_3.cpp清单如下:

#include<iostream.h>

classCoordinate

{protected:

〃**]**

public:

Coordinate(inta=0,intb=0);

〃**2**

);

Coordinate::Coordinate(inta,intb)

〃**3**

)

voidCoordinate::Display()const

(

cout<<<<x<<","<<y<<']'<<endl;

}

classThreeDCoord:publicCoordinate

(

intz;

public:

ThreeDCoord(inta=0,intb=0,intc=0);

virtualvoidDisplayOconst;

);

〃**4**

voidThreeDCoord::DisplayOconst

(

cout<<'[<<<x<<","<<y<<","<<z<<']'<<

endl;

)

voidmain()

(

Coordinatec(l,2);

ThreeDCoordt(3,4,5);

c.Display();

1.Display();

}

49.使用VC6打开考生文件夹下的工程test30_3o此工程包含一个

test3O_3.cpp,其中定义了类A、A1和A2,其中A1类由A类公有派

生,A2类由A1类公有派生。上述三个类的定义并不完整,请按要求完

成下列操作,将程序补充完整。

(1)定义类A的构造函数,该构造函数有一个整型的参数x,在构造函数

中请将x赋值给数据成员a。请在注释“//**1**”之后添加适当的语句。

(2)定义类A1的构造函数,该构造函数有两个整型的参数x和y,在构

造函数中请将X赋值给数据成员b,将y作为基类A构造函数的参数值

传入。请在注释“〃**2**”之后添加适当的语句。

⑶定义类A2的构造函数,该构造函数有三个整型的参数x,y和2,在

构造函数中请将x赋值给数据成员c,将y和z分别赋值给基类A1构

造函数的参数x和y。请在注释“〃**3**”之后添加适当的语句。

⑷完成类A2的成员函数show的定义,该函数调用基类成员函数,输

出基类数据成员a和b及类A2自身的数据成员c的值,上述三个值在

输出时以空格隔开。请在注释“〃**4**”之后添加适当的语句。

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

程序输出结果如下:

9

6

962

源程序文件test3O_3.cpp清单如下:

#include<iostream.h>

classA

(

inta;

public:

//**।**

intgeta(){returna;}

);

classAkpublicA

(

intb;

public:

〃**2**

intgetb(){returnb;}

);

classA2:publicAl

intc;

public:

〃**3**

voidshow()

〃**4**

)

);

voidmain()

(

A2a(2,6,9);

cout<<a.geta()<<endl;

cout<<a,getb()<<endl;

a.show();

参考答案

l.D

Do【解析】本题主要考查对排序算法的理解。冒泡排序法首先将第一

个记录的关键字与第二个记录的关键字进行比较,若逆序则交换,然

后比较第二个与第三个,以此类推,直至第n-l个与第n个记录的关

键字进行比较。第一趟冒泡排序使最大的关键字元素放到最后。以此

类推,进行第2〜n次冒泡排序。如果在排序过程中不存在逆序,则排

序结束。在最坏情况下,冒泡排序中,若初始序列为“逆序”序列,则

需要比较n(D-l)/2次。快速排序是对冒泡排序的一种改进。它的基本

思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分

记录的关键字比另一部分记录的关键字小,然后分别对这两部分记录

继续进行排序,最终达到整个记录有序。对于快速排序,当初始记录

序列按关键字有序或基本有序时,快速排序退化为冒泡排序,最坏情

况下比较次数为n(n-l)/20

2.D解析:本题考核数组与指针。A选项中,p为指针,数组名a代表

数组的首地址,所以p-a就是指针到数组首地址的偏移量。B选项中,

&a[i]是取数组a中第i个元素的地址,而对于*(&a[i]),由指针运算符

*的运算规则可知,语句*(&a[i])就是返回地址&a[i]空间中存放的值,

也即a[i]oC)选项,由于指针p已指向数组a,所以p[i]就等于a[i]小

这是常用的一种数组元素引用方式。D)选项是以指针方式对数组元素

进行引用,由于a只是代表数组的首地址,并不是指针,所以表达式

*(*(a+i))是错误的,正确的引用应该为:*(*(p+i))。

3.D解析:本题程序中引入了虚基类。在主函数中,执行语句“yobj;"

时,先执行虚基类x的构造函数,使a=l,然后执行类xl的构造函数,

使a=2,并输出值2。再执行类x2的构造函数,使a=4,并输出值4。

最后执行类y的构造函数,输出值4。

4.C解析:要熟练掌握C++语言中的关键字。注意:include不是C++语

言的关键字。注意:define也不是关键字。

5.D解析:在C++中使用I/O流的程序需要包括iostream.ho

6.A解析:本题程序首先定义了类CSample,其内部成员为private类型

数据成员inti和public类型成员函数,包括两个构造函数、一个析构函

数和一个普通成员函数voidDisplayO,其成员函数的功能分别为:

①CSample::CSample():构造函数,输出构造函数的执行消息“C1”,并

将数据成员i赋值为i=0:

②CSample::CSample(intval):重载构造函数,输出构造函数的执行消

息“C2”,并将数据成员i赋值为i=val:

(3)voidCSample::DisplayO:成员函数,输出数据成员i的值;

©CSample~CSample。:析构函数,输出析构函数的执行消息,并输

出数据成员值。在主函数中,程序分别采用两个构造函数,创建了类

CSample的两个对象,一个利用不带参数的构造函数创建对象a,另一

个利用带参数的构造函数创建对象b。根据上面的分析,可以得到a和

b中数据成员i的值分别为。(不带参数情况)和10(所带参数值)。因此下

面的两条输出语句分别输出“0”和“10”。

此外,由于系统在创建对象时会调用构造函数,在对象生命期结束时会

调用析构函数,因此程序还会有相应的输出。由于构造函数的调用顺序

与对象创建的先后顺序一致,因此程序应该首先输出两个构造函数的调

用信息,即“C1”和“C2”。在主函数执行结束后,由于两个对象a和b的

生命期已经结束,因此系统将调用析构函数收回系统资源。由于析构函

数的调用顺序与构造函数完全相反,因此系统将首先调用对象b的析构

函数,程序输出析构函数执行信息“D”;之后调用对象a的析构函数,

程序输出析构函数执行信息“D”。

7.A解析:单元测试的步骤如下:

①理解需求和设计。清楚被测试模块在整个软件中所处的位置。一个原

则是:好的设计,各模块只负责完成自己的事情,层次与分工明确。单

元测试时,可以不测试不属于被测模块所负责的功能,以减少测试用例

的冗余。

②概览源代码。浏览源代码,初步检查源代码的编码风格与规范,大致

估算测试工作量,确定模块的复杂程度,初步制定测试的优先级等。

③精读源代码。认真阅读和分析代码,理解代码的业务逻辑,检查代码

与设计是否相符,仔细研究逻辑复杂的模块,可采用一些检查列表来检

查程序可能会出现的问题。

④设计测试用例。综合运用白盒测试方法(并结合黑盒测试方法)设计测

试用例,包括功能测试、性能测试等,要达到一定的测试覆盖率。本题

正确答案为选项A。

⑤搭建单元测试环境。这个阶段主要就是写桩模块和驱动模块,然后驱

动模块想办法获取被测试模块对数据的处理结果,并判定返回的实际结

果与测试用例的预

期结果是否一致,通过测试框架来记录执行的结果,对于出现的错误,

还需统计错误的信息,供执行完之后分析。

⑥执行测试。运行写好的驱动模块完成对被测试模块的测试。

⑦补充和完善测试用例。在测试过程中不断补充测试用例,直到满足要

求为止。

⑧分析结果,给出评价。根据测试的结果分析、查找错误的原因,并找

到解决的办法。测试结束之后,根据测试过程的数据统计,给出被测试

对象评价。

8.B解析:p表示的是变量a的地址,定义后*p表示的是变量a的值。

9.B

10.C解析:固定的一种拷贝方式就是<类名>:<类名>const〈类名>&<弓]

用对象名〉注意:如果一个类中没有声明,拷贝构造函数,编译器会自

动生成一个如上述形成的仅有的拷贝构造函数。

11.A

关键字是系统已预定义的单词,在程序中有不同的用途,考生应该熟

记。

12.C解析:队列是指允许在一端进行插入,而在另一端进行删除的线性

表。因此队列又称为先进先出的线性表。本题正确答案为选项C。

13.D

14.C

Co【解析】本题考查的知识点是虚函数与多态性。在成员函数声明的

前面加上virtual修饰,即把该函数声明为虚函数。在C++中,一个

基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针

(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象

类的那个重定义版本。故本题最终输出结果为DBB。

15.A解析:数据流图包括4个方面,即加工(转换)(输入数据经加工变

换产生输出)、数据流CS箭头方向传送数据的通道,一般在旁边标注数

据流名)、存储文件(数据源)(表示处理过程中存放各种数据的文件)、

源和潭(表示系统和环境的接口,属系统之外的实体)。不包括选项中的

控制流。

16.B解析:软件工程概念的出现源自软件危机。所谓软件危机是泛指在

计算机软件的开发和维护过程中所遇到的一系列严重问题。总之,可以

将软件危机归结为成本、质量、生产率等问题。

17.C在数据库设计中,目前常用的数据模型主要有三种,分别是层次模

型、网状模型和关系模型。

层次模型是数据库系统中最早出现的数据模型。我们通常把满足以下两

个条件的数据模型称为层次模型。

(1)有且仅有一个结点无双亲,这个结点称为根结点。

(2)其他结点有且仅有一个双亲。

层次模型用树形结构来表示各实体与实体间的联系。实体是数据库中数

据描述的对象,可以是一个人、一种商品等。在层次模型中,每个结点

表示一个记录类型,记录之间的联系用结点之间的连线表示,这种联系

是父子之间一对多的联系。记录就是描述实体的相关数据。

如果取消层次模型中的两个限制,即允许一个以上的结点无双亲,则每

一个结点可以有多个父结点,便形成了网状。我们把网状表示实体之间

联系的模型称为网状模型。

关系模型用表格形式表示实体类型及其实体间的联系。关系模型是目前

最重要的一种模型,它是建立在严格的数学概念的基础上的,具有最坚

实的理论基础。关系模型的基本数据结构是二维表,每一张二维表称为

一个关系。

18.BB。【解析】在C++程序中的typename是都可以替换为class的,

但class不能都替换为typenameo

19.A

Ao【解析】由主函数main入手,定义外部变量x和y,调用函数

addo因为x,y为外部变量,所以“intx(20),y(5);”的赋值在add也是

有效的,即add函数的运算结果为25。

20.A静态成员表示整个类范围共享的信息泌须对静态数据成员进行初

始化;静态数据成员是属于类的,不能通过类的对象调用。

21.D解析线性表可以为空表,排除选项B。第一个元素没有直接前件,

最后一个元素没有直接后件,故排除选项A。线性表的定义中,元素的

排列没有规定大小顺序,故选项C也有误,只有D项是正确的。

22.A

解析:=、小()、,以及所有的类型;转换运算符只能作为成员函数

重载,A项正确。默认的赋值运算符只实现了浅层复制,B项错误。

赋值运算符只能作为成员函数重载,形参表中只有一个参数,对应于

第二操作数,C项错误。一个类中如果需要重载运算符“=”,通常也

就需要定义自己特有的复制构造函数,反之亦然,故D项错误。

23.D

Do【解析】函数执行过程为:functionl(5),function2(3),

functionl(2),function2(0)retumo

24.00解析:冒泡排序算法在最好的情况下(已经有序的)元素交换次数

为0o

25.88解析:二叉树有一个性质,即在二叉树的第k层上,最多有2”起1)

个结点。而对于满二叉树来说,每一层上的结点数都达到最大值,即在

满二叉树的第k层上有2k-l个结点。因此,在深度为4的满二叉树中,

所有叶子结点在第4层上,即其结点数为

2k」==8

26.外模式外模式解析:数据库系统的三级模式分别是内模式、概念模

式和外模式。其中,物理模式给出了数据库的物理存储结构和存取方法;

概念模式是数据库系统中全局数据逻辑结构的描述,•外模式是用户的数

据视图,也就是用户所见到的数据模式。

27.cout.serf(los::hexbasefield);

28.友元函数友元函数解析:当需要重载运算符具有可交换性时,选择

重载为友元函数。

29.黑盒或者黑箱黑盒或者黑箱解析:软件测试的方法。

30.虚函数和对象虚函数和对象解析:多态性是指一个接口,多种方法。

而虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且通

过基类指针或引用来访问基类和派生类中的同名函数。通过对象名调用

的虚函数,是在运行阶段把虚函数和类对象“绑定”在一起的。

31.classBB;AA::AA::print(BB&w)

32.c3=cl+c2

33.a[i+l]a[i+l]解析:实现由后面一个数组元素将前一个数组元素进行

覆盖,故应该为a[i]=a[i+1]。

34.x..operator+(operator*(yz))x..operator+(operator*(y,z))解析:C+

+中用成员函数重载x*y为:x.operator*(y);用友元函数重载x*y

为:operator*(x,y);用成员函数重载x+y为:x.operator+(y);用友元函数

重载x+y为:operator+(x,y)。

35.函数体函数体解析:在C++中,一个函数由函数头和函数体两部分

组成。

36.(1)应改为"catch(char*s)”。

⑵应改为“cateh(inti)”。

(3)应改为"catch(…)”。

【解析】本题中第1个标识前的异常抛出语句为“throw("error");",其

中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类

型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语

句修改为“catch(char*S)”°第2个标识前的异常抛出语句为

“throw((int)0);",其中的类型为int。对应的异常捕捉语句catch中应

该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配

的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处

的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类

型,那么就用删节号"…''表示它可以捕捉任何类型的异常信息,即修

改为“catch(…)”。

37.(1)应添加“public:

\n(2)“inti”应改为"inti(10);

\n(3)“i++;”应改为“i-;”。

\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、

保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类

的对象被访问。故应在构造函数前添加“public:“,否则该类无法被实例

化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造

参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i

每次减1,在i〉5时循环,故i初始化应为10o若循环中i每次增1,则

循环永远不会退出。

38.(1)应改为"assert(sizeof(sl尸=4);

\僦2)应改为'匕55611凤260心2)==10);”。

\n⑶应改为"assert(sizeof(s3)=l);”。

\n【解析】assert函数如果为假,则会产生一个中断异常。所以要让它正

常执行输出结果,那么assert函数只有为真,才不会产生中断异常。

“assert(sizeof(sl)=3);"语句中"sizeof(sl)==3”为假,这会使程序产生异

常,不能正常执行。因为strl的值为abc,但是它还有一个尾符,它的

长度应该是4,而不是3,所以在第1处修改为“assert(sizeof(sD==4)二。

str2[10]说明,str2的空间为10,在第2处修改为"assert(sizeof(s2)=10);”。

charstr3=23;语句说明23是字符,所占存储空间为1,所以修改为

C4assert(sizeof(s3)=1);”。

39.(1)应改为"catch(char*s)”。

⑵应改为“cateh(inti)”。

(3)应改为"catch(…)”。

【解析】本题中第1个标识前的异常抛出语句为“throw("error");",其

中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类

型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语

句修改为“catch(char*S)”°第2个标识前的异常抛出语句为

44throw((int)0);",其中的类型为int。对应的异常捕捉语句catch中应

该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配

的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处

的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类

型,那么就用删节号"…''表示它可以捕捉任何类型的异常信息,即修

改为“catch(…)”。

40.(1)应改为“TC::TC”。

\n⑵应改为"voidTC::display”。

\n(3)应改为“TC::~TC”。

\n【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名

和作用域运算符“::”,作用域运算符用采表示某个成员属于哪个类,使

用格式为“(类名)::〈成员函数〉((参数函数)),因此第1处应改为“TC::

TC”,默认构造函数没有参数。由第2处“TC=display”后的语句看,这

是在类外实现TC函数,因此也有作用域运算符使用错误问题,display

函数返回值为void,因此第2处的语句应改为“voidTC:[display"。由第

3处的语句叮(2::丁(3”可知,显然这里是在类外实现析构函数,析构函

数是一个特殊的函数,它的名称和类名相同,并在前面加字符,用

采与构造函数加以区别,因此第3处的语句应改为“TC::~TC”。

41.(1)应改为"usingnamespacestd;"。

(2)应改为"outl.open("l.txt",ios::binaryIios::叩p);

(3)应改为“outl.put(s[i]);

【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,

对于C++中引入标准命名空间的格式,缺少namespace,所以第1处

的语句修改为“usingnamespacestd;第2处,调用成员函数open

中,输入、输出方式是在ios类中定义的,所以“outl.open("l.txt",

binaryIapp);”语句缺少类ios,即第2处的语句修改为

“outl.open("l.txt",ios::binaryIios::app);第3个标识应

该用流成员函数put输出字符,所以第3处的语句修改为

“outl.put(s[i]);

42.(1)应改为"TCobjl(l);

(2)应改为“Objl.SetNumber(lO);

(3)应改为“0bj2.SelNumber(lOO);

【解析】本题第1处的“TCobjl;”语句是声明TC类的对象Objl,根据

TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个

输出结果两1,所以补全参数1,即第1处的“TCobjl(l);第2处处

的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C+

+中成员函数的使用形式应该是:对象名.成员函数,所以修改为

“objl.SetNumber(lO);类是对象的抽象,而对象是类的具体实

例。第3处“TC.SetNumber(lOO);”语句中的TC为类,并不是对象,

这里应该使用定义的对象,即。bj2,所以将语句修改为

“obj2.SetNumber(lOO);

43.(1)应改为“ein.getline(str,120,?);

\n⑵应改为"while(st巾])”。

\n⑶应改为"if(str[i]>=a&&st巾]<=2)”。

\n【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员

函数getline函数读入一行字符,格式为“cin.getline(字符数组,字符个

数,终止标志字符)”,所以第1处改为“cin.getline(str,120,?);"。第

2处的“while(str)”语句应该是判断字符串str中的每一个字符是否为结

束符,若不是结束符,在循环中判断每一个字符是否为小写,若为小写,

则转换。所以应该修改为“while(str[i])”。第3处的“if(str[i]>=a)”语句是

判断字符str用是否为小写字符,而现有的语句只是判断字符是否大于a,

,,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论