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

付费下载

下载本文档

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

文档简介

2022年湖南省岳阳市全国计算机等级考试

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

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

一、1.选择题(10题)

1.用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)

进行排序时,序列的变化情况如下:20,15,21,25,47,27,

68,35,8415,20,21,25,35,27,47,68,8415,

20,2重,25,27,35,47,68,84则所采用的排序方法是()o

A.选择排序B.希尔排序C.归并排序D.快速排序

2.数据库系统的核心是()

A.数据库B.数据库管理系统C.模拟模型D.软件工程

3.结构化程序设计主要强调的是()。

A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序的易读

4.实现输出为八进制的符号是()。

A.decB.hexC.octD.setw(8)

5.下面关于虚函数的描述中正确的是

A.虚函数是一个静态成员函数

B.虚函数是一个非成员函数

C.虚函数既可以在函数说明时定义,也可以在函数实现时定义

D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型

6.以下程序的输出结果是()。main(){inta=4,b=5,c=0,d;d=!a&&!b)||!

c;cout<<d<<endl;}

A.lB.OC.非0的数D.-l

7.软件工程管理的具体内容不包括对()管理。

A.开发人员B.组织机构C.用户D.设备

8.有如下类的定义。横线处的语句是()。class

MyClass{public:MyClass(inta=0,intb=0){X=a;Y=b;}void

Change()const{X=10;Y+=10;}private:intX,Y;};

A.staticB.constC.mutableD.不需要填入内容

9.下列关于模板的叙述中,错误的是()。

A.模板声明中的第一个符号总是关键字template

B.在模板声明中用<和>括起来的部分是模板的形参表

C•类模板不能有数据成员

D.在一定条件下函数模板的实参可以省略

10.有如下程序:#include<iostream>usingnamespacestd;intmain()

{int*p;*p=9;cout<<"Thevalueatp:"<<*p;return0;}编译运行程序

将出现的情况是()

A.编译时出现语法错误,不能生成可执行文件

B.运行时一定输出:Thevalueatp:9

C运行时一定输出:Thevalueatp:*9

D.运行时有可能出错

二、单选题(13题)

11.已知语句intm=10;则下列表示引用的表示中正确的是

A.int&x=m;

B.int&y=10;

C.int&z;

D.float&t=&m;

12.当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为

保护成员,这些成员在基类中原有的访问属性是()o

A.任何B.公有或保护C.保护或私有D.私有

13.下列函数的运行结果是()。#include<iostream.h>intf(inta,intb)

{intc;if(a>b)c=l;elseif(a==b)c=0elsec=-1;return(c);}voidmain()

{inti=2,j=3;intp=f(i,j);cout<<p:)

A.-1B.1C.2D.编译出错,无法运行

14.下列关于析构函数的描述中,错误的是()。

A.类中有且仅有一个析构函数B.析构函数可以有形参C.析构函数没

有函数类型D.析构函数对象消失时被自动执行

15.设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份

证号),课程c(课号,课名),选课SC(学号,课号,成绩.,则表SC的

关键字(键或码)为0

A.课号,成绩B.学号,成绩C.学号,课号D.学号,姓名,成绩

16.下列有关运算符重载的叙述中,正确的是()。

A.运算符重载是多态性的一种表现

B.C++中可以通过运算符重载创造新的运算符

C.C++中所有运算符都可以作为非成员函数重载

D.重载运算符时可以改变其结合性

17.有下列程序:

#include<stdiO.h>

voidmain()

{stuctSTU{charname[9];charsex;double

score[2];);

stuctSTUa={"ZhaO",m,85.0,90.0),b={"

Qian",f,95.0,92.0);

b=a:

printf("%S,%C,%2.0,%2.0\n”,b.name,b.sex,

score[O],bscore[l]);

程序的运行结果是()oA.Qian,f,95,92B.Oian,m,85,90C.ZhaO,

f,95,92D.ZhaO,m,85,90

18.

(29)下列程序的输出结果为2,横线处应添加语句().

#include<iostream>

usingnamespacestd;

classTestClass1

(

public:

voidfiinO{cout«l;}

};

classTestClass2:publicTestClassi

(

public:voidfun(){cout«2;)

);

intmain()

{

TestClass1♦p^ewTestClass2;

p->fun();

deletep;

return0;

}

A)publicB)privateC)virtualD)protected

19.算法的时间复杂度是指

