2021年河南省开封市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第1页
2021年河南省开封市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第2页
2021年河南省开封市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第3页
2021年河南省开封市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第4页
2021年河南省开封市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

2021年河南省开封市全国计算机等级考试

C++语言程序设计模拟考试(含答案)

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

一、1.选择题(10题)

1.下列有关数据库的描述,正确的是O

A.数据库是一个DBF文件B.数据库是一个关系C.数据库是一个结构

化的数据集合D.数据库是一组文件

2.有如下程序:#include<iostream>usingnamespacestd;classBase

{protected:inti;public:intj;};classDerived:publicBase{intm;public:int

n;};intmain(){Derivedd;d.i=0;//[1]d.j=0;//[2]d.m=0;//[3]d.n=0;//[4]retum

0;}其中主函数中有两个赋值语句有错,这两个错误的赋值语句是

A.[l]和[2]B.[l]和[3]C.[2]和[3]D.[2]和[4)

在C++中,实现封装性需借助于

A)枚举B)类

3.O数组D)函数

4.下列符号中,正确的C++标识符是

A.enumB.2bC.fbo-9D._32

5.下列叙述中正确的是

A.在面向对象的程序设计中,各个对象之间具有密切的联系

B.在面向对象的程序设计中,各个对象都是公用的

C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小

D.上述三种说法都不对

6.下列说法中错误的是()

A.公有继承时基类中的public成员在派生类中仍是public的

B.公有继承时基类中的private成员在派生类中仍public是的

C.私有继承时基类中的public成员在派生类中仍private是的

D.保护继承时基类中的public成员在派生类中仍protected是的

7.程序设计语言的基本成分是数据成分、运算成分、控制成分和()o

A.对象成分B.变量成分C.语句成分D.传输成分

8.下列运算符中不能在C++中重载的是()

A.?:B.+C.-D.<=

9.有如下函数模板定义:template<classt>Tfunc(Tx,Ty){return

x*x+y*y;}

在下列对func的调用中,错误的是

A.func(3,5);

B.func(3.0,5.5);

C.fiinc(3,5.5);

D.func<int>(3,5.5)

10.关于类和对象描述错误的是()o

A.对象(Object)是现实世界中的客观事物,对象具有确定的属性

B.类是具有相同属性和行为的一组对象的集合

C.对象是类的抽象,类是对象的实例

D.类是对象的抽象,对象是类的实例

二、单选题(13题)

11.一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何

派生类都必须定义自己的版本,此虚函数又称为

A.虚析构函数B.虚构造函数C.纯虚函数D.静态成员函数

12.关于continue语句叙述不正确的是()。

A.continue语句用于循环体中,结束循环

B.continue语句用于循环体中,它使执行流跳出循环体中尚未执行的语

句,并进行下一循环判断

C.continue可以用于if语句中

D.continue语句不能代替break语句

13.以下程序段输出的结果是()。charstr[]="BCDE",*ptr=str;cout<<

*(ptr+4)<<endl;

A.OB.69C.字符E的地址D.一个空字符

14.对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次

数为()o

A.log2nB.n/2C.nD.n+1

15.下面关于虚函数的描述中正确的是()。

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

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

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

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

16.一个函数为voidf(int,charch-a'),另一■"函数为voidf(int),则

它们()o

A.不能在同一程序中定义

B.可以在同一程序中定义并可重载

C.可以在同一程序中定义,但不可以重载

D.以上三种说法均不正确

17.下列虚基类的声明中正确的是()

A.classvirtualBrpublicA

B.virtualclassB:publicA

C.classB:publicAvirtual

D.classB:virtualpublicA

18.设有下列二叉树:对此二叉树前序遍历的

结果为()

A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXPD.ATBZXCPY

19眉泡排序在最坏情况下的比较次数是

A.n(n+l)/2

B.nlog2nC.n(n-l)/2D.n/2

20.下列关于函数模板的描述中,错误的是o

A.从模板实参表和从模板函数实参表获得信息矛盾时,以模板实参的信

息为准

B.对于常规参数所对应的模板实参,任何情况下都不能省略

C.虚拟类型参数没有出现在模板函数的形参表中时,不能省略模板实参

D.模板参数表不能为空

21.数据库应用系统中的核心问题是o

A.数据库设计B.数据库系统设计C.数据库维护D.数据库管理员培训

22.软件开发离不开系统环境资源的支持,其中必要的测试数据属于

A.硬件资源B.通信资源C.支持软件D.辅助资源

23.在数据管理技术发展的3个阶段中,数据共享最好的是()。

A.人工管理阶段B.文件系统阶段C.数据库系统阶段D.3个阶段相同

三、2.填空题(12题)

24.如果在类模板的定义中有一个静态数据成员,则在程序运行中会产

生静态变量。

25.面向对象的模型中,最基本的概念是对象和【】。

26.程序中有如下语句:

for(inti=O;i<5;i++)cout<<*(p+i)<<;

能够依次输出int型一维数组DATA的前5个元素。由此可知,变量p

的定义及初始化语句是O

27.数据模型分为格式化模型与非格式化模型,层次模型与网状模型属

于【】°

28.有如下程序:

#include<iostream>

usingnamespacestd;

classTestClass1

(

public:

TestClass1(){cout<<"A";}

};

classTestClass2<public:TestClass2(){cout<<"B";}

};

