2023年四川省成都市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2023年四川省成都市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2023年四川省成都市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2023年四川省成都市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2023年四川省成都市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

2023年四川省成都市全国计算机等级考试

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

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

一、1.选择题(10题)

1.以下程序运行后,输出结果是#definePT5.5

#defineS(x)PT*x*xmain(){inta=l,b=2;

printf("%4.1f\nM,S(a+b);}

A.49.5B.9.5C.22D.45

2.下列有关数据库的描述,正确的是____o

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

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

3.程序设计方法要求在程序设计过程中

A.先编制出程序,经调试使程序运行结果正确后再画出程序的流程图

B.先编制出程序,经调试使程序运行结果正确后再在程序中的适当位置

处加注释

C.先画出流程图,再根据流程图编制出程序,最后经调试使程序运行结

果正确后再在程序中的适当位置处加注释

D.以上三种说法都不对

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

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

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

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

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

5.在软件测试中,白盒测试方法是通过分析程序的来设计测

试用例的方法。

A.应用范围B.内部逻辑C.功能D.输入数据

6.派生类中的成员不能直接访问基类中的()成员。

A.publicB.privateC.virtualD.protected

7.下列叙述中,错误的是()o

A.派生类可以使用private派生

B.对基类成员的访问必须是无二义性的

C.基类成员的访问能力在派生类中维持不变

D.赋值兼容规则也适用于多继承的组合

8.设3,5,7,9,11,13),*p=x;则不能正确引用数组元

素的表达式是0

A.*(p—)B.*(・-p)C.*(p++)D.*(++p)

9.下列字符串中不能作为C++标识符使用的是()o

A.WHILEB.userC.JvarD.9stars

10.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不

正确的是0

A.派生类的对象可以赋给基类的对象

B.派生类的对象可以初始化基类的引用

C.派生类的对象可以直接访问基类中的成员

D.派生类的对象的地址可以赋给指向基类的指针

二、单选题(13题)

11.关于关键字class和typename,下列表述中正确的是()。

A.程序中的lypename都可以替换为class

B.程序中的class都可以替换为typename

C.在模板形参表中只能用{ypename来声明参数的类型

D.在模板形参表中只能用class或typenanle来声明参数的类型

12.对于类定义

classA{

public:

voidfunc2{}

};

classB:publicA{public:

w)idfuncl|cout«HclassBfiincl”v〈endl:}

virtualvoillfimc2{cout«MclassBfunc2"«endl:}

};

下面正确的叙述是()。

A.A::rune2和B::fund都是虚函数

B.A::func2和B::funel都不是虚函数

C.B::fund是虚函数,而A::func2不是虚函数

D.B::fund不是虚函数,而A::func2是虚函数

13.要定义整型数组x,使之包括初值为0的三个元素,下列语句中

错误的是

A.intx[3]={0,0,0};

B.intx[]={0};

C.staticintx[3]={0};

D.intx[]={0,0,0);

14.

21.可以用p.a的形式访问派生类对象p的基类成员a•其中a是().

A.私有继承的公有成员B.公有继承的私有成员

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

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

A.有的运算符可以作为非成员函数重载

B.所有的运算符都可以通过重载而被赋予新的含义

C.不得为重载的运算符函数的参数设置默认值

D.有的运算符只能作为成员函数重载

30.有如下函数模板定义:

template<typenameT1•typenameT2,typenameT3>

T2plus(Tltl,T3t3){returntl+t3;}

则以下调用正确是().

A.plus(3«5L);B.plus<X3.5L);

16C.plus<int>(3»5L)>D・plus<int.double)(3«5L);

17.对于类定义classA{public:virtualvoidfuncl(){}voidfunc2(){}};