A.算法程序运行的具体时间B.算法程序的长度C.算法程序执行过程

中基本运算的次数D.运行时算法程序所占的内存容量

20.有如下函数模板声明:template<typenameT>

TMax(Ta,Tb){retum(a>=b)?a:b;)下列对函数模扳Max的调

用中错误是

A.Max(3.5,4,5)

B.Max(3.5,4)

C.Max<double>(3.5,4.5)

D.Max<double>(3.5,4)

21.下列叙述中正确的是_________

A.栈是一种先进先出的线性表B.队列是一种后进先出的线性表C.栈

与队列都是非线性结构D.以上三种说法都不对

22.以下叙述正确的是()。

A.函数可以嵌套定义但不能嵌套调用

B.函数既可以嵌套调用也可以嵌套定义

C.函数既不可以嵌套定义也不可以嵌套调用

D.函数可以嵌套调用但不可以嵌套定义

23.有以下程序:

classDate

(

public:

Date(inty,intm,intd);

(

year=Y:

month=m;

day=d;

)

Date(inty=2000)

(

year=y;

month=10;

day=l;

}

Date(Date&d)

year=d.year;

month=d.month;

day=d.day;

)

voidprint()

(

cout«year«"."<(month«"."«day«endl;

)

private:

intyear,month,day;

);

Datefun(Dated)

(

Datetemp;

temp=d;

returntemp;

)

intmain()

(

Datedatel(2000,1,1),date2(0,0,0);

Datedate3(datel);

date2=fun(date3);

returnO;

}

程序执行时,Date类的拷贝构造函数被调用的次数是()。

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

三、2.填空题(12题)

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

25.一个项目具有一个项目主管,一个项目主管可管理多个项目。则实

体集“项目主管”与实体集“项目”的联系属于【】的联系。

26.在面向对象方法中,类之间共享属性和操作的机制称为【】。

27•一个项目具有一个项目主管,一个项目主管可管理多个项目,则实

体“项目主管”与实体“项目”的联系属于[]的联系。

28.假定用户没有给一个名为MyClass的类定义析构函数,则系统为其

定义的默认析构函数首部形式为【】。

29.一棵二叉树第6层(根结点为第一层)的结点最多为个。

30.在结构化设计方法中,数据流图表达了问题中的数据流与加工间的

关系,并且每一个实际上对应一个处理模块。

31.请按下面注释的提示,将类B的构造函数定义补充完整。

classA

inta;

public:

A(intaa=O){a=aa;)

ClassB:publicA

(

intb;

Ac;

public:

〃用aa初始化基数A,用aa+1初始化类对象成员c

B(intaa):(b=aa+2)

);

32.以下程序的输出结果是【】。

#include<iostream.h>

voidmain()

{inta=0;

a+=(a=8);

cout<<a;

)

33.若已定义,以下fun函数的功能是:在第一个循环中给前10个数组

元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数

组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、

lo请填空。

fun(inta[])

inti;

for(i=l;i<=10;i++)[]=i;

for(i=0;i<5;i++)[]a[i];

)

34.分析以下程序的执行结果【】。

#include<iostream,h>

classSample

(

intx,y;

public:

Sample(){x=y=O;}

Sample(inta,intb){x=a;y=b;}

〜Sample()

(

if(x==y)

cout<<"x=y"<<endl;

else

cout<<"x!=y"<<endl;

}

voiddisp()

(

cout<<"x="<<x<<",y="<<y<<endl;

)

);

voidmain()

(

Samples1(2,3);

sl.dispQ;

35.设一棵二叉树的中序遍历结果为ABCDEFG,前序遍历结果为

DBACFEG,则后序遍历结果为【]o

四、程序改错题(10题)

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

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

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

程序异常,输出信息为

error

O

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

********ex*x*or********

catch(chars)

(

cout«s«endl;

)

try

throw((int)0);

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

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

//********epj^or********

catch

(

cout«"ERROR"«endl;

}

returnO;

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

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

Constructor,i=0,

Destructor

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

试题程序:

#include(iostream.h)

classTC

inti;

public:

TC;

voiddisplay;

〜TC;

II******ej*por******

TC:TC

cout«"Constructor"«","

i=0;

1I******6pj*or******

TC:display

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

1I******6pj*or******

TC:TC

COUI«"Destructor"«endl:

voidmain

TCa;

a.display;

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

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

Constructor,i=0,