classTestClass3;publicTestClass1{

TestClass2b;

public:TestClass3(){cout<<"C";}

intmain()<TestClass3obj;retum0;}

该程序执行后的输出结果是o

29.请在下列程序中的横线处填写正确的语句。

#include<iostream>

usingnamespacestd;

classBase{

public:

voidfun(){cout<<"Basefbn”<<endl;}

);

classDerivde:publicBase{

public:

voidfun(){

〃调用基类的函数fim()

cout<<"Derivedfun^^<<endl;

30.有以下程序:

#included<iostream>

usingnamespacestd;

classBase

(

public:

Base()

(

x=0;

intx;

};

classDerived1:virtualpublicBase

i

public:

Derived1()

(

x=10;

)

);

classDerived!:vii1ualpublicBase

(

public:

Derived2()

(

x=20;

}

};

classDerived:publicDerivedI,protectedDerived2

(};

intmain()

(

Derivedobj;

cout<<obj.x<<endI;

return0;

}

该程序运行后的输出结果是o

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

32.下面是“二维向量”vector2D的定义,其中作为成员函数重载的运算

符“+”的功能是将两向量的分量x和y对应相加,然后返回作为相加结

果的新对象;请填空补充完整。

classvector2D{

doublex;//x分量

doubley;//y分量

public:

vector2D(doublex0=0,doubley0=0):x(xO),y(yO){}

voidshow(cout<<'('<<','<<y<<')';}

vector2Doperator+(vector2D);

);

[]operator+(vector2DA)

{

returnvector2D([]);

}

33.类模板的使用实际上是将类模板实例化成一个具体的【】。

34.下列程序编译错误,因为add函数返回值是一个引用,故对return

后返回值的要求是【]o

#include<iostream,h>

int&add(intx,inty)

(

returnx+y;

voidmain()

inti=3,j=19;

cout<<(add(i,j)+=20)<<end1;

35.在面向对象的程序设计中,类描述的是具有相似性质的一组【】。

四、程序改错题(10题)

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

)

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

catch(chars)

(

cout«s«endl;

)

try

(

throw((int)0);

}

catch

cout«i«endl;

)

try

(

throw(O);

throw("error");

)

I!********error********

catch

(

cout«"ERROR"«endl;

)

returnO;

)

37.使用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********error********

TCobjl;

objl.Print;

TCobj2(3);

I!********erroi*********

objl.number=10;

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

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

Constructor,i=0,

Destructor

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

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

TC:TC

{

cout«"Constructor"«","

i=0;

)

TC:display

tout«ni=n«i«n,n«endl;

f

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

TC:TC

(

COUI«"Destructor"«endl:

}

voidmain

