2023年浙江省湖州市全国计算机等级考试C++语言程序设计测试卷(含答案)_第1页
2023年浙江省湖州市全国计算机等级考试C++语言程序设计测试卷(含答案)_第2页
2023年浙江省湖州市全国计算机等级考试C++语言程序设计测试卷(含答案)_第3页
2023年浙江省湖州市全国计算机等级考试C++语言程序设计测试卷(含答案)_第4页
2023年浙江省湖州市全国计算机等级考试C++语言程序设计测试卷(含答案)_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

2023年浙江省湖州市全国计算机等级考试C++语言程序设计测试卷(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.假定MyClass为一个类,那么下列的函数说明中,()为该类的析构函数

A.void~MyClass();

B.~MyClass(intn);

C.MyClass();

D.~MyClass();

2.以下程序的输出的结果是()。#include<iostream.h>intx=3;voidmain(){voidincre();inti;for(i=1;i<x;i++)incre();}Voidincre(){staticintx=1;x*=x+1;cout<<x<<"";}

A.33B.22C.26D.25

3.以下不属于运算符重载应注意的问题是()。

A.重载的运算号应保持其原有的基本

B.重载的运算符应尽可能保持其原有的特性

C.运算符的重载尽量不配套

D.使用引用参数还是非引用函数

4.数据库概念设计中由分散到集中的设计方法是

A.视图设计B.视图集成设计C.集中式模式设计D.分散式模式设计

5.带有虚基类的多层次派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样对虚基类的子对象初始化()。

A.与虚基类下面的派生类个数有关B.多次C.二次D.一次

6.下列情况中,不会调用拷贝构造函数的是()。

A.用一个对象去初始化同一类的另一个新对象时

B.将类的一个对象赋值给该类的另一个对象时

C.函数的形参是类的对象,调用函数进行形参和实参结合时

D.函数的返回值是类的对象,函数执行返回调用时

7.下列关于栈的描述中错误的是()

A.栈是先进后出的线性表B.栈只能顺序存储C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针

8.模板函数的真正代码是在()时候产生。

A.源程序中声明函数时B.源程序中定义函数时C.源程序中调用函数时D.运行执行函数时

9.通常初始化拷贝构造函数的参数是

A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名

10.设有如下说明typedefstruct{intn;charc;doublex;}STD;则有以下选项,能正确定义结构体数组并赋初值的语句是

A.STDtt[2]={{1,'A',62},{2,'B',75}};

B.STDtt[2]=“1,"A",62,2,"B",75};

C.structt[2]={{1,'A'},{2,'B'}};

D.structtt[2]=<<1,"A",62.5},{2,"B",75.0}};

二、单选题(13题)11.软件需求分析阶段的工作,可以分为四个方面:需求获取、需求分析、编写需求规格说明书以及______。A.阶段性报告B.需求评审C.总结D.都不正确

12.设有下列二叉树:对此二叉树前序遍历的结果为()

A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXPD.ATBZXCPY

13.有以下程序:classDate{public:Date(inty,intm,intd);{year=Y:month=m;day=d;}Date(inty=2000){year=y;month=10;day=1;}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);return0;}程序执行时,Date类的拷贝构造函数被调用的次数是()。A.2B.3C.4D.5

14.下列运算符不能重载为友元函数的是A.=()[]->B.+-++--C.><>=<=D..+=-=*=/=

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

A.虚函数不能声明为另一个类的友元函数

B.派生类必须重新定义基类的虚函数

C.如果在重定义虚函数时使用了保留字virtual,那么该重定义函数仍是虚函数

D.虚函数不能够声明为静态函数

16.判断char型变量c是否为小写字母的正确表达式是()。

A.'a'<=c<='z'

