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

下载本文档

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

文档简介

2021年福建省福州市全国计算机等级考试

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

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

一、1.选择题(10题)

1.有下列程序:#include<iostream>usingnamespacestd;class

TestClass{private;charc;public:TestClass(charn):c(n){}-TeStClass()

{cout<<c}};classTestClasskpublicTestClass{

A.xyB.yxC.xD.y

2.内部静态变量的作用域是()。

A.定义该静态变量的文件外部B.定义该静态变量的文件内部C.定义

该静态变量的函数外部D.定义该静态变量的函数内部

3.下面程序的运行结果为()。#include<iostream.h>voidmain(){char

a='3':switch(a){case'3':cout<<"3';case'2':cout<<"2";break;

default:cout<<"1";}}

A.3B,321C.31D.32

4.下列叙述中正确的是()o

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

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

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

D.上述3种说法都不对

5.假定MyClass为一个类,则执行MyClassa,b(2),*p;语句时,自动

调用该类构造函数()次。

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

6.下面是关于派生类声明的开始部分,其中正确的是

A.classvirtualB:publicA

B.virtualclassB:publicA

C.classB:publicAvirtual

D.classB:virtualpublicA

7.下列是关于派生类声明的开始部分,其中正确的是()。

A.classvirtualB:publicA

B.virtualclassB:publicA

C.classB:publicAvirtual

D.classB:virtualpublicA

8.有如下程序:#include<iostream.h>#include<iomanip.h>using

namespacestd;classCSum{intx,y;public:CSum(intxO,int

yO):x(xO),y(yO){}friendostream&operator<<(ostream&os,constCSum&

xa){os<<setw(5)<<xa.x+xa.y;returnos;}};intmain(){CSumy(3,5);

cout<<setfill('*')<<8;cout<<y;return0;}执行上面程序的输出是

A.88B.****88c.****8****8D.8****8

