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

下载本文档

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

文档简介

2023年辽宁省抚顺市全国计算机等级考试

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

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

一、1.选择题(10题)

I.以下有关成员函数特征的叙述不正确的是

A.成员函数一定是内联函数B.成员函数可以重载C.成员函数可以设

置缺省参数值D.成员函数可以是静态的

2.下列描述中错误的是()。

A.派生类可以作为基类派生其他的子类

B.派生类继承基类的所有数据成员

C.派生类可以有多个基类

D.派生类不能继承一些函数成员

3.类MyClass的定义如下:classMyClass{pubfic:MyClass(){value=0;}

SetVariable(inti){value=i;)private:intvalue;};则对下列语句序列

正确的描述是()。MyClass*p,my;p=&my;

A.语句p=&my;是把对象my赋值给指针变量p

B.语句MyClass*p,my;会调用两次类MyClass的构造函数

C.对语句*p.SetVariable。)的调用是正确的

D.语句p->SetVadable(5)与语句my.SetVariable⑸等价

4.下列关于this指针的叙述中,正确的是()

A.lhis指针是一个隐含指针,它隐含于类的成员函数中

B.只有在使用this时,系统才会将对象的地址赋值给this

C.类的友元函数也有this指针

D.this指针表示了成员函数当前操作的数据所属的对象

5.下面是重载为非成员函数的运算符函数原型,其中错误的是

A.Fractionoperator+fFraction,Fraction);

B.Fractionoperator-(Fraction);

C.Fraction&operator=(Fraction&,Fraction);

D.Fraction&operator4-=(Fraction&,Fraction);

6.对于语句cin>>x;中的各个组成部分,下列叙述中错误的是()。

A.“chT是一个输出流对象B.“的作用是表示语句结束C."x”是一个变

量D.“>>”称作提取运算符。

7.以下程序段的执行结果为()°^include<iostream.h>

#definePLUS(x,y)x+yvoidmain(){intx=l:y=2,Z=3,sum:sum=

PLUS(x+y,Z)*PLUS(y,Z):cout<<"SUM="<<sum;cout<<

endl:}

A.SUM=9B.SUM=12C.SUM=18D.SUM=30

8.函数定义为fun(int&i),变量定义n=100,则下面调用正确的是()。

A.fun(20);B.fun(20+n);C.fun(n);D.fun(&n);

9.若有以下程序:#include<iostream>usingnamespacestd;class

Base{public:Base(){x=0;}intx;};classDerivedl:virtualpublicBase

{public:Derivedl(){x=10;}};classDerived2:virtualpublicBase{public:

Derived2(){x=20;}};classDerived:publicDerivedl,protected

Derived?{};intmain(){Derivedobj;cout<<obj.x<<end1;return0;}

该程序运行后的输出结果是()。

A.20B.30C.10D.0

10.下列不属于3种基本控制结构是()。

A.顺序B.选择C.循环D.调用

二、单选题(13题)

(24)若要重栽+、=、<<、==和口运算符,则必须作为类成员重载的运算符是

A)+和=B)=和<<C)==和<<D)=和[]

11.

12.下面关于C++流的叙述中,正确的是

A.cin是一个输入流对象

B.可以用ifstrcam定义一个输出流对象

C.执行语句序列char*y="PQMN”;cout<<y;将输出字符串“PQMN”的

地址

D.执行语句序列charx[80];cin.getline(x,80);时,若键入Happynew

year则x中的字符串是"Flippy”

13.有如下程序段

inti=OJ=l;

int&r=i;〃①

r=j;//②

int*p=&i;〃③

*p=&r;〃④

基中会产生编译错误的语句是

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

14.有如下程序:

#include<iostream>

usingnamespacestd;

classB{

public:

virtualvoidshow(){cout«MBu;}};

classD:publicB{

public:

voidshow(){cout«,,Dn;}

);