B.(c>=A)&&(c<=z=

C.('a'>=c)||('z'<=c)

D.(c>='a')&&(c<='z')

17.下列关于纯虚函数与抽象类的描述巾,错误的是()。

A.纯虚函数是一种特殊的虚函数,它没有具体的实现

B.抽象类是指具有纯虚函数的类

C.一个基类声明了纯虚函数,该基类的派生类一定不是抽象类

D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出

18.下面程序输出的结果为()。#include"iostream.h"classA{public:A(){cOUt<<"CLASSA"<<endl;}~A(){}};ClaSSB:publicA{public:B(){cout<<"CLASSB"<<endl;}~B(){}};voidmain(){A*P;P=newB:B*q:q=newB;}A.CLASSA

B.CLASSACLASSBCLASSBCLASSB

C.CLASSA

D.CLASSACLASSBCLASSBCLASSACLASSBCLASSBCLASSB

19.若MyTemp是一个具有虚拟类型参数的类模板,且有如下语句序列:

MyTemp<double>p2;

MyTemp<long>p3[2];

编译系统在处理上面的话句序列时,所生成的模板MyTemp的实例的个数是()。

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

20.下列程序的输出结果为()。#include<iostream.h>classTestClass{public:TestClass(){val++;}static,intval;};intTestClass::val=0;voidmain(){TestClasscsl;cout<<csl.val<<"";TestClasscs2;TestClasscs3,cs4;cout<<cs2.val<<endl;}A.O3B.13C.14D.24

21.下列关于运算符重载的描述中,正确的是()。

A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符

B.一元运算符只能作为成员函数重载

C.二元运算符重载为非成员函数时,参数表中有一个参数

D.C++中可以重载所有的运算符

22.若有以下定义:inta[]={1,2,3,4,5,6,7};charc1=b,c2=2;则数值不为2的表达式是()。

A.a[1]B.dc1C.a[3-c2]D.c2-0

23.定义如下枚举类型enum{Monday,Tuesday,Wednesday,Thrusday,Friday=2};则下列选项正确的是()。

A.表达式Wednesday==Friday的值是true

B.Dayday;day=3;

C.Dayday;day=Monday+3;

D.Daydayday=Tuesday+10;

三、2.填空题(12题)24.以下程序的执行结果为【】。

#include<iostream>

usingnamespacestd;

classbase

{

public:

virtualvoidwho()

{

cout<<"baseclass"<<endl;

}

};

classderivel:publicbase

{

public:

voidwho()

{

cout<<"derivelclass"<<endl;

}

};

classderive2:publicbase

{

public:

voidwho()

{

cout<<"derive2class"<<endl;

}

};

voidmain()

{

baseobjl,*p;

derivelobj2;

derive2obj3;

P=&objl;

p->who();

p=&obj2;

p->who();

p=&obj3;

p->who();

}

25.树中度为零的结点称为______。

26.一个向量(即一批地址连续的存储单元)第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是【】。

27.在一个容量为25的循环队列中,若头指针front=15,尾指针rear=6,则该循环队列中共有【】个元素。

28.如下程序的输出结果是______。

#include<iostream>

usingnamespacestd;

intfunl(intx){return++x;}

intfun2(int&x){return++x;}

intmain(){

intx:1,y=2;

Y=funl(fun2(x));

cout<<x<<','<<y;

return0;

}

29.假定p所指对象的值为25,p+1所指对象的值为46,则执行“*p++;”语句后,p所指的对象的值为【】。

30.软件生命周期包括八个阶段。为使各时期的任务更明确,又可以分为以下三个时期:软件定义期,软件开发期,软件维护期。编码和测试属于【】期。

31.若有定义语句:inta=3,b=2,c=1;,则表达式a<b?a:b的值是【】。

32.在下面函数的横线处填上适当的内容,使该函数能够利用递归方法求解字符串str的长度(不得使用系统提供的字符串处理函数)。

intGetLen(char*str)

{

if(______)return0;

elsereturn1+GetLen(str+1);

}

33.有一种特殊的虚函数,重定义时不要求同名,这种虚函数是【】。

34.下面程序的输出结果为【】。

#inclUde<iostream.h>

voidmain()

{

inta;

int&b=a;//变量引用

b=10;

cout<<"a="<<a<<endl;

}

35.含有纯虚函数的类称为______。

四、程序改错题(10题)36.使用VC++6.0打开考生文件夹下的源程序文件

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

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

//******error******的下面。

试题程序:

#include<iostream>

#include<fstream>

//********error********

usingstd;

voidWriteFile(char*s)

{

ofstreamout1;

//********error********

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

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

{

//********error********

out1.puts(s[i]);

}

out1.close;

}

voidClearFile

{

ofstreamout1;

out1.open("1.txt");

out1.close;

}

intmain

{

chars[1024];

ClearFile;

cout<<"pleaseinputastrin9:"<<endl;

cin.getline(s,1024);

WriteFile(s);

return0;

}

37.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h>

voidmain

{

inti=0;

charstr[120];

cout<<"Enterastringendwith?."<<endl;

//********error********

cin.getline(str,120);

//********error********

while(str)

{

//********error********

if(str[i])=a)

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

i++;

}

cout<<str<<endl;

return;

}