(

TCa;

a.display;

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

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

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

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

构,错误的语句在

II******error******-[卜j。

试题程序:

#include<iostream>

#include<fstream>

********error********

usingstd;

voidWriteFile(char*s)

(

ofstreamout1;

Ii********enor********

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

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

(

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

outl.puts(s[i]);

)

outl.close;

)

voidClearFile

(

ofstreamout1;

outl.open("l.txt");

outl.close;

)

intmain

(

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

!1********ej*j*0j*********

cin.getline(str,120);

1I********ej*j*0j*********

while(str)

I!********eiror********

if(str[i])=a)

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

i++;

cout«str«endl;

return;

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

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

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

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

构,错误的语句在

1I******error******白勺卜「白।

试题程序:

#include<iostream>

#include<fstream>

I!********error********

usingstd;

voidWriteFile(char*s)

(

ofstreamout1;

1I********error********

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

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

!1****************

outl.puts(s[i]);

outl.close;

voidClearFile

ofstreamout1;

outl.open("l.txt");

outl.close;

)

intmain

(

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

return0;

}

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

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

100

37

32

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

可。

试题程序:

#include<iostream.h>

voidmain

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

intm=0142:

!i******enor******

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

try

{

throw("error");

)

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

catch(chars)

(

cout«s«endl;

)

try

(

throw((int)0);

)

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

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

)

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

catch

(

cout«"ERROR"«endl;

)

returnO;

)

44.使用VC++6.0打开考生文件夹下的源程序文件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

(

!i********e[£*or********

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

Ii********error*%()******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

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

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

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

到屏幕中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

/!********error********

cin.getline(str,120);

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

while(str)

(

!i********error********

if(str[i])=a)

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

i++;

}

cout«str«endl;

return;

五、综合应用题(2题)

46.请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件

proj3,此工程中包含一个源程序文件proj3.cpp,补充编制C++程序

proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存

放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并

输出到文件out.dat中。文件in.dat的长度不大于1000字节。

要求:

补充编制的内容写在“//**********''与''//**********“两行之间。实现

将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得

修改程序的其他部分。

注意:程序最后已将结果输出到文件Out.dat中,输出函数

writeToFile已经给出并且调用。

//proj3.cpp

#include<iostream>

#include<fstream>

#include<catting>

usingnamespacestd;

classdoc

{

private:

char*sir;//文本字符串首地址

intlength;〃文本字符个数

public:

〃构造函数,读取文件内容,用于初始化新对象,filename是文件名字

符串首地址

doc(char*filename);

voidreverse;〃将字符序列反转

doc;

voidwriteToFile(char*filename);

};

doc::doc(char}filename)

ifstreammyFile(filename);

intlen=1001,tmp;

atr=newcharf1en];

length=0;

while((trap=myFile.get)!=EOF)

str[1ength++]=trap;

str[length]=<\0,;

myFile.close;

}

voiddoc::reverse{

//将数组atr中的length个字符中的第一个字符与最后一个字符交换,

第二个字符与倒数第二个

〃字符交换

〃*************666*************

)

doc::~doe

delete[]str;

voiddoc::writeToFile(char*filename)

OfstreamoutFile(filename);

outFile«str;

outFile.close;

)

voidmain

(

docmyDoc(,,in.dat");

myDoc.reveme;

myDoc.writeToFile(,,out.dat");

)

47.使用VC++6.0打开源程序文件3.cppo其中类TC用于把文件

输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的

大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将

in.txt文件中的内容输出到

屏幕,并且将文件按照以上方式分割,存于文件outl.txt和out2.txt

中。

其中定义的类并不完整,按要求完成下列操作,将类的定义补充完

整。

(1)从输入文件中获得一个字符,并判断是否到文件结

尾,如果到文件结尾,则退出循环。请在注释1后添加适当的语句。

⑵把获得的输入文件的内容存储到bur中,并且用len

记录下文件的长度。请在注释2后添加适当的语句。

(3)将输入文件的后一半内容存储在第二个文件中,请

在注释3后添加适当的语句。

(4)使用文件流对象打开输入文件in.txt,请在注释4

后添加适当的语句。

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

改其他的程序代码。

试题程序:

#include<iostream.h>

#include<fstream.h>

#include<stdlib.h)

classTC

{

public:

TC(char*fileName)

(

len=O;

fstreaminfile;

infile.open(fileName,ios::in);

charch;

while

cout«ch;

)

infile,close;

)

voidsplit

{

fstreamoutfilel;

fstreamoutfile2;

outfilel.open("outl.txt",ios::out);

outfile2.open("out2.txt",ios::out);

inti=0:

for(i=0;i<len/2;i++)

(

outfilel«buf[i];

)

do

{

)

while(i!=len);

outfilel.close;

outfile2.close;

)

prwate:

intlen;

charbuf[1024];

);

voidmain

//********4********

TCobj;

obj.split;

return;

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

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

序文件testl9_3.cpp,其中定义了用于表示向量的类vector,但类vector

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

(1)补充类vector的构造函数,该函数有参数x和y,它们都是int型的

数据,默认值都为0。请使用参数列表的形式分别将类的数据成员a和

b分别初始化为参数x和y的值。请在注释“〃**1**”之后添加适当的语

句。

(2)完成类vector的成员函数input(intx,inty)的定义,将int型的参数x

和y分别赋值给数据成员a和b,请在注释“〃**2**”之后添加适当的语

句。

(3)完成类vector的友元函数frienddoubleMultiply(vector&x,vector&y)

的定义,先定义double型的临时变量c,然后将参数对象x和对象y的

数据成员a与b分别相乘再相加后赋值给c,最后返回c的值,将请在

注释“〃**3**,,之后添加适当的语句。输出结果如下:

(10,20)

(2,3)

80

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

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

#include<iostream.h>

classvector

{

inta;

intb;

public:

〃**I**

voidinput(intx,inty)

(

}

voidoutput()

cout<<'('<<a<<<<b<<")"<<endl;

}

frienddoubleMultiply(vector&x,vector&y);

}