voidfun1(B*ptr){ptr->show();

}voidfun2(B&ref){ref.show();

}voidfun3(BB){b.show();

intmain(){

Bb,*p=newD;

Dd;

funl(p);

fun2(b);

fun3(d);

returnO;

)

程序的输出结果是()oA.BBBB.BBDC.DBBD.DBD

15.耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的

是_________O

A.提高耦合性降低内聚性有利于提高模块的独立性

B.降低耦合性提高内聚性有利于提高模块的独立性

C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度

D.内聚性是指模块间互相连接的紧密程度

16.执行语句序列intx=l,&y=x;cout<<x<<'-1<<y<<endl;输出

结果为()

A.x-xB.1-1C.1-0D.异常

17.下面程序的结果是#include,,iostream.h,'voidmain(){char*str;Str

="test!";cout<<str[5];}

A.程序错误BJC.WD.为空字符

18.已知类MyClass声明如下:

classMyClass{

intn;

public:

MyClass(intk):n(k){)

intgetValue()const{returnn;}

);

在下列数组定义中正确的是O

A.MyClassxl[2];

B.MyClassx2[2]={newMyClass(l),newMyClass(2)};

C.MyClass*x3[2];

D.MyClass*x4[2]={MyClass(l),MyClass(2)};

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

A.静态数据成员可以在类体内进行初始化

B.静态数据成员不可以被类的对象调用

C.静态数据成员不能受private控制符的作用

D.静态数据成员可以直接用类名调用

20.下面程序的输出结果是()。

#include<iostreanl.h>

classexample

(

inta;

public:

example(intB.{a=b++;}

voidprint{a=aI1;cout«a«,M,;)

voidprintconst{cout<va<v'"';}

);

voidmain

(

examplex(3);

constexampleY(2);

Aprint;

Bprint;

)

A.22B.43C.42D.32

21.必须用一对大括号括起来的程序段是()。

A.switCh语句中的Case标号语句B.if语句的分支C.循环语句的循环

体D.函数的函数体

22.下列运算符中哪些是不能够被重载的?

A

B.new,delete,=

C.sizeof,new,delete,++,-

D.sizeof,new,delete,

23.下列程序的运行结果是()°

#include<iostream.h>

intx=5:

intfun(inta)

intC;

C=X*a:

returnC;

)

voidmain()

(

intx=3,a=4;

x=x+fun(a);

cout<<,'x="<<x<<endl:

)

A.x=15B.x=17C.x=23D.x=25

三、2.填空题(12题)

24.冒泡排序算法在最好的情况下的元素交换次数为【

25.有如下程序:

#include<iostream>

usingnamespacestd:

template<typenameT>