38.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果正确。程序输出:88注意:错误的语句在/********error********/的下面。修改该语句即可,其他的语句不能修改。试题程序:#include(iostream.h>classCO{public:/********error********/staticintn=0:CO{n++:}~CO{n--:}}:/********error********/intCO::n;voidmain{COobj;COobj2[7];CO*C=NULL:c=&obj:/********error********/eout<<C.n<<endl;cout<<C0::n<<endl;}

39.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:

9,8,7,6,5

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

试题程序:

#include(iostream.h>

classTC

{

/********error********/

TC(inti)

{

m_i=i;

}

voidprint

{

cout<<--m_i<<,;

}

public:

intm_i;

};

intmain

{

/********error********/

inti;

TC04(10);

while(i>5)

{

/********errOr********/

i++:

04.print;

}

cout<<endl;

return0;

}

40.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在//******error******的下面,修改该语句即可。试题程序:#include<iostream.h>//******error******voidmain{//******error******intm=0142://******error******intn=0X27:intq=32;cout<<m<<endl;cout<<n<<endl;cout<<q<<endl;return;}

41.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在//******error******的下面,修改该语句即可。试题程序:#include(iostream.h)classTC{inti;public:TC;voiddisplay;~TC;};//******error******TC:TC{cout<<"Constructor"<<",";i=0;)//******error******TC:display{tout<<"i="<<i<<","<<endl;}//******error******TC:TC{COUI<<"Destructor"<<endl:}voidmain{TCa;a.display;}

42.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。试题程序:#include<iostream>#include<fstream>//********error********usingstd;voidWriteFile(char*s){ofstreamout1;//********error********out1.open("1.txt",binary|app);for(inti=0;s[i]!=0;i++){//********error********out1.puts(s[i]);}out1.close;}voidClearFile{ofstreamout1;out1.open("1.txt");out1.close;}intmain{chars[1024];ClearFile;cout<<"pleaseinputastrin9:"<<endl;cin.getline(s,1024);WriteFile(s);return0;}