classD:publicA{public:voidfuncl(){cout<<"classBrune1n<<endl;}

virtualvoidfunc2(){cout<<"classBfunc2"<<endl;}};下面正确的

叙述是o

A.A::func2()和都是虚函数

B.A::func2()和B::funcl()都不是虚函数

C.B::funcl()是虚函数,而A::func2()不是虚函数

D.B::funcl。不是虚函数,而A::func2()是虚函数

18.对于拷贝构造函数和赋值操作的关系,正确的是()。

A.拷贝构造函数和赋值操作是完全一样的操作

B.进行赋值操作时,会调用类的构造函数

C.当调用拷贝构造函数时,类的对象正在被建立并被初始化

D.拷贝构造函数和赋值操作不能在同一个类中被同时定义

19.C++语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语

A.ASPB.CC.VBD.Java

20.下列程序的运行结果为()。

#include<iostream.h>template<classTT>

classFF

{TTal,a2,a3;public:

FF(TTbl,TTb2,TTb3){al=bl;a2=b2;a3=b3;}TTSum{return

al+a2+a3;};

}

voidmain

{FF<int>x(int(l.1),2,3),Y(int(4.2),5,6);

cout«x.Sum««Y.Sum«endl;)

A.6.115.2B.615C.615.2D.6.115

21.有以下程序:

classDate

(

public:

Date(inty,intm,intd);

(

year=Y:

month=m;

day=d;

)

Date(inty=2000)

(

yearly;

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);

rcturnO;

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

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

22.有如下程序:

#included<iostream>

usingnamespacestd;

classTestClass

{inta;

public:

TestClass(intx){a=x;}

voidshow(){cout«a;)};

classTestClassl:publicTestClass

{intb;

public:

TestClassl(inti):TestClass(i+1),b(i){}

voidshow(){cout«b;)};

intmain()

{TestCIassb(5),*P;

TestClassld(l):

p=&d;

p->show();

returnO;}

该程序运行后的打印结果是()oA.5B.lC.OD.2

23.有如下程序#include<iostream.h>intfunc(inta,intb)

{return(a+b);}voidmain(){intx=2,y=5,z=8,r;r=func(func(x,

y),Z);cout<<r;)该程序的输出的结果是

A.12B.13C.14D.15

三、2.填空题(12题)

24.软件需求规格说明书应具有完整性、无歧义性、正确性、可验证性、

可修改性等特性,其中最重要的是______O

25.软件设计模块化的目的是【】。

26.有以下程序:

#include<iostream>

usingnamespacestd:

classBase

(

public:

Base()

(

K=0;

)

intx;

};

classDerived!:virtualpublicBase

public:

Derivedl()

(

x=10;

)

};

classDerived!:virtualpublicBase

27.以下程序执行后的输出结果是【

#include<iostream.h>

main()

(

inti,m=0,n=0,k=0;

for(i=9;i<=11;i++)

switch(i/10)

(

case0:m++;n++;break;

case10:n++;break;

default:k++;n++;

)

cout<<m<<n<<k;

)

28.若要把类B定义为类A的友元类,则应在类A的定义中加入语句

29.有如下定义:

classMA{

intvalue;

public:

MA(intn=0):value(n){}

};

MA*ta,tb;

其中MA类的对象名标识符是_____o

30.对象根据所接受的消息而做出动作,同样的消息被不同的对象所接

受时可能导致完全不同的行为,这种现象称为0

31.在下面程序横线处填上适当内容,使得程序的输出为9876。

#include<iostream>

usingnamespacestd;

template<classT>

voidf([])

(

Tt;

for(inti=0;i<n/2;i++)

(

t=ali];

a[i]=a[n-l-i];

a[n-l-i]=t;

)

}

intmain()

(

intx[]={6,7,8,9);

f(x,4);

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

cout<<x[i];

cout<<endl;

return0;

32.若有以下程序:

#include<iostream>

usingnamespacestd;

classSample

(

private:

constintn;

public:

Sample(inti):n(i){)

voidprint()

(

cout<<,,n="<<n<<endl;

)

);

intmain()

(

samplea(10);

a.print();

return0;

1

上述程序运行后的输出结果是【】。

33.树L中,度为1、2、3、4、5和6的节点个数为6、4、3、3、5、

1,则L中叶子的个数是【】。

34.下列程序的运行结果是【】。

#include<iostream,h>

classBase

(

public:

virtualvoidfunc(inti){cout<<"classBase:“<<i<<endl;}

};

classDerived:publicBase

public:

voidfunc(doubled){cout<<"classDerived:'1<<d<<endl;}

);

voidmain()

(

Basea,*p=&a;

Derivedb;

p=&b;

(*p).func(3.3);

)

35.类。stream的成员函数【】用于执行无格式输出,成员函数put用

于输出单个字符。

四、程序改错题(10题)

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

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

Constructor,i=0,

Destructor

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

试题程序:

#inckide(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

);

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

TC:TC

cout«'^Constructor'^«'^,”

i=0;

)

/小小小小小小errcr不不不不不不

TC:display

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

1•*»

//不不不不不不ermr,。。*卒不**

TC:TC

COUI«"Destructorn«endl:

)

