2021年广东省云浮市全国计算机等级考试C++语言程序设计测试卷(含答案)_第1页
2021年广东省云浮市全国计算机等级考试C++语言程序设计测试卷(含答案)_第2页
2021年广东省云浮市全国计算机等级考试C++语言程序设计测试卷(含答案)_第3页
2021年广东省云浮市全国计算机等级考试C++语言程序设计测试卷(含答案)_第4页
2021年广东省云浮市全国计算机等级考试C++语言程序设计测试卷(含答案)_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

2021年广东省云浮市全国计算机等级考试C++语言程序设计测试卷(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.数据字典(DD)是定义以下哪种系统描述工具中的数据的工具()。

A.数据流程图B.系统流程图C.程序流程图D.软件结构图

2.派生类对象对其基类中的什么成员是可访问的?()

A.公有继承的私有成员B.私有继承的公有成员C.私有继承的保护成员D.保护继承的保护成员

3.在一个类中可以对一个操作符进行()重载

A.1种B.2种C.3种D.多种

4.只能作为成员函数重载的是

A.=B.++C.*D.new

5.析构函数的特征是______。

A.一个类中只能有一个析构函数B.析构函数名与类名相同C.析构函数的定义只能在类体内D.析构函数可能有一个或多个参数

6.下列关于关系运算的叙述中正确的是()。A.投影、选择、连接是从二维表的行的方向来进行运算

B.投影、选择、连接是从二维表的列的方向来进行运算

C.并、交、差是从二维表的列的方向来进行运算

D.以上三种说法都不对

7.如果一个类至少有一个纯虚函数,那么就成为______。

A.抽象类B.虚基类C.派生类D.以上都不对

8.能正确表示逻辑关系:”a≥10或a≤0”的C++语言表达式是()。

A.a>=10ora<=0

B.a>=0|a<=10

C.a>=10&&a<=0

D.a>=10||a<=0

9.为提高软件项目的质量,在软件结构设计时,必须遵循()原则。

A.质量控制B.程序优化C.信息隐蔽D.数据共享

10.假定其中的x的单位是角度且不考虑π的值的精度,则与数学公式等的C++语言表达式是()。

A.sqrt(cos(x))

B.sqrt(abs(cos(x*3.14/180)))

C.sqrt(abs(cos(x*(/180)))

D.sqrt(fabs(cos(x*3.14/180)))

二、单选题(13题)11.有如下说明:inta[10]={1,2,3,4,5,6,7,8,9,10},*P=a;则数值为9的表达式是()。

A.*P+9B.木(P+8)C.*P+=9D.P+8

12.while和do-while循环的主要区别是()。

A.do-while的循环体至少无条件执行一次

B.while的循环控制条件比do-while的循环控制条件更严格

C.do-while允许从外部转到循环体内

D.do-while的循环体不能是复合语句

13.下列关于栈叙述正确的是()。

A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先被删除

14.下面程序的结果是#include<iostream.h>classA{inta;public:A():a(1){}voidshowa(){cout<<a;}};classB{inta;public:B():a(2){}voidshowa(){cout<<a;}};classC:publicA,publicB{inta;public:C():a(3){}voidshowa(){cout<<a;}};voidmain(){Cc;c.showa();}

A.1B.2C.3D.程序有错误

15.最简单的交换排序方法是()。A.快速排序B.选择排序C.堆排序D.冒泡排序

16.某二叉树共有7个结点,其中叶子结点只有l个,则该二叉树的深度为(假设根结点在第1层)()。

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

17.下列叙述中正确的是A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构

18.有下列程序:

#include<stdi0.h>

voidmain()

{intx=1,y=2,z=3;

if(x>y)

if(y<z)print{("%d",++z);

elseprintf("%d",++y);

printf(”%d\n”,x++);

}

程序的运行结果是()。

A.A.331B.41C.2D.1

19.对类的构造函数和析构函数描述正确的是()。

A.构造函数可以重载,析构函数不能重载

B.构造函数不能重载,析构函数可以重载

C.构造函数可以重载,析构函数也可以重载

D.构造函数不能重载,析构函数也不能重裁

20.下面程序的运行结果是()。

#include<iostream.h>voidmain

{

intnum=1:

int&ref=num;ref=ref+2:

cout<<num:num=num+3:cout<<ref<<endl:

}

A.13B.16C.36D.33

21.实现运行时的多态性要使用()。

A.重载函数B.析构函数C.构造函数D.虚函数

22.下列叙述中正确的是()。A.A.全局变量的作用域一定比局部变量的作用域范围大

B.静态类别变量的生存期贯穿于整个程序的运行期间

C.函数的形参都属于全局变量

D.未在定义语句中赋初值的aut0变量和static变量的初值都是随机值

23.类模板template<classT>classX{…},其中友元函数f对特定类型T(如int),使函数f(x<int>)成为x<int>模板类的友元,则其说明为()。

A.A.friendvoidf();

B.B.friendvoidf(x<T>);

C.C.friendvoidA::f();

D.D.friendvoidC<T>::f(x<T>);

三、2.填空题(12题)24.求1~100的和,可写成“for(s=0,i=1;【】;i++)s+=i;”的形式。

25.在程序设计阶段应该采取______和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。

26.耦合和内聚是评价模块独立性的两个主要标准,其中【】反映了模块内各成分之间的联系。

27.通过关键字来指定函数模板的类型参数,有几个类型参数就有几个关键字,它实际表示任何内部类型或用户自定义类型。用来指定函数模板的类型参数的关键字是【】。

28.如果表达式x=y*z中的“*”是作为成员函数重的运算符,采用运算符函数调用格式,该表达式还可以表示为【】。

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

classA

{

inta;

public:

A(intaa=0){a=aa;}

};

classB:publicA{

intb;

Ac;

public:

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

B(intaa):【】{b=aa+2;}

};

30.以下程序运行后的输出结果是【】。

#include<iostream>

#include<string>

usingnamespacestd;

classY;

classX

{

intx;

char*strx;

public:

X(inta,char*str)

{

x=a;

strx=newchar[strlen(str)+1];

strcpy(strx,str);

}

voidshow(Y&ob);

};

classY

{

private:

inty;

char*stry;

public:

Y(intb,char*str)

{

y=b;

stry=newchar[strlen(str)+1];

strcpy(stry,str);

}

friendvoidX::show(Y&ob);

};

voidX::show(Y&ob)

{

cout<<strx<<",";

cout<<ob.stry<<end1;

}

intmain()

{

Xa(10,"stringX");

Yb(20,"stringY");

a.show(b);

returnO;

}

31.在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承private。

已知有如下类定义:

classBase{

protected:

voidfun(){}

};

classDerived:Base{};

则Base类中的成员函数fun(),在Derived类中的访问权限是【】(注意:要求填写private、protected或public中的一项)。

32.流成员函数______返回当前流的状态。

33.求1~100的和,可写成for(s=0,i=1;【】;i++)s+=i;的形式。

34.在进行函数调用时,将把参数的【】传递给值参,把参数的【】传递给引用参数。

35.若串s="MathTypes",则其子串的数目是【】。

四、程序改错题(10题)36.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。试题程序:#include<iostream.h)intmain{try{throw("error");}//********error********catch(chars){cout<<s<<endl;}try{throw((int)0);}//********error********catch{cout<<i<<endl;}try{throw(O);throw("error");}//********error********catch{cout<<"ERROR"<<endl;}return0;}37.使用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;}

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

{

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

//********error*‰******

TC.SetNumber(100);

objl.Print;

obj2.Print;

}

39.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。

程序异常,输出信息为

error

O

ERROR

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

试题程序:

#include<iostream.h)

intmain

{

try

{

throw("error");

}

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

catch(chars)

{

cout<<s<<endl;

}

try

{

throw((int)0);

}

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

catch

{

cout<<i<<endl;

}

try

{

throw(O);

throw("error");

}

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

catch

{

cout<<"ERROR"<<endl;

}

return0;

}40.使用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;}

41.使用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;

}

42.使用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;

}