Ttotal(T*data){

Ts=0;

While(*data)s+=*data++;

returns;

1

intmain(){

intx[]=[2,4,6,8.10,12,14,16,18);

cout<<total(x);

return0;

)

执行上面程序的输出是______o

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

27.请将下列类定义补充完整。

classBase{public:voidfun(){cout<<"Base::fun"<<endl;}};

classDcrivcd:publicBase

(

public:

voidfun()

(

[]〃显式调用基类的fun函数

cout<<''Derived::fun1'<<endl;

)

);

28.顺序存储方法是把逻辑上相邻的结点存储在物理位置【】的存储单

元中。

29.下列程序的运行结果是_____o

#inclUde(iostream.h)

ClassA

{public:

Virtualvoiduse(){cout<<"inA'n";));

classB:publicA

{public:

virtualvoiduse(){cout<<"inB\n";}};

classC:publicB

{public:

Virtualvoiduse(){cout<<“inC\n^^;}};

void

30.已知如下程序的输出结果是23,请将画线处缺失的部分补充完整。

#include<iostream>

usingnamespacestd:

classMyClass{

public:

voidPrint()const{eout<<23;)

);

intmain(){

MyClass*P=newMyClass();

.Print();

return0;

)

31.将以下程序写成三目运算表达式是【】,

if(a>B)max=a;

elsemax=b;

32.数据模型按不同应用层次分成3种类型,它们是概念数据模型、I】

和物理数据模型。

33.重载的运算符保持其原有的【】、优先级和结合性不变。

34.下面程序的输出结果是____o

#include<iostream.h>

voidmain()

(

inta[6]={1,2,3,4,5.6);

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

cout<<a[i]<<;

cout<<endl;

35.如果类B继承了类A,则称类A为类B的基类,类B称为类A的

[]o

四、程序改错题(10题)

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

catch

(

cout«i«endl;

}

try

(

throw(O);

throw(nerrorn);

/^3>^1*>3^*1**1**1*_*1**1**1**t**i*•l^

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

catch

(

cout«nERRORn«endl;

)

returnO:

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

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

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

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

构,错误的语句在

/I******en*or******的下面°

试题程序:

#include<iostream>

#include<fstream>

/****举举**prror*不*****,•、

usingstd;

voidWriteFile(char*s)

ofstreamout1;

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

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

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

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

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

outl.puts(s[i]);

)

outl.close;

}

voidClearFile

(

ofstreamoutl;

outl.open(Hl.txt");

outl.close;

}

intmain

(

chars"024];

ClearFile;

cout«"pleaseinputastrin9:u«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

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;

)

//-V

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

TC:display

tout«"i=H«i«n,n«endl;

TC:TC

COUI«"Destructor"«endl:

}

voidmain

TCa;

a.display;

)

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

)

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

catch(chars)

(

cout«s«endl;

try

throw((int)0);

)

/汴举**举举汴*prrcr*不******

catch

(

cout«i«endl;

)

try

(

throw(O);

throwC^rror");

/*1*•!*•1・•1«•[・**•»****•*****«»**

//不不不不不不不不prrcr不干不不不不不不

catch

(

cout«,,ERROR,,«endl;

)

returnO:

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

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

number=l

number=10

number=100

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

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

试题程序:

#include<iostream.h>

classTC

public:

TC(inti)

(

number=i;

}

voidSetNumber(intmi

(

number=m;

)

intGetNumberconst

(

returnnumber;

)

voidPrintconst

(

cout«,,number=,'«number«endl;

)

private:

intnumber;

);

voidmain

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

TCobjl;

objl.Print;

TCobj2⑶;

objl.number=10;

II********e仃or*%。******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

}

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

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

Constructor,i=0,

Destructor

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

可。

试题程序:

#include(iostream.h)

classTC

inti;

public:

TC;

voiddisplay;

〜TC;

/

//*****不不不不予不

TC;TC

cout«,,Constructor',«M,"

i=0;

)

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

TC:display

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

)

/汴汴汴汴不举prmr不不不不不不

TC:TC

(

COUI«"Destructor"«endl:

)

voidmain

(

TCa;

a.display;

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

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

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

到屏幕中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?.n«endl;

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

cin.getline(str,120);

/I/不”「不*1*不KM”「KM不*1*不不error干不干干干干干不

while(str)

(

/******汴汴0rrcr不不不不不不予予

if(str[i])=a)

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

i++:

)

cout«str«endl;

return;

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

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

为:

sizeof(S1)=5

sizeof(s2)=10

sizeof(s3)=l

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

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

⑴不能删除assert()语句。

(2)只能修改后面的数字。

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

试题程序:

#include<iostream.h>

#include<asseil.h>

voidmain()

chartsl=',abcM:

/

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

assert(sizeof(s1)==3):

cout«nsizeof(s1)=5u«endl;

chars2[10]=nabn:

//

//不不不不不不不不prrcr不干不不不不不不

asseil(sizeof(s2)==2);

coiit«',sizeof(s2)=10,'«endl;

chars3=23:

assert(sizeof(s3)==4);

cout«,,sizeof(s3)=l,'«endl;

return;

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

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

确。

程序输出:

8

8

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

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

试题程序:

#include(iostream.h>

classCO

(

public:

7*7*7*7*7*7*7*7*/

不不•门*i*不pi*rY、r不干干不干不不干?

staticintn=O:

CO

(

n++:

}

〜CO

):

f7,•[,«{**£**2*f

/不不不不不不不不arrr、r不不不不不不不不/

intCO::n;

voidmain

COobj;

COobj2[7];

COCNULL:

c=&obj:

不举***汴汴汴P]T()r,・••・••・•不不不不•・•/

eout«C.n«endl;

cout«C0::n«endl;

}

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

inti=0;

charstr[120J;

cout«MEnterastringendwith?."«endl;

cin.getline(str,120);

while(str)

//

//不不不不不不不不prmr不不不不不不不不

if(str[i])=a)

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

i++;

cout«str«endl;

return;

五、综合应用题(2题)

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

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

(1)定义类的公有数据成员函数NO、NameL32J,其中NO是int型的数

据,Name[32]为字符型。请在注释1后添加适当的语句。

(2)完成函数Set的定义,分别设置N0和Name的值,请在注释2后添

加适当的语句。

⑶完成函数print,请在注释3后添加适当的语句,输出结果如下:

N0=12345

Name=HelloWorld!

(4)添加默认构造函数,设置NO为0,Name为空,请在注释4后添加

适当的语句。

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

他的程序代码。

试题程序:

#include<iostream.h>

classTC

(

public:

/at«

//*4**4**4*I*7*

///水*1*•宇1*•!字*•!*«*1**1**1**1*2*•1«*•1«*•1«****3**«*1*

No=no;

for(inti=0:strName[i]!=O:i++)

Name[i]=strName[i];

Name[i+1]=0;

voidprint()

/*1**1**1**3**1**1**1**1**1**1*«1*

/Irj*«J%rjw

TC()

/女女女女**女女4火女女女火女来来)

};

intmain()

(

TCstu:

stu.Set(12345,nHelloWorld!");stu.print();

returnO;

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

ClaSSDalaList{〃数据表类inlfen;

double*d;public:

DataList(intlen,doubledatalJ=NULL);DataList(DataList&data);

intlengthConst{returnlen;}

doublegetElement(inti)Consttreturnd[i];}

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

showConst;//显示数据表

};

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

#inCludevDataList.h"

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

doubletlen];

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

d(Wi=(data==NULL?O.0:data[i]);

)

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

doubleflen];

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

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

表求和double*dd=newdoubleflist.lensthl;

returnDataList(list.length,dd);}

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

eout«d[i]vv'',";

Cout«dllen-1J«endl;

intmain{

doublesl[]={1,2,3,4,5,6};

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

DataListlistl(6,si),list2(6,s2);〃定义两个数据表对象eoutvv”两个

数据表:"vvendl:

listl.show:list2.show;eoutwendlw”两个数据表之

和:”vVendl:

(listl+list2).show;

writeToFile(,,,\listl+list2);return0:

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

4g使用VC6打开考生文什夹下的工程testl_3o此工程包含一个

testl_3.cpp,其中定义了类circle和column,其中column类由circle类

protected派生,但两个类的定义并不完整。请按要求完成下列操作,将

程序补充完整。

⑴定义类circle的保护数据成员r和area,它们都是double型的数据。

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

⑵添加类circle的无参数的构造函数,使circle对象的r默认值为0,请

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

(3)添加派生类column构造函数的定义,传入的参数为double型的height

和radius,并将具分别赋值给数僻成员h和基类的r,请在注释“//**3**”

之后添加适当的语句。

(4)完成派生类column的成员函数print的定义,使其以格式“r=_area=_"

先输出半径r和底面积area,再以格式“h=_vol=_”输出高h和体积vol

的值,请在注释“〃**4**”之后添加适当的语句。

输山结果如下:

r=larea=3.1416

h=2voI=6.2832

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

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

#include<iostream.h>

constdoublepi=3.1416;

classcircle

(

protected:

〃**j**

public:

circle(doubleradius){r=radius;}

voidprint()

(

area=r*r*pi;

cout<<,,r=n<<r<<"n<<',area="<<ared<<endl;

classcolumn:protectedcircle

protected:

doubleh;

public:

〃**3**

voidprint()

**4**

voidmain()

(

columncol(1.0,2.0);

Col.print();

)

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

序文件testlO_3.cpp,其中定义了用于表示雇员信息的CEmployee类与

表示公司信息的Company类,但这两个类的定义并不完整。请按要求

完成下列操作。

⑴定义Cemployee类的私有数据成员name(大小为50的字符数组)和

pay(double型数据),分别用于记录雇员姓名和月薪。请在注释“〃**1**»

之后添加适当的语句。

(2)完成Company类默认构造函数的定义,该构造函数将n值赋值给私

有成员nam,并完成指针emp所指的n个Cemployee对象空间的申请,

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

⑶完成Company类成员函数voidCompany::add(血code,charname[50],

doublepay)的定义,该函数将某一雇员的编号code、姓名name及月薪

pay输入到公司信息中。请在注释”之后添加适当的语句。

(4)完成Company类成员函数voidCompany::print()的定义,使其以“_is

paidRMBforouemonth”的格式输出公司内所有员工的月薪信息。请在

注释,,//**4**»之后添加适当的语句。

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

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

#include<iostream.h>

#include<string.h>

classCEmployee

(

public:

voidputname(charn[50]){strcPY(name,n);)

voidgetname(charn[501){strcDY(n,name);)

voidputpay(doubled){pay=d;)

doublegetpay(){returnpay;)

private:

〃**]**

);

classCompany

(

private:

CEmployee*emp;

intnum;

public:

Company(intn);

voidadd(intCOde,Charname[50],doublepay);

voidprint();

}

Company::Company(intn)

(

)

voidCompany::add(intcode,Charname[50],doublepay)

(

voidCompany::print()

(

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

(

(emp+i)->getname(C);

money=(emp+i)->getpay();

cout<<C<<"ispaid"<<money<<"

RMBforonemonth"<<endl;

}

)

voidmain()

(

Companycom(2);

com.add(0,"Jack'1,200);

com.add(l,"Lee",300);

com.print();

)

参考答案

I.A解析:本题是一个综合题,考察几种常用的修饰词与成员函数之间

的关系。Inline和static均可以修饰成员函数的。

2.B解析C++语言中通常有3种继承修饰符public,protected和private,

限制依次严格,另外对类中的数据和函数也有这3种修饰符进行限制。

一个派生类能不能继承基类的所有数据成员受它们的限制。注意:C++

语言中继承关系的修饰符publie,protected和private的运用。

3.D

4.D解析:本题考核thiso类的每一个成员函数都有一个隐含定义的常

量指针,称为this指针。它是成员函数所属对象的指针,它指向类对象

的地址。成员函数可以通过这个指针知道自己属于哪一个对象。当对一

个对象调用成员函数时,编译程序先将对象的地址赋值给this指针,然

后调用成员函数,每次成员函数存取数据时,则隐含使用this指针。但

是在使用this指针时需要注意的是:this指针只能在类的成员函数中使

用,它指向该成员函数被调用的对象。this指针一般用于返回当前对象

自身静态成员函数没有this指针。因为类只有一个静态成员函数实例,

所以使用this指针没有什么意义。在静态成员函数中使用this指针会弓|

起编译错误。

5.C解析:类的赋值运算符』”只能被重载为成员函数,不能重载为友元

函数。

6.A解析:本题考核C++的输入流°cin是一个输入流对象,所以A选

项的叙述是错误的。

7.B

8.C解析:本题考核函数的调用方法。当函数的参数是引用类型时,参

数不能为常量、表达式和变量地址,只能是变量本身。

9.A解析:木题中,虽然Derived1和Derived2都是由共同的基类x派生

而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这

时数据成员x只存在一份拷贝,不论在类Derived1修改,还是在类

Derived?中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句

“Derivedobj"时,就会先调用虚基类Base的构造函数,使得x=0,然后

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

数,使得x=20o最后输出x的值为20o

10.D解析:顺序、选择和循环是程序的三种基本控制结构。

11.D

I2.A解析:本题考核C++流的概念和I/O的格式化。cin是istream类的

对象,即输入流对象。ifstream是输入文件流类不能定义个输出流对象。

C选项中执行语句序列char*y=PQMN;cout<<y;后将输出字符串

PQMN\getline函数功能是允许从输入流中读取多个字符,并且允许指

定输入终止字符(默认是换行字符),在读取完成后,从读取的内容中删

除该终止字符,所以D选项中的语句序列后x中字符串应该是Happy

newyear'o

13.A

14.C

Co【解析】本题考查的知识点是虚函数与多态性。在成员函数声明的

前面加上virtual修饰,即把该函数声明为虚函数。在C++41,一个

基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针

(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象

类的那个重定义版木。故木题最终输出结果为DBB。

15.B模块独立性是指每个模块只完成系统要求的独立的子功能,并且与

其他模块的联系最少且接口简单。一般较优秀的软件设计,应尽量做到

高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有

利于提高模块的独立性,所以人错误,B正确。耦合性是模块间互相连

接的紧密程度的度量而内聚性是指一个模块内部各个元素间彼此结合

的紧密程度,所以C与D错误。故答案为B选项。

16.B

17.D解析:70'输出为不显示,只代表一个字符串的结束。注意:C++语

言中各种字符转义序列的意义和应用。

18.C

本题主要考查了对象数组、指针数组和new运算符。new运算符返回

指向指定类型的一个指针。对象数组是指数组元素为对象的数组,该

数组中的每一个元素都是同一个类的对象。定义对象数组时,系统将

自动调用构造函数仓J建每一个对象元素,因为类MyClass中定义了一

个有一个整型参数的构造函数,编译器将不再为其生成缺省构造函

数,所以定义对象数组时必须分别调用有参构造函数为每一个数组元

素指定初始值。因此选项A错误,没有初始化对象数组;选项B中,用

指向对象的指针初始化对象数组,类型不匹配,因此选项B错误;指针

数组是由指针组成的数组,即数组中的每一个元素都是指向同一类型

对象的指针。选项C定义了指向MyClass类对象的指针数组x3,该定

义语句正确;选项D中,只能用指向MyClass类对象的指针或用已有的

MyClass类对象的地址来初始化指针数组x4的每一个元素,不能用对

象进行初始化,因此选项D错误。

19.D解析:静态数据成员必须在类体外初始化,它是类的所有对象的共

有成员,需要使用类名调用,静态数据成员的初始化与权限控制无关。

20.C

“++”是右结合的,所以先赋值为3,最后输出3+1;常成员函数只有常

对象才能调用,所以输出2。

21.D

解析:本题考查的知识点是;语句块和函数。if语句的分支和循环语

句的循环体可以是一条语句也可以是一个语句块,所以不是必须用一

对大括号括起来;switch语句中的case标号语句可以是一系列语句,

也可以包含语句块,也不是必须用一对大括号括起来:函数的函数体

必须使用一对大括号括起来。故本题应该选择D。

22.A解析:C++语言中的不能重载的操作符是和?

23.C

Co【解析】由主函数main入手,首先X被赋值为3,a被赋值为4,

然后调用fun函数,参数为4,所以在fun函数中的a=4。而主程序中

的X作用域是由它定义开始到cout输出,在fun函数中无效。而在

fun函数定义前的变量X作用域是整个程序,所以fun函数中的x值为

5,这样c的值就为20。在主函数中的x+fun(a)中的X为靠近这条语

句的x定义,即3,所以最后x的值为20+3=23。

24.00解析:冒泡排序算法在最好的情况下(已经有序的)元素交换次数

为0。

25.20

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

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

27.Base::fun();

28.相邻相邻解析:常用的存储表示方法有4种,顺序存储、链式存储、

索引存储、散列存储。其中,顺序存储方法是把逻辑上相邻的结点存储

在物理位置也相邻的存储单元中。

29.inCoinCo解析:本题考查虚函数和多态性。原本obj指向祖先

类,随后被赋值,指向新的子孙类,则在使用use这个重载的虚函数时,

根据当前指向可确定调用子孙的同名虚函数。

30.(*p)

31.max=(a>B?a:b;max=(a>B?a:b;解析:条件运算符要求有三个

操作对象,称三目(元)运算符,它是C++语言中惟一的一个三目运算符。

条件表达式的一般形式为:表达式1?表达式2:表达式3。所以我们可

以写成(a>B?a:b,它是一个“条件表达式执行顺序是如果(a>B条件

为真,则条件表达式取值a作为整个表达式的值,否则取值b作为整个

表达式的值。

32.逻辑数据模型逻辑数据模型解析:数据是现实世界符号的抽象,而

数据模型(datamodel)则是数据特征的抽象,它从抽象层次上描述了系

统的静态特征、动态行为和约束行为,为数据库系统的信息表示与操作

提供一个抽象的框架。数据模型按不同的应用层次分成3种类型,它们

是概念数据模型(conceptualdatamodel)、逻辑数据模型(logicdatamodel)、

物理数据模型(physicaldatamodel)o

33.操作符个数操作符个数解析:本题考查的是运算符重载的概念,用

户重新定义的运算符不改变原运算符的优先性和结合性,也不改变运算

符的语法结构.也就是说重载运算符不会产生新的运算符。

34.12345。12345。解析:本题考查的是考生使用简单循环输出数

组元素的能力,因为结束条件是i<5,而i初始值为0,所以只会输出

前5个元素。

35.派生类派生类解析:如果类A为类B的基类,那么类B称为类A

的派生类。

36.(1)应改为"catch(char*s)’'。

⑵应改为“cateh(inti)”。

(3)应改为"catch(…)”°

【解析】本题中第1个标识前的异常抛出语句为“throwderror");”,其

中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类

型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语

句修改为“catch(char*S)”。第2个标识前的异常抛出语句为

“throw((int)0);",其中的类型为int。对应的异常捕捉语句calch中应

该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配

的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处

的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类

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

改为“catch(…)”。

37.(1)应改为"usingnamespacestd;

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

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

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

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

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

中,输入、输出方式是在加类中定义的,所以“outl.open(nl.txf,

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

Uout1.open(Hl.txtM,ios::binaryIios::app);第3个标识应

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

4€outl.put(sfi]);

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

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

\n(3)应改为“TC::

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

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

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

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

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

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

3处的语句叮(2::10可知,显然这里是在类外实现析构函数,析构函

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

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

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)应改为"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++中

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

t49,

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

第3处叮(:.$@1m11^「(100);”语句中的丁(:为类,并不是对象,这里

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

“obj2.SetNumber(lOO);"。

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

(2)应改为"voidTC::display"o

⑶应改为“TC::〜TC”。

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

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

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

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

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

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

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

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

相同,并在前面加“〜”字符,用采与构造函数加以区别,因此第3处

的语句应改为“TC::〜TC”。

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

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

⑶应改为“if(st巾]>=a&&st币]<=2广。

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

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

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

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

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

为小写,若为小写,则转换。所以应该修改为“while(str[i])»。第3处的

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

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

44,,

if(str[i]>=a&&str[i]>=z)o

43.(1)应改为"assert(sizeof(s1)=4);

\n⑵应改为"assert(sizeoRs2)=lO);”。

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

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

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

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

常,不能正常执行。因

温馨提示

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

评论

0/150

提交评论