voidmain

(

TCa;

a.display;

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

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

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

到屏幕中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120J;

cout«HEnterastringendwith?.n«endl;

/«>1•*>1**>1•*>1•«>1•

//不不不不不不不小prrcr不不不不不不予不

cin.getline(str,120);

f

//不不不不不不不不prr()r不不不不干不不不

while(str)

!*1**1**1**1*«*»

//****举***pj*!*cr*不******

if(str[i])=a)

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

i++;

}

cout«str«endl;

return;

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

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

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

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

构,错误的语句在

******errc)r******的下面°

试题程序:

#include<iostream>

#include<fstream>

/

//*5*5*5*5*5*5*rprmr不不不不不不不不

usingstd;

voidWriteFile(char*s)

ofstreamoutI;

/小小小小年年小小prrcr不不不不不不不不

outl.open("l.txt"jbinary|app);

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

/小小小小小小小小prmr不不不不不不不不

outl.puts(sfi]);

)

outl.close;

}

voidClearFile

ofstreamoutl;

outl.open("l.txt");

outl.close;

)

intmain

(

charsL1024J;

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

}

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

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

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

程序异常,输出信息为

error

O

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

throw(nerrorn);

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

catch(chars)

cout«s«endl;

throw((int)0);

|/********error**字**¥字不

catch

(

cout«i«endl:

)

try

(

throw(O):

throw(',errorH);

}

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

catch

cout«nERROR"«endl;

}

returnO:

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

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

number=l

number=10

number=100

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

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

试题程序:

#include<iostrearn.h>

classTC

(

public:

TC(inti)

(

number=i;

)

voidSetNumber(intm)

(

number=m;

)

intGetNumberconst

(

returnnumber;

)

voidPrintconst

cout«"number="«number«endl;

private:

intnumber;

voidmain

TCobjl;

objl.Print;

TCobj2(3);

个个个个个个个个介rrcr个不不干不干不不

objl.number=10;

********errcr*%c******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

100

37

32

注意:错误的语句在//******err()r******的下面,修改该语句即

可。

试题程序;

#include<iostream.h>

/«£*«*»«*»**»«*»«*»

//*平*平不平prrc广’•、不’•、*•'

voidmain

/•1«•)«•1«•?*

//******errcr不不不不不不

intm=0142:

/*1**1**1**1**1**1*»!•*1•

//小小小小・年prmr不不不不不不

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

}

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

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

确。

程序输出:

8

8

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

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

试题程序;

#include(iostream.h>

classCO

public:

*ta/

/冰冰冰冰不斗不不prmr,『亭亭亭不不予不/

staticintn=O:

CO

n++:

〜CO

n—:

}:

I********enor********

intCO::n:

voidmain

COobj;

COobj2[7];

COCNULL:

c=&obj:

半年年年半**汴prmr‘/**不不不不不

eout«C.n«endl;

cout«C0::n«endl;

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=0;

charstr[120J;

cout«"Enterastringendwith?."«endl;

/不不不不不不不小prrcr不不不不不不不不

cin.getline(str,120);

while(str)

/1―X-**•

//不不不不不不不不prrcr不不不不不不不不

if(str[i])=a)

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

i++;

cout«str«endl;

return;

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

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

Constructor,i=0,

Destructor

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

可。

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

〜TC;

);

/不不不不不不error不不不不不不

TC:TC

(

cout«nConstructorn«M,”;

i=0;

)

小小•1«小•!«小小小error一不江•<L*<>*><*<*

TC:display

tout«Hi=',«i«H,M«endl;

/****举举pji*cr***不**

TC:TC

COUI«"Deslructor"«endl:

voidmain

TCa;

a.display;

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

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

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

程序异常,输出信息为

error

O

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

throw(nerror");

}

/*p*i**i**i**i**r*r*r不不不不不不不不

catch(chars)

(

cout«s«endl;

}

try

(

throw((int)0);

)

/不不不不不不不不prrcr不不不不不不不不

catch

(

coul«i«endl:

)

try

(

throw(O);

throw("error");

catch

(

cout«nERRORn«endl;

1

returnO:

五、综合应用题(2题)

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

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

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

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

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

要求:

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

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

修改程序的其他部分。

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

writeToFile已经给出并且调用。

//proj3.cpp

#include<iostream>

#include<fstream>

#include<catting>

usingnamespacestd;

classdoc

private:

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

intlength;〃文本字符个数

public:

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

符串首地址

doc(char*filename);

voidreverse;〃将字符序列反转

一doc;

voidwriteToFile(char*filename);

doc::doc(char}filename)

(

ifstreammyFile(filename);

intlen=1001,tmp;

atr=newchar[len];

length=0:

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

(

str[length++]=trap;

)

str[length]=<\0,;

myFile.close;

}

voiddoc::reverse{

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

第二个字符与倒数第二个

〃字符交换

//*!**!**1**1**1**1**1*»!*»!*、]•、].、]■*1*、[,、1.*1**1*、]■*1**1*»!**1**1*

(I,|、<,**,**.»*.»*.»*.»*.»**»*,»*,»444,.•*.»*•»/4、*•»•.、*,**,»*,»***,.、***

doc::〜doe

(

delete[Jstr;

)

voiddoc::writeToFile(char*filename)

(

OfstreamoutFile(filename);

outFile«str;

outFile.close;

}

voidmain

(

docmyDoc("in.dat");

myDoc.reveme;

myDoc.writeToFilef'out.dat");

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

义的类不完整,按要求完成下列操作,将类的定义补充完整。每卖出

一个水果,则计算水果的重量,还要计算所有卖出水果的总重量以及

总个数,同时允许退货,请按照以下的操作,把类补充完整。

⑴定义类TCFruit的私有静态数据成员float型变量AllWeight和int型

变量AHN0,请在注释1后添加适当的语句。

(2)完成类TCFruit的带一个float型变量w的构造函数,并把这个w加

到AllWeight中,并且AllNo自加。请在注释2后添加适当的语句。

⑶在析构函数中,在AHWeight中减去weight,然后AllNo自减,请

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

(4)完成静态成员变量的初始化为0,请在注释4后添加适当的语句。

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

他的程序代码。

试题程序:

#include(iostream.h>

classTCFruit

private:

floatWeight;

*1*

*7**7**7**7*I*1*«7w*7**7**7*

staticintAHNo;

public:

TCFruit(floatw)

/*1*

//年种半举半水水2水半*水半***

AllWeight+=w:

AllNo++:

〜TCFruit

/9•!<*1**1*4,

/t^T**^*^T^L*j**T**T**^*

AllWeight-=Weight:

)

voiddisplay

(

cout«',SellaFruitwithn«Weight«,'k9,'«

endl;

coutw''Allsellnumber:n«AllNo«endl;

cout«nAllsellweight:,,«AllWeight«"k9,'«

endl«endl;

}

};

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

floatTCFruit::AIIWeight=O.0;

intmain

(

TCFruitFruitl(l.2);

Fruitl.display;

TCFruitFruit2(2.3);

Fruit2.display;

returnO;

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

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

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

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

⑴在类定义外完成重载的两个构造函数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();

H**2**

doubledistance(doublebx,doubleby);

private:

doublex;

doubley;

);

//**]**

(

x=0;y=0;

)

CPosition::CPosition(doubledx,doubledy)

(

x=dx;y=dy;

}

doubleCPosition::getx()

(

returnx;

}

doubleCPosition::gety()

(

returny;

)

doubleCPosition::distance(doublebx,doubleby)

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打开考生文件夹下的工程MyProj5。此工程包含一个源程

序文件MyMain5.cpp,其中定义了用于表示日期的类Date,但类Date

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

①定义私有数据成员length,width和label,其中length,width是int

型Jabel是类point的对象。它们分别表示长方形的长、宽以及坐标点。

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

②完成构造函数square的定义,使square对象的默认值为:

length=0,width=0,label(0,0),请在注释“〃**2**”之后添加适当的语句0

③完成重载构造函数square(inthintw,intx,inty)的定义,把数据成员

length、width和对象label分别初始化为参数1、w、x和y的值,请在

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

④完成成员函数gel_area()的类外定义,此函数的功能是返回此长方形

的面积,及返回length*width的值。请在注释“〃**4***之后添加适当的

语句。

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

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

//MyMain5.cpp

#include<iostream>

usingnamespacestd;

classpoint

(

private:

intx,y;

public:

voidset(inti,intj)

(

x=i;

y=j;

)

intget_y()

(

returny;

)

);

classsquare

〃(**]**

public:

〃**2**

square(intl,intw,intx,inty)

(

〃**B**

)

voidset(intl,intw)

(

length=l;

width=w;

)

intget_area()const

(

returnlength*width;

)

);

intsquare::getarea()const

(

〃**4**

}

intmain()

squaresmall(2,4J,35);

cout<<small.get_area()<<endI;

return0;

参考-fry答案r-f-1

LB解析:本题考察宏定义的使用,宏在使用是如同函数一样,但却是

在编译时展开,而函数却是在运行时进行计算的。

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

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

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

3.D解析:在程序设计过程中,一个很重要的环节是首先确定实现各种

功能的算法,并且用某种工具将它精确地表达出来。流程图是其中的工

具之一°因此,程序设计的过程应是先画出流程图,然后根据流程图编

制出程序。因此,选项A中的说法是错误的。程序中的注释是为了提高

程序的可读性,使程序易于理解、易于维护,注释必须在编制程序的同

时加入。因此,选项B和C中的说法也都是错误的。

4.A

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

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

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

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

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

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

5.B

6.B解析:即使是共有继承,其私有成员仍为私有,无法访问。

7.C解析:在建立派生类时,并不是简单地把基类的私有成员直接作为

派生类的私有成员,把基类的公用成员直接作为派生类的公用成员。涉

及如何确定基类的成员在派生类中的访问属性问题,不仅要考虑对基类

成员所声明的访问属性,还要考虑派生类所声明的对基类的继承方式,

根据这两个因素共同决定基类成员在派生类中的访问属性。所以本题选

择选项C)o

8.B

9.D解析:在C++中,变量标识符必须以大小写字母或下划线开始,由

数字或者字母以及下画线等组成的一个字符串,其中C++关键字不能作

为标识符,不能包含-、+、・、*、/等运算符号。C++变量区分大小写,

不能以数字开头。

10.C解析友元函数的定义既可以在类内部进行,也可以在类外部进行。

它提高了程序的运行效率,但破坏了类的封装性和隐藏性,使得类的非

成员函数可以访问类的私有成员。

11.A

程序中的typename都可以替换为class,但程序中的class不可以全部

替换为typenameo在模板类型形参中除了typename和class以外,也

可以用常规类型来声明参数的类型,所以C、D选项错误。

12.C

基类中说明的虚函数,在派生类中自然就是虚函数,所以类B中fund

是虚函数;而类A中的func2没有被关键字virtual修饰,所以不是虚

函数。

13.D

14.D

15.B

解析:此题考查的是运算符的重载。C++中运算符重载是多态性的一

种表现,在C++语言中,这5个运算符不

能重载,所以选项B)错误。山于很多符号是一元运算符和二元运算符

公用的,为了避免含混,不得为重载的运算符函数设置默认值,调用

时也就不得省略实参。其中及所有的类型转换运算符

只能作为成员函数重载:如果允许第一操作数不是同类对象,而是其

他数据类型,则只能作为非成员函数重载。

16.D

17.C

18.C解析:在赋值操作中,将发生对象的拷贝操作,但并不说明两者是

完全一样的.一般情况下,如果绐类定义了赋值操作符,则应该同时定

义合适的拷贝构造函数,除非系统默认生成的拷贝构造函数满足赋值操

作。实际上,系统默认的拷贝构造函数仅仅将数据成员进行简单的对应

赋值,而在多数特殊应用中,这么简单的对应关系是不适用的,这就需

要程序员重新定义拷贝构造函数。

19.B解析:C++语言是对C语言进行了扩充,继承了它的语法,开增加

了面向对象的设计方法。

20.B

本题考查模板函数的应用,表达式int(l.1)和int(4.2)足将1.1和

4.2强制转换为整型。

21.B\nB°【解析】本题考核拷贝构造函数。上述程序中,拷贝构造函数

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

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

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

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

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

\n

22.D

Do【解析】TestClass为TestClassl的基类,在主函数main中定义

TestClass对象b,*P。TestClassl对象d,P指向d,调用其show函

数。44TestClass(inti):TestClass(i+1),b⑴{”吾句中的TestClass基类

参数为2,所以show输出2。

23.D解析:语句r=func(func(x,y),z);中,fun(x,y)是一次调用函数,

它的值作为func另一次调用的实参。注意本题调用两次函数。

24.无歧义性无歧义性解析:软件需求规格说明书是需求分析阶段的最

后成果,是软件开发中的重要文档之一。包括正确性、无歧义性、完整

性、可验证性、一致性、可理解性、可修改性和可追踪性等。其中最重

要的特性是无歧义性,即需求规格说明书应该是精确的、无二义的,需

求说明书越精确,则以后出现错误、混淆、反复的可能性越小。

25.降低复杂性降低复杂性解析:模块化是指解决一个复杂问题时自顶

向下逐层把软件系统划分成若干模块的过程,由此分解来降低复杂性。

26.20。20o解析:本题中,虽然Derived1和Derived?由于引入了虚

基类,使得它们分别对应基类的不同副本。这时数据成员x只存在一份

拷贝,不论在类Derived1中修改,还是在类Derived2中修改,都是直

接对这惟一拷贝进行操作。本题程序执行语句“Derivedobi;”时,就会

先调用虚基类Base的构造函数,使得x=0,然后执行类Derived1的构

造函数使得x=10,再执行类Derived2的构造函数,使得x=20。最后输

出x的值为20。

27.132

28.friendclassB

29.tbtb解析:此题考查的是对象的定义。对象的定义格式如下:类名对

象名(参数表):所以题目中的也是对象名标识符,而ta被定义成类MA

的指针,故空格处应填tb。

30.多态性多态性解析:对象根据所接受的消息而做出动作,同样的消

息被不同的对象接受时可导致完全不同的行为,该现象称为多态性。

31.Ta[]intnTa[],intn解析:函数f的形参之一为T类型的数组a,形参

之二为整型数n。

32.n=10n=10解析:本题考核常成员数据的应用。类Sample中,定义了

一个常数据成员n,所以构造函数只能通过初始化列表来初始化它,

33.4545解析:节点的度——节点拥有子树的个数。

树中节点总数为:1*6+2*4+3*3+4*3+5*5+6*1=66与根节点之和,即

66+1=67

树中非叶子节点数为6+4+3+3+5+1=22

树中叶子节点数为:67-22=45

34.classBase:3classBase:3解析:题中基类和派生类中有同名函数.但

是参数不同。有的考生可能判断为重载.却是错误的。重载仅发生在水

平方向,即同一类的成员函数或全局函数间。在垂直关系上,即派生关

系中,只有完全相同的函数类型、函数名和参数个数,参数类型时,才

表现多态性。本题中参数不同,编译器便认为是两个完全不同的函数。

通过基类的指针指向派生类对象时,该指针只能访问到派生类中具有多

态性的成员函数,而与基类无关的函数是无法通过基类指针来访问的。

故系统强制转化为整型,调用的是base类的func函数°如果将派生类

中的func的形参改为int型,则执行的就会是派生类的func函数,比时

表现为多态。

35.write

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

37.⑴应改为“ein.getline(str,120,?);

⑵应改为“while(str[i])".

(3)应改为巾]>=a&&str[i]v=2)”。

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

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

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

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

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

为小写,若为小写,则转换。所以应该修改为“while(st巾]广。第3处的

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

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

uif(str[i]>=a&&str[i]>=z)5,o

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

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

(3)应改为"outLput(s[i]);”。

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

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

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

中,输入、输出方式是在ios类中定义的,所以“outl.openC'l.txf,

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

Uout1.open("l.txt”,ios::binaryIios::app);第3个标识应

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

“outl.put(s[i]);

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处的叮Cobjl(l);:第2处处的

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

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

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

第3处=(2.$9m0^「(100);”语句中的T(2为类,并不是对象,这里

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

“obj2.SetNumber(lOO);"。

,,

41.(irvoidmaino

(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.(1)“staticintn=O”应改为"staticintn;"。

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

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

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

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

象,应改为飞0出《0>0<<©11(11;''。

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

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

,,

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

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

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

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

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

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

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

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

但是小写字符应该是a到2,所以修改为-a&&str[i[4-z)”。

44.(1)应改为“TC::TC\

⑵应改为“voidTC::display”。

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

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

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

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

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

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

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

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

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

相同,并在前面加“〜

温馨提示

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

评论

0/150

提交评论