43.使用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;

}

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,该程序运行有问题,请改正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;}五、综合应用题(2题)46.使用VC++6.0打开考生文件夹下的源程序文件3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。每卖出一个水果,则计算水果的重量,还要计算所有卖出水果的总重量以及总个数,同时允许退货,请按照以下的操作,把类补充完整。(1)定义类TCFruit的私有静态数据成员float型变量AllWeight和int型变量AllN0,请在注释1后添加适当的语句。(2)完成类TCFruit的带一个float型变量w的构造函数,并把这个w加到AllWeight中,并且AllNo自加。请在注释2后添加适当的语句。(3)在析构函数中,在AllWeight中减去weight,然后AllNo自减,请在注释3后添加适当的语句。(4)完成静态成员变量的初始化为0,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#include(iostream.h>classTCFruit{private:floatWeight;//********1********staticintAllNo;public:TCFruit(floatw){//********2********AllWeight+=w:AllNo++:}~TCFruit{//********3********AllWeight-=Weight:}voiddisplay{cout<<"SellaFruitwith"<<Weight<<"k9"<<endl;cout<<”Allsellnumber:"<<AllNo<<endl;cout<<"Allsellweight:"<<AllWeight<<"k9"<<endl<<endl;}};//********4********floatTCFruit::AllWeight=0.0;intmain{TCFruitFruitl(1.2);Fruitl.display;TCFruitFruit2(2.3);Fruit2.display;return0;}47.请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,补充编制c++程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并输出到文件out.dat中。文件in.dat的长度不大于1000字节。要求:补充编制的内容写在“//**********”与“//**********”两行之间。实现将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件0ut.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=newchar[1en];length=0;while((trap=myFile.get)!=EOF){str[1ength++]=trap;}str[1ength]=‘\0’;myFile.close;}voiddoc::reverse{//将数组atr中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个//字符交换……//*************333*************//*************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”);}六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程MyProj6。此工程包含一个源程序文件MyMain6.cpp。在程序中,定义了一个Furniture类,Bed类和Sofa类是在Furniture类的基础上按公有继承的方式产生的派生类,Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生的派生类。