9.有如下函数模板声明:template<typenameT>TMax(Ta,Tb){return(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)

10.下列关于构造函数说法不正确的是

A.构造函数必须与类同名B.构造函数可以省略不写C.构造函数必须

有返回值D.在构造函数中可以对类中的成员进行初始化

二、单选题(13题)

11.下列枚举类型的定义中,包含枚举值3的是

A.enumtest{RED,YELLOW,BLUE,BLACK);

B.enumtest{RED,YELLOW=4,BLUE,BLACK);

C.enumtest{RED=-1,YELLOW,BLUE,BLACK};

D.enumtest{RED,YELLOW=6,BLUE,BLACK};

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

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

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

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

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

13.下列关于运算符重载的描述中,错误的是()。

A.::运算符不能重载

B.类型转换运算符只能作为成员函数重载

C.将运算符作为非成员函数重载时必须定义为友元

D.重载口运算符应完成“下标访问”操作

14.有如下类定义:

classFoo

(

public:

Foo(intv):value(v){}//®

〜Foo(){}//②

private:

Foo(){}//③

intvalue=O;//④

);

其中存在语法错误的行是()。

A.①B.②C.③D.@

15.设函数中有整型变量n,为保证其在未赋初值的情况下初值为0,应

选择的存储类别是()。

A.A.autoB.xegisterC.staticD.autO或register

16.下列关于虚函数的描述中,正确的是()。

A.虚函数是一个static类型的成员函数

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

C.基类中采用virtual说明一个虚函数后,派生类中定义相同原型的函数

时可不必加virtual说明

D.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数

或类型

17.已知:intn=l;在下面定义引用的语句中,正确的是()。

A.intx=&n;

B.int&x=n;

C.int&x;

D.int&x=&n;

18.设栈S的初始状态为空。元素a,b,c,d,e,f依次通过栈S,若

出栈的顺序为b,d,c,f,e,a,则栈S的容量至少应该为

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

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

结果为()

A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXPD.ATBZXCPY

20.栈通常采用的两种存储结构是

A.A.线性存储结构和链表存储结构

B.散列方式和索引方式

C.链表存储结构和数组

D.线性存储结构和非线性存储结构

21.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。

下列属于应用软件的是()。

A.编译程序B.操作系统C.教务管理系统D.汇编程序

22.有以下程序:

#include<iostream>

usingnamespacestd;

#defineP13.14

classPoint

{private:

intX,y;

public:

Point(inta,intb)

{x=a:

y=b;}

intgetx()

{retumX;}

intgety()

{returny;}};

classCircle:publicPoint

{private:

intr;

public:

Circle(inta,intb,intc):Point(a,b)

{r=C;}

intgetr()

{returnr;}

doublearea()

{retumPI*r*r;}};

intmain()

(Circled(5,7,10);

cout«c1.area()«endl;

returnO;}

程序执行后的输出结果是()oA.314B.157C.78.5D.153.86

23.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。

下面属于应用软件的是_________O

A.编译程序B.操作系统C.教务管理系统D.汇编程序

三、2.填空题(12题)

24.若有:

inti=1000;

int*ip=&i;

void*VP;

vp=ip;

其中,vp=ip的含义是

25.设有二维数组inta[10][20];,则的地址可由首元素a⑼⑼的地

址来表达,由此可得访问数组元素a[i]皿的表达式为【】。

26.在长度为n的有序线性表中进行二分查找,最坏的情况下需要的比

较次数为【】。

27.通过使用new和delete两个运算符进行的分配为【】存储分配。

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

29.若a=12,b=14,c=0,则表达式“((y=(a>B)?a:B)>C)?y:c”的值为

[]o

30.cerr与cout的差别在于:cerr是____重定向的,cerr不能被缓冲,

它的输出直接传达到标准输出设备上。

31.若有定义:doublea[3][5];那么数组a的最后一个元素是【】。

32.软件工程研究的内容主要包括:[]技术和软件工程管理。

33.在一个函数的定义或声明前加上关键字【】时,该函数就声明为内

联函数。

34.数据库恢复是将数据库从状态恢复到某一已知的正确状态。

35.若Dl={al,a2,a3},D2={bl,b2,b3},则DlxD2集合中共有个

元组。

四、程序改错题(10题)

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

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

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

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

构,错误的语句在

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

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

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

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

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

********ex*x*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;

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

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

为:

sizeof(Sl)=5

sizeof(s2)=10

sizeof(s3)=l

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

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

⑴不能删除assert()语句。

⑵只能修改后面的数字。

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

试题程序:

#include<iostream.h>

#include<assert.h>

voidmain()

(

char*sl="abc":

1I********ep^or********

assert(sizeof(sl)==3):

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

chars2[10]="ab":

1I********ep^or********

assert(sizeof(s2)==2);

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

chars3=23:

1I********ep^or********

assert(sizeof(s3)==4);

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

return;

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

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

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

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

构,错误的语句在

/I******en^or******白勺­।日j。

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

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

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

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

//********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;

)

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

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

number=l

number=10

number=100

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

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

试题程序:

#include<iostream.h>

classTC

public:

TC(inti)

(

number=i;

)

voidSetNumber(intm)

(

number=m;

)

intGetNumberconst

(

returnnumber;

)

voidPrintconst

(

cout«"number="«number«endl;

)

private:

intnumber;

voidmain

1I********ep^or********

TCobjl;

objl.Print;

TCobj2(3);

1I********ep^or********

objl.number=10;

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

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

确。

程序输出:

8

8

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

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

试题程序:

#include(iostream.h>

classCO

public:

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

staticintn=O:

CO

n++:

CO

n—:

}:

/********ej*poj*********j

intCO::n;

voidmain

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

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

eout«C.n«endl;

cout«C0::n«endl;

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

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

100

37

32

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

可。

试题程序:

#include<iostream.h>

//******ep^or******

voidmain

(

//******ej*por******

intm=0142:

//******ep^or******

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

/j********epj'or********

catch(chars)

(

cout«s«endl;

try

(

throw((int)0);

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

catch

(

cout«i«endl;

}

try

(

throw(O);

throw("error");

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

catch

cout«"ERROR"«endl;

returnO;

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

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

Constructor,i=0,

Destructor

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

可。

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

〜TC;

);

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

TC:TC

(

cout«"Constructor"«",";

i=0;

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

TC:display

(

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

)

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

TC:TC

(

COUI«"Destructor"«endl:

)

voidmain

(

TCa;

a.display;

)

44.使用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

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

I/********ej*j*0r*^^o******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«''Enterastringendwith?."«endl;

I!********ej*por********

cin.getline(str,120);

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

while(str)

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

if(str[i])=a)

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

i++;

}

cout«str«endl;

return;

)

五、综合应用题(2题)

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

proj3,其中声明的DataList类,是一个用于表示数据表的类。DataList

的重载运算符函数Operator+,其功能是求当前数据表与另一个相同长

度的数据表之和;即它返回一个数据表,其每个元素等于相应两个数

据表对应元素之和。请编写这个operator+函数。程序的正确输出应该

是:

两个数据表:1,2,3,4,5,63,4,5,6,7,8两个数据表之

和:

4,6,8,10,12,14要求:

补充编制的内容写在“〃********333********”与

“〃********666********”之间,不得修改程序

的其他部分。

注意:程序最后将结果输出到文件。ut.dat中。输出函数writeToFile

已经编译为。bj文件,并且在本程序中调用。

//DataList.h

#inClude<iostream>usingnamespaCestd;

ClaSSDataList{〃数据表类intfen;

double*d;public:

DataList(intlen,doubledata[]=NULL);DataList(DataList&data);

intlengthConst{returnlen;}

doublegetElement(inti)Consttreturnd[i];}

DataListoperator+(ConstDataList&list)Const;〃两个数据表求和void

showConst;//显示数据表

);

voidwriteToFile(Char$,ConstDataList&);//main.Cpp

#inClude,,DataList.h"

DataList::DataList(intlen,doubledata[]):len(ien){d=new

double[len];

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

d(^)i=(data==NULL?0.0:data[i]);

)

DataList::DataList(DataList&data):len(data.len){d=new

double[len];

for(inti=0;i<len;i++)d[i]=data.d[i];

DataListDataList::0perator+(Con8tDataList&list,)Const{〃两个数据

表求和double*dd=newdouble[list.lensth];

I/********333********

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

returnDataList(list.length,dd);}

voidDataList::showConst{〃显示数据表fr(intoi=0;i<len-1;i++)

eout«d[i]«,\";

Cout«d[len-l]«endl;

intmain{

doublesl[]={L2,3,4,5,6);

doubles2[]={3,4,5,6,7,8);

DataListlist1(6,si),list2(6,s2);〃定义两个数据表对象eout<<”两个

数据表:“<<endl:

listl.show:list2.show;eout«endl<<”两个数据表之

和:,,«endl:

(listl+list2).show;

writeToFile(,,,Slistl+list2);return0:

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

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

C3

C2

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

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

适当的语句。

⑵类Cl私有虚继承类CO,请在注释2后添加适当的语句o

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

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

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

改其他的程序代码。

试题程序:

#include(iostream.h)

classCO

);

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

classCl:

public:

voidprint

cout<",,Cl"<<endl;

);

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

classC2:

public:

voidprint

cout<<"C2"<<endl;

);

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

classC3:

(

public:

voidprint

(

cout<<"C3"<<endl;

)

);

voidmain

(

C3Obj3;

C20bj2;

obj3.print;

obj2.print;

return;

}

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

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

testll_3.cpp,其中定义了类CPosition,但该类的定义都并不完整。请按

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

(1)在类定义外完成重载的两个构造函数CPosition。和CPosition(double

dx,doubledy),其中前者为不带参数的构造函数,使CPosition对象的

默认值为x=0,y=0,后者为带参数的构造函数,把数据成员x和y分

别初始化为参数dx和dy的值。请在注释“//**1**”之后添加适当的语句。

(2)在类体中添加函数move(doubleax,doubleay)的定义,使得点的坐标

x和y分别移动ax和ay个单位,请在注释“〃**2**”之后添加适当的语

句。

(3)完成函数doubledistance(doublebx,doubleby)的定义,该函数返回

*this和点(bx,by)的距离,请在注释“〃**3**”之后添加适当的语句。

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

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

#include<iostream,h>

#include<math.h>

classCPosition

(

public:

CPosition();

CPosition(doubledx,doubledy);

doublegetx();

doublegety();

〃**2**

doubledistance(doublebx,doubleby);

private:

doublex;

doubley;

II**]**

x=0;y=0;

)

CPosition::CPosition(doubledx,doubledy)

(

x=dx;y=dy;

)

doubleCPosition::getx()

(

returnx;

)

doubleCPosition::gety()

(

returny;

)

doubleCPosition::distance(doublebx,doubleby)

**3**

voidmain()

(

doublea,b;

cout<<"Inputx,ypositionofapoint:";

cin>>a>>b;

CPositionpsA(a,b);

cout<<"Inputx,ypositionofanotherpoint:

cin>>a>>b;

cout<<"Thedistanceis"<<psA.distance(a,b)<<endl;

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

test36_3.cpp,其中定义了类CRectangle,但该类的定义并不完整。请按

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

⑴定义类CRectangle的数据成员width和height,它们都是int型的数

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

(2)添加类CRectangle的友元函数duplicate。的声明,其返回值类型和参

数类型均为Crectangle的,请在注释“〃**2**”之后添加适当的语句。

(3)完成类Crectangle的成员函数set_values的定义,把传入的参数a和

b分别赋值为数据成员width和height,请在注释“〃**3**”之后添加适

当的语句。

(4)完成派生类Crectangle的友元函数duplicate的定义,把函数中的临时

对象rectres的值返回主函数,请在注释“〃**4**”之后添加适当的语句。

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

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

#include<iostream,h>

classCRectangle

(-

〃**]**

public:

voidset_values(int,int);

intarea(void){return(width*height);}

〃**2**

);

voidCRectangle::set_values(inta,intb)

H**3**

CRectangleduplicate(CRectanglerectparam)

(-

CRectanglerectres;

rectres.width=rectparam.width*2;

rectres.height=rectparam.height*2;

II**4**

)

voidmain()

(

CRectanglerect,rectb;

rect.set_values(2,3);

rectb-duplicate(rect);

cout<<rectb.area()<<endl;

参考答案

LA解析:题目中程序TestClass为基类,TestClassl为派生类。在主函

数中定义TestClassl对象obj('x'),"TestClassl(charn):TestClass(n+l),

c(n){}",所以先输出x,然后调用基类构造函数,k+=y,所以输出y,

即答案为xy。

2.D解析:内部静态变量只被初始化一次,它在定义该变量的函数内部

有效。

3.D解析:本题主要考查的是switch语句的使用,在第一个case处,因

为满足条件所以输出字符3,但这个分支没有break语句终止,所以会

继续执行下面的分支语句,即输出字符2,这时出现break语句,结束

整个语句,即输出32。

4.C本题考查对面向对象的理解。面向对象的程序设计是对象模拟问题

领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现

对象之间的相互联系。

5.A解析:C++在创建一个对象时,会调用类的构造函数。语句MyClass

ab(2),*p;创建了两个对象a、b和指针p,在创建对象a和b后会调用构

造函数,而创建指针p时,由于P本身不是对象,所以不调用类的构造

函数。

6.D解析:本题考核虚基类的声明。C++中,虚基类说明格式如下:class

(类名>:virtual(继承方式><基类名>。其中,virtual是虚基类的

关键词。虚基类的说明是用在定义派生类时,写在派生类名的后面。

7.D解析:声明派生类的一般形式:class派生类名:[继承方式]基类名。

其中继承方式包括public,private,protectedo所以选项A),选项B)错

误。而virtual为C++中的关键字,所以选项C)错。虚函数的使用方法

是在基类用virtual声明成员函数为虚函数。

8.D解析:本题考核知识点包括:类与对象、运算重载、I/O的格式化输

出。语句'cout<<setfill(\'*\')<<8;输出8。语句lout<<y:将调用运算

符重载输出****8,因为前面语句中设置的填充符号现在还有效,而数

据8的宽度不够5,所以剩下4个字符的宽度用填充符号阳填充。

9.B解析:本题考核函数模板的使用。引用模板函数和引用一般的函数

在语法形式上没有任何区别。所有的类型替换都是编译器在幕后悄悄进

行的。但是要注意的是说明一个函数模板后,当编译系统发现有一个对

应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应

的形参。例如,本题中的B)选项,编译系统从第一个参数“3.5”获得的

信息是"对应于double",而从第二个参数“4”处获得的信息是"对应

于int”,二者相互矛盾,在编译时会产生错误。对于D)选项中紧跟在

函数名后的<double>就是模板实参表,通过它通知编译系统在调用过

程中,int型的参数“4”将被自动换成double型。

10C解析:构造函数是一类特殊的函数,其特点是函数名与类同名,没

有返回值,也可以省略不写,还可以对类中的成员进行初始化。

11.A

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

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

13.C

Co【解析】除了•、*、一*、::、?:这五个运算符外,其他运算符

都可以重载。=、口、、一以及所有的类型转换运算符只能作为成员函

数重载。口作为成员函数重载时,应完成“下标访问”操作,使得向指

定下标处的元素赋值或取值成为可能。

14.D

解析:本题考查了类的定义。C++语言规定,在类体中不允许对所定

义的数据成员进行初始化。故本题应该选择D。

15.C

Co【解析】在C语言中,未赋初值的静态局部变量,编译程序自动

给它赋初值0。所以选择C。

16.C解析:本题考核对虚函数的了解。在成员函数声明的前面加上

virtual关键字修饰,即把该函数声明为虚函数。虚函数可以是另一个类

的友元函数,但不是静态成员函数。所以A、B选项的描述都是错误。

在派生类中可以重新定义从基类继承下来的虚函数,在派生类中重定义

虚函数时,函数名、形参表和返回值类型必须保持不变,所以D选项是

错误的。

17.B解析引用实际上就是别名,它与被引用变量拥有同一个地址空间。

选项A)中&m表示m的地址,而x是一个整型变量,在C++中不能从

地址值隐式转换为整型值,故选项A)是错的。选项B)中其操作实际

上就是为m赋于一个别名x,因此选项B)是对的。选项C)中引用必须

要用被引用的对象,即引用必须要初始化:选项D)中x是一个整型引

用,而其被引用的对象却是m的地址,存在着与选项A)类似的错误,

因此选项D)也是错的。

18.A解析:根据题中给定的条件,可以作如下的模拟操作:①元素a,

b进栈,栈中有2个元素,分别为a,b;②元素b出栈后,元素c,d

进栈,栈中有3个元素,分别为a,c,d;③元素d,c出栈后,元素e,

f进栈,栈中有3个元素,分别为a,e,f;④最后,元素f,e,a出栈,

栈为空。可以看出,进栈的顺序为a,b,c,d,e,f,出栈的顺序为b,

d,c,f,e,a,满足题目要求。每次进栈操作后,栈中最多有3个元素,

所以,为了顺利完成这些操作,栈的容量应至少为3。本题的正确答案

为Ao

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

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

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

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

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

20.A解析:和线性表类似,栈也有两种存储方法,一是顺序栈,二是链

式栈。栈的顺序存储结构是利用一组地址连续的存储单元一次存储自栈

底到栈顶的数据元素,同时附设指针top指示栈顶元素的位置,由于栈

的操作是线性表操作的特例,相对而言,链式栈的操作更易于实现。注

意:这3种运算方法在各种存储结构中的应用。

21.C

Co【解析】编译程序和汇编程序缁于开发工具;操作系统属于系统软

件;而教务管理系统属于应用软件。

22.A

Ao【解析】本程序设计了一个点类Point,包含了横、纵两个坐标数

据x和y,由它派生出了圆类Circle,并加入了新的数据成员,即一个

半径r和一个求圆面积的函数成员area。在主函数main中,首先定义

了一个圆Circle类的对象cl,并通过它的构造函数初始化其数据成

员。由此可知,其半径r的值为10,所以其面积为PI*10*10=314,即

对象cl的函数成员area的返回值为314。

23.C解析:软件按功能可以分为:应用软件,系统软件、支撑软件(或工

具软件)。应用软件是为解决特定领域的应用而开发的软件。例如,事务

处理软件、工程与科学计算软件,实时处理软件,嵌入式软件,人工智

能软件等应用性质不同的软件。因此选项C教务管理系统属于应用软

件。系统软件是计算机管理自身资源,提高计算机使用效率并为计算机

用户提供各种服务的软件。如操作系统,编译程序,汇编程序,网络软

件,数据库管理系统等。因此选项A、B、D都属于系统软件。

24.把整型指针赋给通用指针把整型指针赋给通用指针

25.*(&a[0][0]+20*4*i+4*j)*(&a[0][0]+20*4*i+4*j)解析:根据二维数组

的定义,它的元素的地址应该是&a[0][0]+20*4*i+4*j,所以

元素的值是*(&a[0][0]+20*4*i+4*j)。

26.1og2nlog2n解析:在长度为n的有序线性表中进行二分查找,最坏的

情况下需要的比较次数为logzn。

27.动态动态解析:本题考查的是对动态分配内存的掌握,在C++语言

中,使用关键字Hew和delete进行动态内存中请和释放。

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

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

29.1414解析:本题考核运算符的应用。条件运算符是一种在两个表达

式中选择一个的操作,它是C++中惟一的三元运算符。在本题中,先计

算(a>B)?a:b,因为a<b,所以条件表达式的值为0,因此y=b=14,

而y>c的逻辑值为真,所以表达式的值为y的值,即14。

30.不能不能

31,a[2][4]a[2][4]解析:C++中,数组每一维的下标都是从0开始,到n-

1结束。因此a[3][5]共有15个元素,最后一个元素是a[2][4]。

32.软件开发软件开发解析:基于软件下程的目标,软件工程的理论和

技术性研究的内容主要包括:软件开发技术和软件工程管理。软件开发

技术包括:软件开发方法学、开发过程、开发工具和软件工程环境,其

主体内容是软件开发方法学。软件工程管理包括:软件管理学、软件工

程经济学,以及软件心理学等内容。

33.inline

34.错误。错误。解析:数据库关系系统中具有把数据库从错误状态恢

复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,就是数

据库的恢复。

35.9

36.(1)应改为"usingnamespacestd;

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

,5

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

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

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

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

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

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

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

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

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

\n⑵应改为"assert(sizeof(s2)==lO);

\n(3)应改为"assert(sizeof(s3)==l);

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

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

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

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

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

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

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

ccassert(sizeof(s3)==l);”。

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

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

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

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

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

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

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

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

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

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

,5

“outl.put(s[i]);O

39.⑴应改为"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++中

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

,5

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

第3处=5561即11^1'(100);”语句中的正为类,并不是对象,这里

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

“obj2,SetNumber(lOO);

40.(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;"。

41.⑴“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;

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

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

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

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

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

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

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

温馨提示

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

评论

0/150

提交评论