43.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=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{//********error********TCobjl;objl.Print;TCobj2(3);//********error********objl.number=10;//********error*‰******TC.SetNumber(100);objl.Print;obj2.Print;}

44.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。试题程序:#include<iostream.h>voidmain{inti=0;charstr[120];cout<<"Enterastringendwith?."<<endl;//********error********cin.getline(str,120);//********error********while(str){//********error********if(str[i])=a)str[i]=str[i]-a+A;i++;}cout<<str<<endl;return;}

45.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

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

试题程序:

#include(iostream.h)

classTC

{

inti;

public:

TC;

voiddisplay;

~TC;

};

//******error******

TC:TC

{

cout<<"Constructor"<<",";

i=0;

)

//******error******

TC:display

{

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

}

//******error******

TC:TC

{

COUI<<"Destructor"<<endl:

}

voidmain

{

TCa;

a.display;

}

五、综合应用题(2题)46.(1)应添加“virtualvoidGetNamt!=0;”。

(2)应添加“constchar*GetName2”。

(3)应添加“TC2(char*str)”。

(4)应添加“m_str[i]=0;”。

【解析】本题第1处要求“在类TC1中定义接口函数GetName,为纯虚函数”。在C++中,在基类中用virtual声明成员函数为虚函数。纯虚函数是在声明虚函数时被“初始化”为0的函数,即“virtualvoidGetName=0;”。第2处要求“函数GetName2实现获得名字的缓存,但只获得读允许操作这个缓存”。只能引用数据成员,而不能修改,所以使用常成员函数,其一般形式为“const函数类型函数名”,即“constchar*GetName2”。第3处要求“实现TC2的构造函数”。TC2的构造函数与类TC2的名称应该相同,而且第3处的大括弧中是对字符数组str的操作,所以类TC2的构造函数中的参数为str,即这里补全为“TC2(char*str)”。第4处要求“完成TC2的构造函数,实现对名字的处理”,补全类TC2的构造函数,构造函数中的名字变量str对应于类TC中的成员变量m_str,所以这里补全变量赋值操作“m_str[i]=0;”。

47.(1)应添加“BA(intm){a=m;}”。

(2)应添加“PAl(intm,intn):BA(n){b=m;}”。

(3)应添力Ⅱ“PA2(intm,intn,intk):PAl(n,k){C=m;)”。

(4)应添加“cout<<geta<<""<<getb<<""<<C<<endl;”。

【解析】根据第1处要求,构造函数的函数名和类名一致,显然BA构造函数的名称为BA,在BA中通过参数m完成对成员变量a的赋值,因此构造函数的名称为BA(intm),在函数内部对成员a赋值,故第1处的语句应添加“BA(intm){a=m;)”。根据第2处的要求,构造函数的形式为“PAl(intm,intn)”,m赋值给PA1类成员b,将n作为基类BA构造函数的参数值传入,故第2处应添加“PA1(intm,intn):BA(n){b=m;}”。根据第3处的要求,函数形式为PA2(intm,intn,intk),在构造函数中将m赋值给数据成员c,将n和k分别赋值给基类PA1构造函数的参数m和n,因此第3处应添加“PA2(intm,intn,intk):PA1(n,k){C=m;}”。根据第4处的要求,PA2类公有派生于PA1,而PA1公有派生于BA,因此在PA2类中可以调用基类的geta和getb来获得基类私有成员a和b,再输出PA2的私有成员C即满足要求,因此第4处应添加“cout<<geta<<""<<getb<<""<<C<<endl;”。

六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test7_3,此工程包含一个源程序文件test7_3.cpp,其中含有一个类Circle的定义,但该类的定义并不完整。请按要求完成下列操作,将类Circle的定义补充完整。

(1)为类Circle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radius。将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。请在注释“//**1**”之后添加适当的语句。

(2)为类Circle增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序

Circlec;

c.SetRadius(5);

c.Print();

将输出:Thecirclehasradiusof5!

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

(3)完成友元函数voidCompareR(Circle*cl,Circle*c2)的定义,在屏幕中输出c1与c2比较radius大小结果,要求使用if-else结构完成。请在注释“//**3**”之后添加适当的语句。

输出结果如下;

Thecirclehasradusof5!

Thecirclehasradiusof10!

c1<c2

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

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

#include<iostream.h>

classCircle{

public:

Circle():radius(5){}

//**1**

voidSetRadius(intr){radius=r;}

intGetRadius(){returnradius;}

//**2**

friendvoidCompareR(Circle*c1,Circle*C2);

private:

intradius;

};

voidCompareR(Circle*c1,Circle*C2)

{

//**3**

cout<<"c1>c2"<<endl;

else

if((c1->GetRadius())==(c2->GetRadius()))

cout<<"c1=c2"<<endl;

else

if((c1->GetRadius())<(c2->GetRadius()))

cout<<"c1<c2"<<endl;

}

voidmain()

{

Circlec1;

c1.SetRadius(5);

C1.Print();

Circlec2(10);

c2.Print();

CompareR(&c1,&c2);

}

49.使用VC6打开考生文件夹下的工程test40_3。此工程包含一个test40_3.cpp,其中定义了类CVector,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)完成类CVector构造函数的定义,把传入的int型参数a和b分别赋值给类的成员变量x和y。请在注释“//**1**”之后添加适当的语句。

(2)完成类CVector的“+”运算符重载函数的定义,使Cvector类的两个对象相加时可以直接使用符号“+”,并且结果仍然为类Cvector的对象,请在注释“//**2**”之后添加适当的语句。

(3)在主函数中添加适当的语句,把类Cvector的对象a和b相加,并且把结果保存在对象c中,最后以“x,y”的形式输出在屏幕上,请在注释“//**3**”之后添加适当的语句。

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

#include<iostream.h>

classCVector

{

public:

intx,y;

CVector(){};

CVector(int,int);

CVectoroperator+(CVector);

};

CVector::CVector(inta,intb)

{

//**1**

}

CVectorCVector::operator+(CVectorparam)

{

//**2**

temp.y=y+param.y;

return(temp);

}