请按要求完成下列操作,将类Date的定义补充完成:

①Bed类是在Furniture类的基础上按公有继承的方式产生的派生类,为了使程序中的多重继承关系不出现二义性。请在注释“//**1**”之后添加适当的语句。

②Sofa类是在Furniture类的基础上按公有继承的方式产生的派生类,为了使程序中的多重继承关系不出现二义性。请在注释“//**2**”之后添加适当的语句。

③Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生的派生类。请在注释“//**3**”之后添加适当的语句。

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

源程序文件MyMain6.cpp清单如下;

//MyMain6.cpp

#include<iostream>

usingnamespacestd;

classFurniture

{

public:

Furniture(){}

voidsetweight(intw)

{

weight=w;

}

intgetweight()

{

returnweight;

}

protected:

intweight;

};

//**1**classBeddefinition

{

public:

Bed(){}

voidsleep()

{

cout<<"sleeping..."<<end1;

}

};

//**2**classSofadefinition

{

public:

Sofa(){}

voidwatchTV()

{

cout<<"watchingTV..."<<end1;

}

};

//***3***

{

public:

Sleepersofa(){}

voidFoldout()

{

cout<<"Foldoutthesofa".<<endl;

};

intmain()

{

Sleepersofass;

ss.setweight(20);

cout<<ss.getweight()<<end1;

return0;

}

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

①定义类Planet的保护数据成员distance和revolve,它们分别表示行星距太阳的距离和行星的公转周期。其中,distance为double型,revolve为int型。请在注释“//**1**”之后添加适当的语句。

②定义类Earth的构造函数Earth(doubled,intr),并在其中计算地球绕太阳公转的轨道周长。假定:circumference=2*d*3.1416。请在注释“//**2**”之后添加适当的语句。

③定义类Earth的成员show(),用于显示所有信息。包括地球距太阳的距离,地球的公转周期,以及地球绕太阳公转的轨道周长。请在注释“//**3**”之后添加适当的语句。

文件MyMain3.cpp中源程序如下:

//MyMain3.cpp

#include<iostream>

usingnamespacestd;

classPlanet

{

protected:

//**1**

public:

Planet(doubled,intr)

{

distance=d;

revolve=r;

}

};

classEarth:publicPlanet

{

private:

doublecircumference;

public:

//**2**

//**3**

};

intmain()

{

Earthobj(9300000,365);

obj.show;

return0;

}

参考答案

1.A解析:本题考查数据字典的作用。数据字典是对数据流程图中出现的被命名的图形元素的确切解释。

2.D

3.D解析:重载运算符可以针对用户的各种新的数据类型按实际需要对原有运算符进行适当的改造,在一个类中可以有多种新的数据类型,所以一个操作符可以进行多种重载。

4.A解析:运算符重载为成员函数的形式为:函数类型operator运算符(形参表){函数体;};运算符重载为友元函数的形式为:friend函数类型operator运算符(形参表){函数体;}。一般来讲,单目运算符最好重载为成员函数,双目运算符最好重载为友元函数。=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载。

5.A

6.B\r\nA和B是互相矛盾的,答案必然是这两者之一。在关系模型的数据语言中,常规的集合运算(并、交、差、笛卡尔积等),是将关系(即二维表)看成是元组的集合,这些运算主要是从二维表的行的方向来进行的;投影、选择、连接等运算主要是从二维表的列的方向来进行运算。正确答案是B。

7.A

8.D解析:逻辑运算符“||”表示或的意思。

9.A解析:软件项目的建设包括项目计划、需求分析、软件开发和系统维护等阶段,质量管理工作会始终贯彻在项目建设的各个阶段。因此为提高软件项目的质量,在软件结构设计时,必须遵循质量控制原则。

10.D解析:本题考查数学表达式的掌握,首先应转换为弧度,然后作为COS函数的参数,求绝对值,最后是开方函数。考生需要掌握的是常用的数学函数。

11.B本题考查指向数组的指针,本题中指针变量P指向数组a,那么*P的值就是1,即表示数组的第一个元素,那么数值为9的表达式就是将指针向后移动8个地址,即P+8指向的是数组元素值为9,所以数值为9的表达式是*(P+8)。

12.A解析:while是先判断条件再执行语句;do-while则是先执行一次语句再判断条件,从而决定是否继续再执行循环体中的语句,这正是二者主要区别。

13.A栈是先进后出的数据结构,所以栈顶元素最后入栈却最先被删除。栈底元素最先入栈却最后被删除。所以选择A。

14.C解析:类A,类B,中都有showa()函数,类C继承后再次重写showa()函数就解决了继承的二义性,这时c.showa()函数显示的就是类C中的showa()的值。

15.D冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

16.D根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总比度为2的结点多一个,因此本题中度为2的结点为l一1=0个,据此可以知道本题目中的二叉树的每一个结点都有一个分支,所以共7个结点共7层,即深度为7,选择D)。