Destructor

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

可。

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

〜TC;

);

//******epj*or******

TC:TC

(

cout«"Constructor"«",";

i=0;

)

I/******ej^0r******

TC:display

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

I/******epj^or******

TC:TC

(

COUI«"Destructor"«endl:

)

voidmain

(

TCa;

a.display;

)

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

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

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

程序异常,输出信息为

error

O

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

try

(

throw("error");

)

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

catch(chars)

(

cout«s«endl;

try

(

throw((int)0);

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

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

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

catch

cout«"ERROR"«endl;

)

retumO;

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

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

number=l

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********ej*por********

TCobjl;

objl.Print;

TCobj2(3);

II********ej*por********

objl.number=10;

II********ej*j*0j**^^o******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

确。

程序输出:

8

8

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

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

试题程序:

#include(iostream.h>

classCO

public:

I********epj*or********I

staticintn=O:

CO

n++:

〜CO

):

I********ej*j*01********I

intCO::n;

voidmain

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

I********epj*or********I

eout«C.n«endl;

cout«C0::n«endl;

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

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

100

37

32

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

可。

试题程序:

#include<iostream.h>

I/******ej^0r******

voidmain

(

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

intm=0142:

I/******ej^0r******

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

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

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

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

到屏幕中。

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

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

试题程序:

#include<iostream.h>

voidmain

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

/I********epj*or********

cin.getline(str,120);

II********epj^or********

while(str)

/I********epj*or********

if(str[i])=a)

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

i++;

cout«str«endl;

return;

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

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

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

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

构,错误的语句在

/I******epx*or******白勺—।'j°

试题程序:

#include<iostream>

#include<fstream>

II********ej*j*01********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

II********ej*j*01********

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

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

II********epj^or********

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.0打开考生文件夹下的源程序文件

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

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

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

构,错误的语句在

II******ei*ror******白勺~|\1|^*|

试题程序:

#include<iostream>

#include<fstream>

II********epj*or********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

II********ep^or********

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

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

1I**************

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;

五、综合应用题(2题)

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

义了用于表示矩形的CRect类,但类CRect的定义并不完整。请按要

求完成下列操作,将类CRect的定义补充完整。

(1)定义私有数据成员leftPoint>topPoint>rightPoint、bottomPoint,分

别用于表示矩形左上角及右下角的点的坐标,它们都是double型的数

据。请在注释1之后添加适当的语句。

(2)完成默认构造函数CRect的定义,指定默认实参为0,它们都是

double型的数据。请在注释2之后添加适当的语句。

⑶定义函数体为空的析构函数。请在注释3之后添加适当的语句。

(4)在main函数中定义GReet类的实例rect2,并把re­

cti的值赋给rect2o请在注释4之后添加适当的语句。

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

试题程序:

#include<iostream.h>

classCRect

(

private:

public:

//********2********

//********3********

voidSetPoints(double,double,double,double);

voidSetLeftPoint(doublem){leftPoint=m;}

voidSetRightPoint(doublem){rightPoint=m;}

voidSetTopPoint(doublem){topPoint=m;}

voidSetBottomPoint(doublem){bottomPoint=m;}

voidDisplay();

);

CReet::CRect(doublel,doublet,doubler,doubleb)

(

leftPoint=l;topPoint=t;

rightPoint=r;bottomPoint=b;

)

voidCRect::Setpoints(doublel,doublet,doubler,doubleb)

(

leftPoint=l;topPoint=t;

rightPoint=n;bottomPoint=b;

)

voidCRect::Display()

(

cout«"left-toppointis("«leftPoint<<","«top-

Point«")"«\n;

cout«"right-bottompointis("«rightPoint«","

<<bottomPoint«")"«\n;

voidmain()

CRectrectO;

rectO.Display();

rectO.SetPoints(20,20.6,30,40);

rectO.Display();

CRectrectl(O,0,150,150);

recti.SetTopPoint(10.5);

recti.SetLeftPoint(10.5);

//********4********rect2Display();}

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

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

C3

C2

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

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

适当的语句。

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

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

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

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

改其他的程序代码。

试题程序:

#include(iostream.h)

classCO

);

//********2********

classCl:

public:

voidprint

cout<",,Cl"<<endl;

);

//********3********

classC2:

public:

voidprint

cout<<"C2"<<endl;

);

/I********4***x****

classC3:

public:

voidprint

(

cout<<"C3"<<endl;

)

);

voidmain

(

C3Obj3;

C20bj2;

obj3.print;

obj2.print;

return;

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

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

序文件test25_3.cpp,其中定义了用于表示堆的类Set,但它的定义并不完

整。请按要求完成下列操作,将程序补充完整。

⑴完成成员函数intIsMemberOf(intn)的定义,该函数检查参数n是否

在类的数据成员数组elems中,如果在返回1,反之返回0o请在注释

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

(2)完成成员函数intAdd(intn)的定义,如果参数n包含在类的数据成员

数组elems中则返回1如果数组超界则返回0,如果都不是,则将参数

n插入到elems中,下标大小为类的数据成员PC,之后PC自加一。请在

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

(3)完成拷贝初始化构造函数Set(Set&s)的定义,请在注释“〃**3**”之后

添加适当的语句。输出结果如下:

1

()

{1,2,3,4,5,6,7,8)

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

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

#include<iostream,h>

classSet

public:

Set(){PC=O;}

Set(Set&s);

voidEmpty(){PC=O;}

intIsEmptyO{returnPC==O;J

intIsMemberOf(intn);

intAdd(intn);

voidPrint();

private:

intelems[100];

intPC;

);

intSet::IsMemberOf(intn)

(

〃**]**

if(elems[i]==n)

return1;

returnO;

)

intSet::Add(intn)

(

〃**2**

return1;

elseif(PC>=100)

returnO;

else

(

elems[PC++]=n;

return1;

)

}

Set::Set(Set&s)

(

〃**3**

for(inti=0;i<PC;i++)

elems[i]=s.elems[i];

}

voidSet::Print()

(

cout<

for(inti=O;i<PC-1;i++)

cout<<elems[i]<<

if(PC>O)

cout<<elems[PC-l];

cout<<"}"<<endl;

)

voidmain()

(

SetA;

cout<<A.IsEmptyO<<endl;

A.Print();

SetB;

for(inti=l;i<=8;i++)

B.Add(i);

B.Print();

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

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

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

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

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

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

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

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

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

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

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

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

(4)完成类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();

)

参考答案

LD解析:快速排序的基本思想是基于分治策略的。对于输入的子序列

L[p..r],如果规模足够小则直接进行排序,否则分三步处理:

①分解(Divide):将输入的序列L[p划分成两个非空子序列L[p..q]

和L[q+1..门,使L[p..q]中任一元素的值不大于L[q+1..r]中任一元

素的值。

②递归求解(Conquer):通过递归调用快速排序算法分别对L[p..q]和

L[q+1..r]进行排序。

③合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以

在L[p..q]和L[q+1..r]都排好序后不需要执行任何计算L[p..r)就已

排好序。

2.B解析:数据库管理系统(DataBaseManagementSystem,简称DBMS)

是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据

操纵、数据维护、控制及保护和数据服务等,数据库管理系统是数据库

系统的核心。

3.D解析:程序不仅是编写完就结束了,为了测试和维护程序,往往还

有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰,

即程序的易读性,“清晰第一,效率第二”。

4.C

5.D解析:本题考核虚函数的定义。虚函数是非静态的成员函数。它不

能是友元函数,但可以在另一个类中被声明为友元函数。虚函数声明只

能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的

地方。派生类的虚函数与基类中对应的虚函数必须满足下列条件,否则

派生类中的虚函数将丢失其虚函数特性,在调用时进行静态联编:①派

生类中的虚函数与基类中的虚函数具有相同的名称。②派生类中的虚函

数与基类中的虚函数具有相同的参数个数和相同的对应参数类型。③派

生类中的虚函数与基类中的虚函数的返回值,或者相同,或者都返回指

针或引用。并且派生类中虚函数所返回的指针或引用的基类型,是基类

型中的虚函数所返回的指针或引用的基类型的子类型。

6.A解析:本题考查逻辑运算符!逻辑“非”,&&逻辑“与",||逻辑“或”,

三者的优先级顺序为!>&&>II,本题中d=!4&&!5||!0,即d=0||l,

也即d=1。

7.D解析:软件工程管理包括六个子域,即启动和范围定义、软件项目

计划、软件项目实施、评审与评价、关闭、软件工程度量。软件工程管

理的具体内容包括对开发人员、组织机构、用户、文档资料等方面的管

理。

8.C

9.C解析:本题考核模板的概念。函数模板的一般说明形式如下:template

(类型形参表>〈返回类型〉〈函数名>(<形参表〉){<函数体>},

所以A、B选项的描述是正确的。在一定条件函数模板的实参可以省略。

所以C选项的描述是错误的。

10.D解析:此题考查的是指针的使用。本题中,在给*p赋值前,指针p

并没有指向一个具体的对象。此时可以通过编译,但运行时由于P中为

随机值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程

序出错。

1LA解析:引用比较特殊,即必须指向一个已有的同类型变量。引用是

已有变量的别名,故选项\u3000C是错误的,选项D中变量类型不同,

而选项B中是常数。

12.B

Bo【解析】保护继承时基类的public和protected是保护的,私有继

承时基类的public和protected是私有的。

13.A解析:本题的函数是根据a和b的值来给c赋值。

14.B

15.C学号是学生表S的主键,课号是课程表C的主键,所以选课表SC

的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课

号,所以选择C项。

16.A

重载运算符的规则如F:①C++不允许用户自己定义新的运算符,只能

对已有的C++运算符进行重载;②C++不能重载的运算符只有5个;③

重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先

级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算

符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类

对象,即不允许参数全部是C++的标准类型。故本题答案为A。

17.D

Do【解析】对于两个结构体,b=a;表示将a的每一个元素都赋给

b,所以会输出a中的内蓉。

18.C(29)C)【解析】由主函数majn入手,定义TestClassl\r\n\r\n类的指

针对象P指向派生类TestClass2。因为基类和派生类中都有fun\r\n\r\n函

数,题目要求输出为2,就是基类对象访问派生类中fun函数。通\r\n\r\n

过虚函数与指向基类对象的指针变量的配合使用,就能方便调用同

\r\n\r\n名函数。所以这里将基类中的fun函数声明为virtual。并且当一

个成\r\n\r\n\r\n\r\n员函数被声明为虚函数后,其派生类中的同名函数自

动成为虚函数。

19.C解析算法的时间复杂度是用算法程序执行过程中所需要的基本运

算次数来衡量的。

20.B

选项B中,第一个参数是double型,第二个参数是int型,参数类型

不一致。

21.D

【答案】:D

【知识点】:栈和队列

【解析】:栈和队列都是线性结构,所以选项C错误;栈是一种先进

后出的线性表,故选项A错误;队列是一种先进先出的线性表,故选

项B错误,所以选D。

22.D解析:在C语言中,所有的函数都是平行的,即在定义函数时是

互相独立的,一个函数并不从属于另一个函数,即函数不能嵌套定义,

但可以互相调用,但不能调用main函数。注意:函数不能嵌套定义,

但可以嵌套调用,故选项A)、B)和C)中的描述都错误。

23.BWB。【解析】本题考核拷贝构造函数。上述程序中,拷贝构造函数

一共被调用了3次:第1次是在执行语句Datedate3(datel)时,用已经建

立的对象datel对正在建立的对象date3进行初始化;第2次是在调用

fun函数时,由于是传值调用,因此实参对象date3要对形参对象d进行

初始化;第3次是在执行fun函数中的返回语句returntemp;时,系统

初始化一个匿名对象时使用了拷贝构造函数。

\n

24.operator+(operator*(yz))operator+(operator*(y,z))解析:C++中用成员

函数重载x*y为/.operator*(y),用友元函数重载x*y为:operator*(x,

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

operator+(x,y)o

25.一对多一对多解析:实体集“项目主管”与实体集“项目”的联系属于

一对多的联系。

26.继承继承解析:类是面向对象语言中必备的程序语言结构,用来实

现抽象数据类型。类与类之间的继承关系实现了类之间的共享属性和操

作,一个类可以在另一个已定义的类的基础上定义,这样使该类型继承

了其超类的属性和方法,当然,也可以定义自己的属性和方法。

27.一对多(或1:N)一对多(或1:N)解析:两个文体集间的联系实际上

是实体集间的函数关系,这种函数关系可以有3种,即一对一(1;1)的

联系、一对多(1:N)或多对一(N:1)的联系和多对多(M:N)的联系。

28.〜MyClass()

29.32

30.加工加工解析:数据流图是从数据传递和加工的角度,来刻画数据

流从输入到输出的移动变换过程,其中的每一个加工对应一个处理模块。

31.A(aa)c(aaq+l)或c(aa+l)A(aa)。A(aa),c(aaq+l)或c(aa+l),A(aa)o解

析:题中要求用aa初始化基类A,用aa+1初始化类对象成员c,用的

初始化列表的形式,即A(aa),c(aa+l)或c(aa+l),A(aa)o

32.1616解析:解答本题的关键是要分析清楚表达式a+=(a=8)中,a的

值已经被赋为8,而不是0。

33.a[i-l]a[9-i]

34.x=2y=3x!=y

35.ACBEGFDACBEGFD解析:由于在前序遍历中首先访问根结点,因

此,前序序列中的第一个结点为二叉树的根结点,即D为二叉树的根结

点。又由于在中序遍历中访问根结点的次序为居中,而访问左于树上的

结点为居先,访问右子树上的结点为最后,因此,在中序序列中,以根

结点(D)为分界线,前面的子序列(ABC)一定在左子树中,后面的子序列

(EFG)一定在右于树中。同样的道理,对于已经划分出的每一个子序列

的所有结点中,位于前序序列最前面的一个结点为子树的根结点,而在

中序序列中位于该根结点前面的结点构成左子树上的结点子序列,位于

该根结点后面的结点构成右子树上的结点子序列。这个处理过程直到所

有子序列为空为止。

根据上述道理,该二叉树恢复的过程如下图所示;

根据后序遍历的方法,对该二叉树后序遍历的结果为ACBEGFDO

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

(2)应改为"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.⑴应改为“TC::TC”。

\n(2)应改为"voidTC::display”。

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

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

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

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

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

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

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

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

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

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

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

(2)应改为"voidTC::display”。

(3)应改为“TC::〜TC”。

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

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

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

为“TC::TC”,默认构造函数没有参数。由第2处“TC::display”后

的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错

误问题,display函数返回值为void,因此第2处的语句应改为

“voidTC::display”。由第3处的语句“TC::TC”可知,显然这里是

在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名

相同,并在前面加“〜”字符,用采与构造函数加以区别,因此第3处

的语句应改为“TC::〜TC”。

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

(2)应改为"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(…)”。

40.⑴应改为"TCobjl(l);

\n(2)应改为“Objl.SetNumber(lO);”。

\n(3)应改为“0bj2.SelNumber(lOO);"。

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

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

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

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

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

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

第3处=5561刖11收1'(100);”语句中的1<:为类,并不是对象,这里

应该使用定义的对象,即obj2,所以将语句修改为

“obj2.SetNumber(lOO);

41.(1)“staticintn=O''应改为"staticintn;"。

(2)“intCO::n;”应改为“intCO::n=0;

(3)“cout«c.n«endl;"应改为"cout«c->n«endl;"。

【解析】本题要在屏幕上输出两个字符,首先要静态变量初始化,第1

处应改为“staticintn;”,第2处要给n赋值,第3处输出时引用c的对

象,应改为"cout«c->n«endl;

42.(l)“voidmain”。

(2)“intm=0144;

(3)“intn=OX25;”或“intn===0x25;

【解析】本题主要考查了主函数定义及幕同进制之间的转换,包括十

进制到八进制,十进制到十六进制。主函数定义的定义形式为

“main”,函数名之后必须是一对括号,因此第1处应改为“voidmain”。

cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发

现变量的初值不正确,十进制的100对应八进制的144,卡进制的37

对应十六进制的25,因此2和3应分别改成“intm=0144;”,

“intn=0x25;”或“intn=0x25;

43.⑴应改为“ein.getline(str,120,?);”。

(2)应改为"while(str[i])"°

,,

(3)应改为“if(str[i]>=a&&str[i]<=2)0

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

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

个数,终止标志字符广,所以第1处改为“cin.getline(str,

120,?);第2处的“while(str)”语句应该是判断字符串str中的每一

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

为小写,若为小写,则转换。所以应该修改为“while(str[i])”。第3处的

“if(str[i]>=a)”语句是判断字符str用是否为小写字符,而现有的语句只

是判断字符是否大于a,但是小写字符应该是a到2,所以修改为

tc,,

if(str[i]>=a&&str[i]>=z)o

44.(1)应改为"usingnamespacestd;

(2)应改为"outl.open("1.txt",ios::binaryIios::app);"。

5,

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

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

对于C++中引入标准命名空间的格式,缺

温馨提示

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

最新文档

评论

0/150

提交评论