doubleMultiply(vector&x,vector&y)

(

c=x.a*y.a+x.b*y.b;

returnc;

voidmain()

(

vectorx(10,20),y;

doubled;

y.input(2,3);

d=Multiply(x,y);

x.output();

y.output();

cout<<d<<end1;

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

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

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

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

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

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

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

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

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

⑶完成二维坐标类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);

virtualvoidDisplay()const;

);

〃**4**

voidThreeDCoord::Display()const

(

cout<<'[,<<X<<","<<y<<","<<Z<<']'<<

endl;

}

voidmain()

i

Coordinatec(l,2);

ThreeDCoordt(3,4,5);

c.Display();

t.Display();

参考答案

LC解析:数据库(Database,简称DB)是数据的集合,它具有统一的结

构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各

个应用程序所共享。数据库中的数据具有“集成”、“共事”之特点。

2.B解析:i是Derived的保护成员,m是私有成员。

3.B解析:类的三大特性是:封装、继承、多态。C++中实现信息的封装

主要靠类的封装特性来实现。

4.D

解析:本题考查C++语言中的标识符的定义。标识符不是一个随意的

字符序列,定义标识符时一般应注意如下几点:第一个字符必须是字

母或下划线,中间不能有空格;在第一个字母后,可以是任意字母、

下划线和数字组成的字符序列:标识符的长度是任意的,但特定的编

译系统能够识别的标识符长度是有限的。一般不要超过\u300031个字

符;标识符中大小写字母是有区别的;用户定义标识符时,不要采用

系统的保留字。选项A是保留字:选项B的第一个字符是数字:选项

C中的」字符不合法。故应该选择D。

5.C解析:在面向对象的程序设计中,对象是面向对象的软件的基本模

块,它是由数据及可以对这些数据施加的操作所组成的统一体,而且对

象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无

关的操作。从模块的独立性考虑,对象内部各种元素彼此结合得很紧密,

内聚性强。由于完成对象功能所需要的元素(数据和方法)基本上都被封

装在对象内部,它与外界的联系自然就比较少,所以,对象之间的耦合

通常比较松。所以,选项A与B错误,选项C正确。

6.B

7.D解析:程序设计语言是用于书写计算机程序的语言,其基本成分有

以下4种,数据成分:用来描述程序中的数据。运算成分:描述程序中所

需的运算。控制成分:用来构造程序的逻辑控制结构。传输成分:定义数

据传输成分,如输入/输出语言。

8.A解析:本题考查运算符的重载。Ct+中,“二、*、、?:”这4个运算

符不能重载。

9.C解析:在C的调用过程中,hmc(3,5.5)由于参数的类型不一致,不能

判别两个参数的类型,发生错误。

lO.CCo【解析】C++中,类是用户自定义的一种数据类型,对象是类

的实例,类定义了属于该类的所有对象的共同特性。一个类作为一种数

据类型,它可以定义多个对象。

11.C解析:本题考核纯虚函数的定义。纯虚函数是一种特殊的虚函数,

纯虚函数是在虚函数的后面加上“=0”,表示该虚函数无函数体,并非赋

值运算。纯虚函数的一般格式如下:

virtual〈类型><函数名>(<参数表>尸0;

在很多情况下,在基类中不能对虚函数给出有意义的实现,而把它说明

为纯虚函数,它的实现留给该基类的派生类去做。

题目中描述的是纯虚函数的特点。

12.A解析:continue是跳出了本次循环中尚未执行的语句,重新执行循

环,但没有终止循环。注意:注意break,continue和goto语句的用法

和区别。

13.D解析:*(p+4)即数组元素str[4]的值,而str[4]中存放的是字符,\\0:

所以输出的是一个空字符。

14.C本题考查的是顺序查找。在进行顺序查找过程中,如果线性表中

的第一个元素就是被查找元素,则只需做一次比较就查找成功,查找效

率最高;但如果被查找的元素是线性表中的最后一个元素,或者被查找

的元素根本就不在线性表中,则为了查找这个元素需要与线性表中所

有的元素进行比较,这是顺序查找的最坏情况。所以对长度为n的线

性表进行顺序查找,在最坏情况下需要比较n次。故本题答案为Co

15.DD。【解析】本题考查虚函数的概念。虚函数是非静态的成员函数,

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

须是类的成员函数,虚函数声明只能出现在类定义的函数原型声明中,

而不能在成员函数的函数体实现的地方,一般要求基类中说明了虚函数

后,派生类说明的虚函数应该与基类中虚函数的参数个数相等,对应参

数的类型相同。如果不相同,则将派生类虚函数的参数类型强制转换为

基类中虚函数的参数类型。

16.B解析:题目中的两个函数参数个数不同,因此可以在同一程序中定

义为重载函数。所以,选项B)叙述正确。

17.D解析:本题考核虚基类的声明方式。虚基类说明格式如下:

Virtual<继承方式><基类名>

其中,Virtual是虚基类的关键词。虚基类的说明是用在定义派生类时,

写在派生类名的后面。即:

class<派生类名>:Virtual<继承方式><基类名>。

18.B解析:所谓二叉树的前序遍历(DLR)是指在访问根结点、遍历左子

树与遍历右子树这3者中,首先访问根结点,然后遍历左子树,最后遍

历右子树,并且,在遍历左右子树时,上述规则同样适用,即“根-左-右”。

故该二叉树的前序遍历结果为“ATBZXCYP"。对于本题,若使用后序遍

历和中序遍历的结果分别为“ZBTYCPXA”和“TZBACYXP”。

19.C冒泡排序的基本思想是:将相邻的两个元素进行比较,如果反序,

则交换;对于一个待排序的序列,经一趟排序后,最大值的元素移动到

最后的位置,其他值较大的元素也向最终位置移动,此过程称为一趟冒

泡。对于有n个数据的序列,共需n-1趟排序,第i趟对从1到n-

i个数据进行比较、交换。冒泡排序的最坏情况是待排序序列逆序,第

1趟比较n-1次,第2趟比较n-2次。依此类推,最后趟比较1次,

一共进行n-1趟排序。因此,冒泡排序在最坏情况下的比较次数是(n-

l)+(n-2)+...+l,结果为n(n-l)/2o本题的正确答案是选项C。

20.D

本题主要考查了函数模版。在调用一个模板函数时,编译系统需要足

够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不

同的渠道获得这样的信息:从模板实参表(用<和>括起来的参数表)或

从模板函数实参表(用(和)括起来的参数表),模板实参的信息优先于函

数实参的信息,如果从后者获得的信息已经能够判定其中部分或全部

虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的

若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表

中的实参都被省略了,则空表<>也可以不要。反之,对于某个模板实

参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或

者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,

则其自身还是不能省略。

21.A数据库应用系统中的核心问题是数据库的设计。故答案为A选项。

22.D

软件开发离不开系统环境资源的支持,其中主要的资源有硬件资源、

通信资源、辅助资源等。

(1)硬件资源是指组成计算机及相关应用所需要的硬件,它是软件开

发必不可少的资源,因为无论什么样的软件工具都需要在硬件上完成

任务,它是其他资源的基础资源。

(2)通信资源是指为软件开发提供通信支撑的资源,它与测试数据无

关。

(3)支持软件是指为软件开发提供操作平台的软件,如常用的面向对

象开发的Rose软件,它主要是软件开发的工具。

通过对上述分析的总结,可以知道本题的正确答案选D。

23.C解析:人工管理阶段是在计算机出现的初期,主要用于科学计算,

没有大容量的存储设备。处理方式只能是批处理,数据不共享,不同程

序问不能交换数据。文件系统阶段把有关的数据组织成一种文件,这种