17.A根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件:1,有且只有一根节结点,2,每一个结点最多有一个前件,也最多有一个后件,则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。

18.DD。【解析】C语言中规定,else与离它最近的if相匹配。

x=1,y=2,z=3,所以第一个if的条件(x>y)不成立,直接执行printf("%d\n",x+1);语句,输出x的值1,再把x加1。

19.A一个类中只能定义一个析构函数,否则会造成对同…对象的多次删除;而构造函数可以根据不同的参数个数和类型进行多次重载。

20.C本题考查的是考生对引用的掌握,ref实际上就是变量num的别名,所以ref=ref+2时,num已经变成了3。

21.D解析:本题考核虚函数的应用。动态联编一直要到程序运行时才能确定调用哪个函数。虚函数是实现动态联编的必要条件之一。没有虚函数一定不能实现动态联编,但有虚函数存在时,必须同时满足下列条件,才能实现动态联编:类之间满足子类型关系;调用虚函数操作的是指向对象的指针或对象引用,或者是由成员函数调用虚函数。

22.BB。【解析】本题考查的是变量的作用域及其生存周期。一个全局变量的生存周期从它被声明开始,直到程序结束;一个局部变量的生存周期从它被声明开始,直到包含它的最近的一个程序块结束。静态变量的生存周期将延续到整个程序的终止。

23.B\nB。【解析】声明一个函数模板的格式template<模板形参表声明>函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。

\n

24.i<=100或者i<101i<=100或者i<101解析:在本题中,我们看到s=s+i,又有i++,它的含义是当i满足条件时,i自加1,然后再与前面的s相加,值赋给s。所以for语句中,缺少上限表达式。因为是求1~100的和,所以i满足的条件为i<=100或者i<101。

25.自顶向下自顶向下解析:程序设计时,应先考虑总体,后考虑细节,逐步使问题具体化,对复杂的问题,应该设计一些目标作为过渡,上述方法概括为:自顶向下,逐步细化。

26.内聚内聚

27.typename(或class)typename(或class)解析:函数模板的声明形式为:

template<class数据类型参数标识符>

<返回类型><函数名>(参数表)

{

函数体

}

其中,template是定义模板函数的关键字,template后面的尖括号不能省略,typename(或class)是声明数据类型参数标识符的关键字,用以说明它后面的标识符是数据类型标识符。这样,在以后定义的这个函数中,凡希望根据实参数据类型来确定数据类型的变量,都可以用数据类型参数标识符来说明,从而使这个变量可以适应不同的数据类型。

28.x=y.operator*(z)

29.A或者A(aa)c(aa+1)或者A或者c(aa+1]A(aa)A或者A(aa),c(aa+1)或者A或者c(aa+1],A(aa)解析:类的初始化。

30.stringXstringYstringX,stringY解析:本题考核类的定义和友元函数的应用。

①该程序中,类X的成员函数show()在类Y中说明为友元,因此,在该友元成员show()中可以访问类Y的私有成员stry。

②成员函数show()的功能就是输出类X的私有成员strx和Y对象ob的私有成员stry。

③主函数中定义了X类的一个对象a和Y类的一个对象b,并且都进行了初始化。然后调用对象a的成员函数show(),输出对象a中私有成员strx中的内容和对象b中私有成员stry中的内容,即字符串stringX和stringy。

31.private

32.rdstate()

33.i<=100i<=100解析:本题循环执行100次,每次循环执行s=s+i,因为是求1~100的和,所以需要循环变量满足的条件是i<=100。

34.值|地址值|地址解析:函数传递只有两种形式——值传递和地址传递。

35.4646解析:串s中共有9个字符,由于串中字符各不相同,则其子串中有0个字符的1个(空串),1个字符的9个,2个字符的8个,3个字符的7个,4个字符的6个,5个字符的5个,6个字符的4个,7个字符的3个,8个字符的2个,9个字符的1个,共有1+2+3+4+5+6+7+8+9+1=46。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.(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;”。

38.(1)应改为“TCobjl(1);”。

\n(2)应改为“0bj1.SetNumber(10);”。

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

\n【解析】本题第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);”。

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

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

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

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

温馨提示

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

评论

0/150

提交评论