intmain()

{

CVectora(3,1);

CVectorb(1,2);

CVectorc;

//**3**

return0;

}

参考答案

1.D解析:本题考核类的析构函数。在C++中,析构函数名为符号“~”加类名,析构函数没有参数和返回值。根据以上知识可知,MyClass类的正确析构函数的说明为~MyClass()。

2.C

3.C

4.B解析:数据库概念设计中由分散到集中的设计方法是视图集成设计方法,它的设计过程复杂但它能较好地反映需求,适合于大型与复杂的单位,避免设计的粗糙与不周到,目前此种方法使用较多。

5.D解析:本题考核虚基类以及构造函数。使用虚基类解决二义性问题的关键是在派生类中只产生一个虚基类对象。虚基类子对象由最派生类的构造函数通过调用虚基类的构造函数进行初始化(最派生类的构造函数的成员初始化列表中必须列出对虚基类构造函数的调用,否则,表示使用该虚基类的缺省构造函数)。由于最派生类总是相对,因此,从虚基类直接或间接派生的派生类中的构造函数的成员初始化列表中都要列出对虚基类构造函数的调用。但只有用于建立对象的最派生类的构造函数才调用虚基类的构造函数,此时最派生类的所有基类中列出的对虚基类的构造函数的调用在执行过程中都被忽略,从而保证对虚基类子对象只初始化一次。

6.B解析:拷贝构造函数是一个特殊的构造函数,它用一个已知的对象初始化一个正在创建的同类对象,它的一般格式:类名::类名(const类名&引用对象名)。当一个类的对象赋值给该类的另一个对象时,是赋值而不是创建对象,所以不会调用拷贝构造函数。

7.B解析:在栈中,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照先进后出(FILO,FirstInLastOut)或后进先出(LIFO,LastInFirstOut)的原则组织数据的,因此,栈也被称为先进后出表或后进先出表。由此可以看出,栈具有记忆作用。答案B错在带链的栈的结点存储顺序与其逻辑顺序是可以不一致的。

8.C解析:本题考核模板函数的使用。在说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对象的形参,然后生成一个重载函数。由此可知模板函数的真正代码是在函数调用时产生的。

9.C解析:拷贝构造函数顾名思义,就是对两个对象进行拷贝生成。因此,其参数是指向某个对象的指针。

10.A解析:本题考查结构体的基本知识。因为有了typedef,故可以省略struct关键词而直接使用STD名称。结构体数组中的元素在赋值时要求用大括号包含,故答案为A。

11.B解析:需求分析阶段的工作,可以概括为以下4个方面:需求获取、需求分析、编写需求规格说明书和需求评审。本题的正确答案为B。

12.B解析:所谓二叉树的前序遍历(DLR)是指在访问根结点、遍历左子树与遍历右子树这3者中,首先访问根结点,然后遍历左子树,最后遍历右子树,并且,在遍历左右子树时,上述规则同样适用,即“根-左-右”。故该二叉树的前序遍历结果为“ATBZXCYP”。对于本题,若使用后序遍历和中序遍历的结果分别为“ZBTYCPXA”和“TZBACYXP”。

13.BB。【解析】本题考核拷贝构造函数。上述程序中,拷贝构造函数一共被调用了3次:第1次是在执行语句Datedate3(date1)时,用已经建立的对象date1对正在建立的对象date3进行初始化;第2次是在调用fun函数时,由于是传值调用,因此实参对象date3要对形参对象d进行初始化;第3次是在执行fun函数中的返回语句returntemp;时,系统初始化一个匿名对象时使用了拷贝构造函数。

14.A解析:本题考查运算符重载的概念。C++语言规定,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载。而要重载为友元函数就必须重载为非成员函数,故应该选择A。

15.D

16.D字符型数据在计算机内部是以ASCII码存储的,英文大写字母和小写字母在ASCII码表中都是连续的。大写字母A~z是从65~90,小写字母a~z是从97~122。所以只要变量c大于等于a并月小于等于z就能保证其为小写字母。

17.CC。【解析】纯虚函数是在声明虚函数时被“初始化”为0的虚函数。不定义对象而只作为一种基本类型作为继承的类,称为抽象类。凡是包含纯虚函数的类都是抽象类。抽象类的作用是作为一个类族的共同基类。