数据文件可以脱离程序而独立存在,由一个专门的文件管理系统实施统

一管理;但是,数据文件仍高度依赖于其对应的程序,不能被多个程序

所通用。数据库系统阶段对所有的数据实行统一规划管理,形成了一个

数据中心,构成了一个数据仓库;数据库中的数据能够满足所有用户的

不同要求,供不同用户共享;数据共享性显著增强。

24.多个多个

25.类类解析:面向对象模型中,最基个的概念是对象和类,,对象是现

实世界中实体的模型化;将属性集和方法集相同的所有对象组合在一起,

可以构成一个类。

26.int*p=DATAint*p=DATA解析:此题考查的是指针变量的定义及初

始化。题目中要求输出int型数组DATA的前五个元素,由表达式*(p+0)

和*(p+4)可知变量p是一个指向DATA首地址的血型指针,故它的定

义及初始化语句是int*p=DATA。

27.格式化模型格式化模型解析层次模型与网状模型属于格式化模型。

28.ABCABC解析:主函数中定义TestClass3对象obj,其中TestClass3

继承于TestClass1,先初始化基类构造函数,所以输出A。然后在

TestClass3中定义TestClass2对象b,输出B,最后派生类的构造函数输

出Co所以答案为ABC0

29.Base::fun()oBase::fun()o解析:本题考查的是派生类对基类成

员的访问。本题中派生类Derived覆盖了基类Base中的如果需

要调用基类中的fun(),则需要使用域运算符“::故应填写Base::

fun()0

30.2020解析:本题考核虚基类。本题中,虽然Derived1和Derived2

都是由共同的基类x派生而来的,但由于引入虚基类,使得它们分别对

应基类的不同副本。这时数据成员x只存在一份拷贝,不论在类Derired

1中修改,还是在类Derived2中修改,都是直接对这唯一拷贝进行操

作。本题程序执行语句“Derivedobj;"时,就会先调用虚基类Base的构

造函数,使得x=0,然后执行类Derived1的构造函数使得x=10,再执

行类Derived2的构造函数,使得x=20。最后输出x的值为20o

31.32

32.vector2D::x+a.xy+a.yvector2D::\r\nx+a.x,y+a.y解析:本题考核运

算符的重载。程序将运算符“+”重载为类vector2D的成员函数,所以在

函数定义处要加上类域控制,即vector2D::。运算符重载函数返回的

是两个分量分别相加的值。

33.类类解析:本题考查的是类模板的使用方式,就是把类模板的一般

化定义实例化为一个真正的类。

34.不能是表达式不能是表达式解析:引用是变量的别名,其实质是变

量的地址。return在返回值时,如果其后为表达式,则系统为该表达式

生成一个临时变量用于存放该表达式的结果,函数执行完毕之后该变量

被系统回收,因此,返回的该变量的地址对调用函数来说已经没有意义

了。

35.对象对象解析:将属性、操作相似的对象归为类,也就是说,类是

具有共同属性、共同方法的对象的集合。

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)应改为"TCobjl⑴;

\n⑵应改为“Objl.SetNumber(lO);

5,

\n(3)应改为“0bj2.SelNumber(100);o

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

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

出结果两1,所以补全参数1,即第1处的“TCobjl⑴;”。第2处处的

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

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

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

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

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

“obj2.SetNumber(lOO);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(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]);”。

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

\n⑵应改为"while(str[i])"°

u,,

\n(3)应改为if(str[i]>=a&&str[i]<=2)o

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

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

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

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

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

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

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

但是小写字符应该是a到2,所以修改为“if(str[i]>=a&&str[i]>=z)”。

41.⑴应改为"usingnamespacestd;"。

\n(2)应改为"outl.openfl.txt',ios::binary|ios::app);

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

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

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

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

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

app);”语句缺少类ios,即第2处的语句修改为“outl.open。.txt'ios::

binary|ios::app);第3个标识应该用流成员函数put输出字符,所

以第3处的语句修改为“outl.put(s[i]);

tt,,

42.(l)voidmaino

(2)“intm=0144;”。

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

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

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

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

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

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

对应十六进制的25,因止匕2和3应分另IJ改成“intm=0144;”,

“intn=0x25;”或“intn=0><25;

43.⑴应改为“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子句中没有指定异常信息的类

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

改为“ca

温馨提示

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

评论

0/150

提交评论