18.CC。【解析】本题考查类的继承、类的实例化和构造函数、析构函数的调用方式以及何时调用。每实例化一个类就要调用其构造函数,结束运行该实例后调用析构函数。

19.B\nB。【解析】类横板是一系列相关类的模板或样板,成员函数的源代码形式相同,不同的是所针对的类型不一样,如题中的一个double类型,一个long类型;类模板中数据类型本身是它的参数,它是类的生成器。

\n

20.CC。【解析】由主函数main入手,定义TestClass类的对象cs1,执行cs1.va1,其中va1为静态变量,根据intTestClass::val=0;初始化,TestClass中的TestClass{val++;}构造函数执行后,val值为1。主函数中接着定义对象cs2,cs3,cs4。执行cout<<cs2.va1<<endl;中的val值为4,所以输出为14。

21.AA。【解析】本题考查的知识点是运算符的重载。运算符重载为成员函数时,形参个数一般为运算符的元数减1,因为此成员函数所属的对象可成为运算符的一个运算分量。重载为非成员函数时,形参个数一般和运算符元数相等。所以,二元运算符重载为非成员函数时,参数表中应有两个参数,运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符。一元运算符中,一取负运算符、++增1运算符、--减1等运算符均可重载为成员函数,C++中,有…*、->*、::、?:五个运算符不能重载。

22.DD。【解析】字符在进行数学运算时取其ASCⅡ码值,其中b的ASCⅡ码值为98,‘d’的ASCⅡ码值为100,字符2的ASCⅡ码值为50。可知D选项中表达式c2-0的值为50。

23.AA。【解析】枚举类型定义了一些整型符号常量的集合,使用枚举类型时应该注意以下几点:枚举类型的第一个常量默认值是0;枚举类型常量的值允许彼此相同;虽然枚举类型常量是整数类型,但是不允许使用整数直接赋值给枚举类型变量,也不允许与整数进行运算,只可以与整数进行比较。

24.baseclassderivelclassderive2classbaseclass\r\nderivelclass\r\nderive2class解析:类base含有虚函数who(),该类派生出derivel类和derive2类,两个派生类中都有虚函数who()的定义。在main()函数中定义了一个指向base类的指针,它也被允许指向其派生类。在执行过程中,不断改变它所指的对象,当P->who()时就能调用不同的版本。这是因为使用了虚函数,因而进行动态联编。注意:应掌握静态联编的使用方法。

25.叶子结点叶子结点

26.108108解析:第一个元素占用100和101,第二个元素占用102和103,第三个元素占用104和\u3000105,第四个元素占用106和107,第五个元素占用108和109……

27.1616解析:设循环队列的容量为m.

如果rear>front.则循环队列中的元素个数为rear-front;

如果rear<front,则循环队列中的元素个数为m+(rear-front)。

在本题中,front=15,rear=6,即rear<front,因此,循环队列中的元素个数为

m+(rear-front)=25+(6-15)=16。

28.23

29.4646解析:*P++的结合顺序为先执行p++,然后取值。答案为46。

30.软件开发软件开发解析:通常,软件生命周期包括八个阶段,问题定义、可行性研究,需求分析、系统设计、详细设计、编码、测试、运行维护。为使各时期的任务更明确,又可以分为以下三个时期:

软件定义期:包括问题定义、可行性研究和需求分析三个阶段;

软件开发期:包括系统设计、详细设计,编码和测试四个阶段;

软件维护期;即运行维护阶段。

31.2

32.*str=NULL或!*str或*str='\0'或sir[0]='\0'或str[0]=NULL*str=NULL或!*str或*str='\\0'\r\n或sir[0]='\\0'或str[0]=NULL解析:此题考查的是递归函数的定义。分析题目可以看出GetLen的定义中缺少递归终止的条件,显然此函数递归终止的条件是读到了字符串的终止符'\\0',此时的返回值为0。

33.虚析构函数虚析构函数解析:分析构函数也可以通过virtual修饰而声明为虚函数。虚析构函数与一般虚函数的不同之处在于:

①重定义函数就是派生类的析构函数,不要求同名。

②一个虚析构函数的版本被调用执行后,接着就要调用执行其基类版本,依次类推,直到调用执行了派生序列的最开始的那个虚析构函数版本为止。

34.a=10

35.抽象类抽象类

36.(1)应改为“usingnamespacestd;”。

\n(2)应改为“outl.open('1.txt',ios::binary|ios::app);”。

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

\n【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,对于C++中引入标准命名空间的格式,缺少namespace,所以第1处的语句修改为“usingnamespacestd;”。第2处,调用成员函数open中,输入、输出方式是在ios类中定义的,所以“out1.open('1.txt',binary|app);”语句缺少类ios,即第2处的语句修改为“out1.open('1.txt',ios::binary|ios::app);”。第3个标识应该用流成员函数put输出字符,所以第3处的语句修改为“out1.put(s[i]);”。

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

\n(2)应改为“while(str[i])”。

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

\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)”。

38.(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;”。

39.(1)应添加“public:”。

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

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

\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类的对象被访问。故应在构造函数前添加“public:”,否则该类无法被实例化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i每次减1,在i>5时循环,故i初始化应为10。若循环中i每次增1,则循环永远不会退出。

40.(1)“voidmain”。(2)“intm=0144;”。(3)“intn=OX25;”或“intn===0x25;”。【解析】本题主要考查了主函数定义及幂同进制之间的转换,包括十进制到八进制,十进制到十六进制。主函数定义的定义形式为“main”,函数名之后必须是一对括号,因此第1处应改为“voidmain”。cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发现变量的初值不正确,十进制的100对应八进制的144,卡进制的37对应十六进制的25,因此2和3应分别改成“intm=0144;”,“intn=0×25;”或“intn=0×25;”。

41.(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”。

42.(1)应改为“usingnamespacestd;”。(2)应改为“outl.open("1.txt",ios::binary|ios::app);”。(3)应改为“out1.put(s[i]);”。【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,对于C++中引入标准命名空间的格式,缺少namespace,所以第1处的语句修改为“usingnamespacestd;”。第2处,调用成员函数open中,输入、输出方式是在ios类中定义的,所以“out1.open("1.txt",binary|app);”语句缺少类ios,即第2处的语句修改为“out1.open("1.txt",ios::binary|ios::app);”。第3个标识应该用流成员函数put输出字符,所以第3处的语句修改为“out1.put(s[i]);”。

43.(1)应改为“TCobjl(1);”。(2)应改为“0bj1.SetNumber(10);”。(3)应改为“0bj2.SelNumber(100);”。【解析】本题第1处的“TCobjl;”语句是声明TC类的对象0bj1,根据TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输出结果两1,所以补全参数1,即第1处的“TCobjl(1);”。第2处处的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中成员函数的使用形式应该是:对象名.成员函数,所以修改为“obj1.SetNumber(10);”。类是对象的抽象,而对象是类的具体实例。第3处“TC.SetNumber(100);”语句中的TC为类,并不是对象,这里应该使用定义的对象,即obj2,所以将语句修改为“obj2.SetNumber(100);”。

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

(2)应改为“while(str[i])”。

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

【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员函数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)”。

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

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

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

\n【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名和作用域运算符“::”,作用域运算符用采表示某个成员属于哪个类,使用格式为“(类名)::<成员函数>((参数函数)),因此第1处应改为“TC::TC”,默认构造函数没有参数。由第2处“TC::display”后的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错误问题,display函数返回值为void,因此第2处的语句应改为“voidTC::display”。由第3处的语句“TC::TC”可知,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名相同,并在前面加“~”字符,用采与构造函数加以区别,因此第3处的语句应改为“TC::~TC”。

46.使用VC++6.0打开考生文件夹下的源程序文件3.cpp。程序通过继承关系,实现对姓名的控制。类TC1实现对名字访问的接口,TC2实现对名字的设置和输出。

\n程序输出为

\nTC2Name

\nMay

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

\n(1)在类TCl中定义接口函数GetName为纯虚函数。请在注释1后添加适当的语句。

\n(2)函数GetName2用于获得名字的缓存,但只获得允许读操作这个缓存,请在注释2后添加适当的语句。

\n(3)实现TC2的构造函数,请在注释3后添加适当的语句。

\n(4)完成TC2的构造函数,实现对名字的处理。请在注释4后添加适当的语句。

\n注意:增加或者修改代码的位置已经

温馨提示

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

评论

0/150

提交评论