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

下载本文档

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

文档简介

2023年广东省佛山市全国计算机等级考试

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

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

一、L选择题(10题)

1.以下程序的输出结果是()。mainQ{inta=4,b=5,c=0,d;d=!a&&!b)||!

c;cout<<d<<endl;}

A.lB.OC.非。的数D,-l

2.设有以下程序段:

inta[5]={0},*p,*q;

P=a;

q=a;

则下列选项目,合法的运算是

A.p+q;B.p-qC.p*qD.p%q

3.为引入对象的同义词,对象的别名称为

A.指针B.引C・枚举D.结构

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

A.程序执行的效率与数据的存储结构密切相关

B.程序执行的效率只取决于程序的控制结构

C.程序执行的效率只取决于所处理的数据量

D.以上三种说法都不对

5.若变量已正确定义并赋值,以下符合C++语言语法的表达式是()。

A.a:=b+lB.a=b=c+2C.intl8.5%3D.a=a+7=c+b

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

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

A.在模块化程序设计中,一个模块应该尽量多的包括与其他模块联系的

信息

B.在自顶向下、逐步细化的设计过程中,首先应设计解决问题的第一个

细节

C.在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则

D.在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序

设计方法

8.VisualFoxPro是一种()o

A.数据库管理系统软件B.操作系统软件C.文字处理软件D.CAD软

9.若有以下宏定义:

#defineN2

#defineY(n)((N+l)*n)

则执行语句z=2*(N+Y(5));后的结果是()。

A.语句有错误B.z=34C.z=70D.z无定值

10.下列程序的输出结果为

#include<iostream.h>

voidmain()

(

char*a[]={"hello},"the","world");

char**pa=a;

pa++;

cout<<*pa<<endl;

)

A.helloB.theC.worldD.hellotheworld

二、单选题(13题)

H.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访

问性与单继承的规则()o

A.完全相同B.完全不同C.部分相同D.以上都不对

12.if语句的语法格式可描述为:

格式1:if(<条件>)<语句>

或格式2:if(〈条件〉)〈语句1>else<语句2>

关于上面的语法格式,下列表述中错误的是

A.<条件>部分可以是一个if语句,例如if(if(a==0)...)...

B.<语句>部分可以是一个if语句,例如if(…)if(…)…

C.如果在<条件>前加上逻辑非运算符!并交换<语句1>和<语句2>

的位置,语句功能不变

D.<语句>部分可以是一个循环语句,例如if(...)while(...)...

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

A.任何与类相关的函数都有this指针

B.类的成员函数都有this指针

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

D.类的非静态成员函数才有this指针

14.下列排序方法中,最坏情况下比较次数最少的是。

A.冒泡排序B.简单选择排序C.直接插入排序D.堆排序

15.有以下程序:#include<iostream>usingnamespacestd;#definePl

3.14ClassPoint{private:intx,y;public:Point(inta,intB){X=a;

y:b;}intgetx()<returnx;}intgety(){returny;}};classCircle:

publicPoint{pri

A.314B.157C.78.5D,153.86

16.下列关于模板的说法正确的是()。

A.模板的实参在任何时候都可以省略

B.类模板与模板类所指的是同一概念

C•类模板的参数必须是虚拟类型的

D.类模板中的成员函数全部都是模板函数

17.有如下程序:

#jnClude<iostream>

usingnamespaCestd;ClassPart{

public:

Part(intx=0):val(X){Cout«val;}~Part{Cout«val;}

private:

intval;t};

ClassWhole{public:

Whole(intx,intY,intz=0):p2(x),pl(y),val(z){Cout«val;}

Whole{eout«val;}

private:

PartpLp2;intval;

);

intmain{

Wholeobj(l,2,3);return0;

)

执行这个程序的输出结果是()。A.123321B.213312C.213D.123123

18.在E—R图中,用来表示实体联系的图形是()。

A.椭圆形B.矩形C.菱形D.三角形

19.关于纯虚函数,下列表述中正确的是()o

A.纯虚函数是没有给出实现版本(即无函数体定义)的虚函数

B.纯虚函数的声明总是以“=0”结束

C.派生类必须实现基类的纯虚函数

D.含有纯虚函数的类不可能是派生类

20.下列字符串中。不可以用做C++标识符的是()。

A.y_2006B._EST_HC.RetumD.switch

21.有如下程序:

#inClude<iostream>usingnamespaCe而寸:ClassMyClass{

public:

MyClass{++Count;}

~MyClass{—Count;}

staticintgetCount{returnCount;}private:

staticintCount;

};cintMyClass::Count=0;

intmain{

MyClassobj;

Cout«obj.getCount;

MyClass+ptr=newMyClass:Cout«MyClass::9etCount;5delete

ptr;

Cout«MyClass::9etCount;return0;

执行这个程序的输出结果是()。A.121B.232C.221D.122

22.在数据管理技术发展的三个阶段中,数据共享最好的是()。

A.人工管理阶段B.文件系统阶段C.数据库系统阶段D.三个阶段相同

23.一个类的友元函数能够访问该类的o

A.私有成员B.保护成员C.公有成员D.所有成员

三、2.填空题(12题)

24.在关系代数运算中,并、笛卡尔积、投影、选择和【】为基本的运

算。

25.将x+y*z中的用成员函数重载,“*”用友元函数重载应写为[】。

26.在下面横线上填上适当的语句,完成程序。

#include<iostream>

usingnamespacestd;

classTestClass

(

intx;

public:

TestClass(inti){x=i;}

〜TestClass(){}

);

classTestClasskpublicTestClass

(

public;

//完成类TestClassl构造函数的定义

);

intmain()

TestClass1Obj();

return0;

)

27.在TestClass类的定义中,对赋值运算符=进行重载。请将画线处缺失

的部分补充完整。TestClass::operator=(constTestClass&rhs)

(

if(this==&rhs)return*this;

value=rhs.value;

return*this;

)

28.下面程序的输出结果是【】。

#include<iostream>

usingnamespacestd;

intx;

voidfunA(int&,int);

voidfunB(int,int&);

intmain()

(

intfirst;

intsecond=5;

x=6;

funA(first,seconD);

fimB(first,seconD);

cout<<first<<""<<second<<""<<x<<endl;

return0;

voidfunA(int&a,intB)

intfirst;

first=a+b;

a=2*b;

b=first+4;

)

voidfunB(intu,int&v)

(

intsecond;

second=x;

v=second+4;

x=u+v;

)

29.类继承中,缺省的继承方式是一

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

#include<iostream.h>

voidmain()

(

inta=5,b=4,c=3,d;

d=(a>b>C);

cout<<d;

31.如果类Alpha继承了类Beta,则类Alpha称为派生类,类Beta称为

[]类。

32.若有函数fun(x,y),并且已经使函数指针变量p指向函数fun,贝IJ使

用P调用函数fun的方法是______o

33.在面向对象方法中,类之间共享属性和操作的机制称为【】。

34.类模板的使用实际上是将类模板实例化成一个具体的【】。

35.模块独立性概念是模块化,抽象,【】。这些软件工程基本原理的直

接产物。

四、程序改错题(10题)

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

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

确。

程序输出:

8

8

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

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

试题程序:

#include(iostream.h>

classCO

(

public:

I********ei*ror********/

staticintn=O:

CO

(

n++:

)

〜CO

):

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

intCO::n;

voidmain

(

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

/********ej*£*or********I

eout«C.n«endl;

cout«C0::n«endl;

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

行时有错误,请改正程序中的错误,使得程序输出:

9,8,7,6,5

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

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

试题程序:

#include(iostream.h>

classTC

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

TC(inti)

(

m_i=i;

)

voidprint

(

cout«—m_i«,;

}

public:

intm_i;

intmain

I********epfor********I

inti;

TC04(10);

while(i>5)

I**************I

1++

04.print;

)

cout«endl;

returnO;

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

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

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

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

构,错误的语句在

/I******ej*ror******白勺-旧j。

试题程序:

#include<iostream>

#include<fstream>

********ex*j^or********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

II********ej*j*or********

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

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

(

II********ej^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

II********ej*j*or********

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

I/********eno[******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

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

程序异常,输出信息为

error

O

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

try

throw("error");

********ei^i^or********

catch(chars)

(

cout«s«endl;

try

throw((int)0);

********error********

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

II********ej*j*or********

catch

(

cout«"ERROR"«endl;

returnO;

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

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

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

到屏幕中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

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

cin.getline(str,120);

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

while(str)

********error********

if(str[i])=a)

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

i++;

)

cout«str«endl;

return;

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

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

为:

sizeof(Sl)=5

sizeof(s2)=10

sizeof(s3)=l

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

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

⑴不能删除assert()语句。

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

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

试题程序:

#include<iostream.h>

#include<assert.h>

voidmain()

char*sl="abc":

II********ej*j*or********

assert(sizeof(sl)==3):

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

chars2[10]="ab":

II********ej*j*or********

assert(sizeof(s2)==2);

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

chars3=23:

Ii********eppor********

assert(sizeof(s3)==4);

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

return;

43.使用VC++6-0打开考生文件夹下的源程序文件

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

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

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

构,错误的语句在

II************自勺~

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

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

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

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

II********ej*j*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;

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

II********ej*j*or********

cin.getline(str,120);

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

while(str)

II********ej*j*or********

if(str[i])=a)

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

1++;

)

cout«str«endl;

return;

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

throw("error");

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

catch(chars)

(

cout«s«endl;

)

try

(

throw((int)0);

)

//********eppor********

catch

(

cout«i«endl;

)

try

throw(O);

throw("error");

catch

(

cout«"ERROR"«endl;

)

returnO;

)

五、综合应用题(2题)

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

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

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

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

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

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

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

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

(3)在析构函数中,在AllWeight中减去weight,然后AllNo自减,请

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

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

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

他的程序代码。

试题程序:

#include(iostream.h>

classTCFruit

(

private:

floatWeight;

staticintAHNo;

public:

TCFruit(floatw)

(

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

AllWeight+=w:

AllNo++:

)

〜TCFruit

(

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

A11Weight-=Weight:

)

voiddisplay

{1

cout«"SellaFruitwith"«Weight«"k9"<<

endl;

cout«,,Allsellnumber:''«A11No«endl;

cout«"Allsellweight:"«A11Weight«"k9"«

endl«endl;

);

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

floatTCFruit::AllWeight=O.0;

intmain

(

TCFruitFruitl(l.2);

Fruitl.display;

TCFruitFruit2(2.3);

Fruit2.display;

returnO;

)

47.(l)“while"应改为"while(in行le.get(ch))”。

(2)应添加"bur[len++]=ch;bur[len]=ch;len++;

(3)应添力口“outflle2«bur[i++];,,^tcoutfile2«buf[i];i++;

5,

(4)“TCobj;”应改为“TCobi("in.txt");o

【解析】本题考查了文件流的使用。根据题意,第1处要获得一个字符,

并判断是否到文件结尾,所以应使用get函数;第2处应将ch存入buf

数组,同时让len增1;第3处将buf中的字节输出给outfile2,注意同

时让i增1,否则while循环将进入死循环悌4处TC只确一个带char*

参数的构造函数,所以创建对象时必须使用构造参数,根据题意这个参

数应该是“"in.txt"”。

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

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

test37_3.cpp,其中定义了类Letter和Number以及Grid,其中Grid类由

Letter类和Number类public派生,但三个类的定义并不完整。请按要

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

⑴添加类Letter的带一个参数c的构造函数,c是char型的数据,默认

值为A,该函数把参数c的值赋给类的保护成员ch,请在注释“〃**1**”

之后添加适当的语句。

(2)添加类Number的带一个参数n的构造函数,n是int型的数据,默

认值为0,该函数把参数n的值赋给类的保护成员num,请在注释

“〃**2**,,之后添加适当的语句。

⑶添加派生类Grid构造函数的定义,传入的参数为char型的c和血型

的n,并将其分别赋值给基类的ch和num,请在注释“//**3**”之后添加

适当的语句。

(4)完成派生类Grid的友元函数——“<<”运算符重载的定义,使其以

格式“[g.ch,g.num/输出,请在注释“〃**4**”之后添加适当的语句。

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

#include<iostream,h>

classLetter

(

protected:

charch;

public:

〃**]**

);

classNumber

(

protected:

intnum;

public:

〃**2**

);

classGrid:publicLetter,publicNumber

(

public:

〃**3**

friendostream&operator<<(ostream&o,Grid&g);

);

〃**4**

(

o<<"["<<g.ch<<","<<g,num<<

returno;

)

intmain()

(

Gridg('C,3);

cout<<"Gridreference:"<<g<<endl;

return0;

)

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

序文件test25_3.cpp,其中定义了用于表示堆的类Set,但它的定义并不完

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

⑴完成成员函数intIsMemberOf(intn)的定义,该函数检查参数n是否

在类的数据成员数组elems中,如果在返回1,反之返回0o请在注释

“〃**1**”之后添加适当的语句。

(2)完成成员函数intAdd(intn)的定义,如果参数n包含在类的数据成员

数组elems中则返回1如果数组超界则返回0,如果都不是,则将参数

n插入到elems中,下标大小为类的数据成员PC,之后PC自加一。请在

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

(3)完成拷贝初始化构造函数Set(Set&s)的定义请在注释“〃**3**”之后

添加适当的语句。输出结果如下:

1

()

{1,2,3,4,5,6,7,8)

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

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

#include<iostream.h>

classSet

public:

Set(){PC=O;}

Set(Set&s);

voidEmpty(){PC=O;}

intlsEmptyO{returnPC==O;}

intIsMemberOf(intn);

intAdd(intn);

voidPrint();

private:

intelems[100];

intPC;

};

intSet::IsMemberOf(intn)

(

〃**]**

if(elems[i]==n)

return1;

returnO;

)

intSet::Add(intn)

(

〃**2**

return1;

elseif(PC>=100)

returnO;

else

(

elems[PC++]=n;

return1;

)

)

Set::Set(Set&s)

(

〃**3**

for(inti=O;i<PC;i++)

elems[i]=s.elems[i];

)

voidSet::Print()

(

cout<<

for(inti=O;i<PC-1;i++)

cout<<elems[i]<<

if(PC>O)

cout<<elems[PC-l];

cout<<"}"<<endl;

)

voidmain()

(

SetA;

cout<<A.IsEmptyO<<endl;

A.Print();

SetB;

for(inti=l;i<=8;i++)

B.Add(i);

B.Print();

参考答案

LA解析:本题考查逻辑运算符!逻辑“非”,&&逻辑“与",||逻辑“或”,

三者的优先级顺序为!>&&>II,本题中d=!4&&!5||!0,即d=0||l,

也即d=lo

2.B解析:本题考核指针的运算。C++语言中,指向同一字符串的指针之

间可以,也只能进行减运算,减运算后返回的是一整型数,表示指针之

间的地址偏移量。

3.B解析:引用是C++引入的一个新概念,表示变量或对象的别名。

4.A本题考查程序效率。程序效率是指程序运行速度和程序占用的存储

空间。影响程序效率的因素是多方面的,包括程序的设计、使用的算

法、数据的存储结构等。在确定数据逻辑结构的基础上,选择一种合适

的存储结构,可以使得数据操作所花费的时间少,占用的存储空间少,

即提高程序的效率。因此,本题选项A的说法是正确的。

5.B解析a=b=c+2实际上相当于a=(b=c+2),进而可分解为两个表达式:

b=c+2和a=bo注意:选项A)中包含一个不合法的运算符“:=”;选项

C)应改为(int)185%3选项D)可理解为两个表达式a+7=c+b和a=a+7,

其中第一个是错的,因为C++语言规定赋值号的左边只能是单个变量,

不能是表达式或常量等。注意:C++语言赋值语句的运用,

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

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

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

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

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

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

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

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

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

7.CC。【解析】在模块化程序设计中,模块之间的联系可以通过程序的

控制结构来实现,在自顶向下、逐步细化的设计过程中,首先要考虑全

局目标,而不是细节。在程序设计中模块化和结构化可以同时使用,一

个模块的内部结构也要符合结构化设计原则。

8.A解析:VisualFoxPro属于小型数据库管理系统软件,它是微软的产

品,只具备数据库管理系统的一些简单功能。

9.B

\r\n

本题考查宏定义的功能,可以把它看成一个函数,直接代人参数,可

计算出结果为34,故选B。

10.B解析:本题主要考查的是指针数组和指向指针的指针之间的关系,

其中a是指针数组,pa是指向指针数组行的指针,所以pa自加1相当

于指向下一行。

1LA解析:在多继承中,公有派生和私有派生对于基类成员在派生类中

的可访问性与单继承的规则完全相同。

12.A

解析:本题考查的是if语句。if语句的条件部分是一个表达式而不是

语句,因此选项A的说法不正确。

13.D解析:本题考核this指针的使用。类的每一个成员函数都有一个隐

含定义的常量指针,称为this指针。它是成员函数所属对象的指针,它

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

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

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

前对象自身;静态成员函数没有this指针。因为类只有一个静态成员函

数实例,所以使用this指针没有什么意义。在静态成员函数中使用this

指针会引起编译错误。

14.D冒泡排序、简单插入排序与简单选择排序法在最坏情况下均需要比

较n(n-l)/2次,而堆排序在最坏情况下需要比较的次数是nlog2n。故答

案为D选项。

15.A解析:本程序设计了一个点类Point,包含了横,纵两个坐标数据

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

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

圃Circle类的对象cl,并通过它的构造函数初始化其数据成员。由此可

知,其半径r的值为10,所以其面积为PI*10*10=314,即对象cl的函

数成员area的返回值为314。

16.D

Do【解析】在C++中规定如果一个类被声明为类模板,那么其中的

所有成员函数就都成为了模板函数。

17.B

本题考查带参数的构造函数。本题中定义了一个对象。bj,那么执行其

构造函数,初始化pl,p2的顺序是由声明这两个成员的顺序决定的,

而不是由参数化列表顺序决定,所以本题中,会先执行pl,输出2,

然后执行p2输出1,然后输出3,最后一次输出312。所以本题答案为

8o

18.CCO【解析】E—R图也即实体~联系图(EntityRelationshipDiagram),

提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型,

构成E—R图的基本要素是实体型、属性和联系,其表示方法为:实体

型(Entity):用矩形表示,矩形框内写明实体名,•属性(Attribute):用椭圆

形表示,并用无向边将其与相应的实体连接起来;联系(Relationship):

用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起

来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。

19.B

Bo【解析】纯虚函数是在声明虚函数时被“初始化”为0的虚函数。纯

虚函数没有函数体,纯虚函数的作用是在基类中为其派生类保留一个

函数名称。

20.D

本题考查C++标识符的命名规则,其规则有如下几点:①所有标识符

必须由字母、数字或下画线组成,且必须由字母或下画线开头;②所

有标识符不能使用C++已有的关键字;③大、小写字母表示不同意

义,即代表不同的标识符。选项C中虽然retum是关键字,但因首字

母大、小写不同,也可用于标识符,但不建议使用。故答案为D。

21.A

本题考查静态数据成员。静态数据成员在内存中只占一份空间,静态

数据成员属于类,即使不定义对象,也会给静态数据成员分配空间,

可以被引用。本题中先是定义了一个对象obj,执行构造函数使得静态

数据成员count变为了1,然后又定义了指针对象,执行构造函数后,

count变为了2,释放指针后,执行析构函数,使得count变为了1。所

以本题答案为A。

22.C数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶

段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强

物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,

所以选择C)。

23.D解析:一个类的友元函数对类成员的访问能力等同于类的成员函

数,即能访问类的所有成员。

24差差

25.operator+(operator*(yz))operator+(operator*(y,z))解析:C++中用成

员函数重载x*y为:x.operator*(y),用友元函数重载x*y为:

operator*(x,y),用成员函数重载x+y为:x.operator+(y),用友元函数

重载x+y为:operator+(x,y)。

26.TestClassl(inti):TestClass(i){}TestClassl(inti):TestClass(i){)解析:

程序中的TestClassl为TestClass的派生类,派生类构造函数的一般形

式为:派生类构造函数名(总参数类表):基类构造函数名(参数列

表){派生类中新增数据成员初始化语句}。派生类TestClassl的基类函

数名为TestClass,参数为inti,并且派生类中没有新增的数据成员。

所以派生类TestClassl的构造函数为:TestClassl(inti):TestClass(i){}o

27.TestClass&TestClass&解析:如果要重载一个类的运算符=,通常需

要定义自己特有的拷贝构造函数。在类体中可以增加:(const&

operatorlestClass&rhs);然后在TestClass的类体外给出它的完整定

义:

TestClass&TestClass::operator=(constTestClass&rhs)

{•••}

所以在TestClass类的定义中缺少了TestClass&语句。

28.101020101020解析:本题考核函数的引用传递。“引用,‘实际上是

给一个已知变量起个别名,对引用的操作也就是对被它引用的变量的

操作。函数funA的功能是将第二个实参的值乘以2再赋值给第一个实

参(通过引用传递实现),函数funB的功能是将全局变量x加上4再赋

值给第二个实参,同时x等于第一个实参与第二个实参相加的和。

29.私有继承私有继承

30.00解析:水题的关键在于对变量c的赋值运算:

d=(a>b>c)

d=(5>4>3)

先算5>4,为真,得1,即:d=(l>3),此时1>3,为假,得0。

31.基基解析:在C++语言中,可以从一个类派生出另一个类。派生

其他类的类称为基类(或父类),被派生的类称为派生类(或子类)。一个

派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派

生的继承称为单继承,从多个基类派生的继承称为多继承。

32.(*p)(xy)(*p)(x,y)解析:一个函数总是占用一段连续的内存区,而函

数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址

(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通

过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针

变量称为“函数指针变量”。函数指针变量定义的一般形式为:类型说

明符(*指针变量名)();其中“类型说明符”表示被指函数的返回值的类

型。飞*指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空

括号表示指针变量所指的是一个函数。

33.继承继承解析:类是面向对象语言中必备的程序语言结构,用来实

现抽象数据类型。类与类之间的继承关系实现了类之间的共享属性和

操作,一个类可以在另一个已定义的类的基础上定义,这样使该类型

继承了其超类的属性和方法,当然,也可以定义自己的属性和方法。

34.类类解析:本题考查的是类模板的使用方式,就是把类模板的一般

化定义实例化为一个真正的类。

35.信息隐蔽信息隐蔽

36.(l)“staticintn=O"应改为"staticintn;"。

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

(3)“cout«c.n«endl;"应改为"cout«c->n«endl;

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

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

象,应改为"cout«c->n«endl;"。

37.(1)应添加“public:

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

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

\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、

保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类

的对象被访问。故应在构造函数前添加“public:",否则该类无法被实例

化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造

参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i

每次减1,在i>5时循环,故i初始化应为10。若循环中i每次增1,则

循环永远不会退出。

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

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

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

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

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

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

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

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

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

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

“outl.put(s[i]);”。

39.(1)应改为"TCobjl(l);

(2)应改为“Objl.SetNumber(lO);

(3)应改为“0bj2.SelNumber(lOO);

【解析】本题第1处的“TCobjl;”语句是声明TC类的对象Objl,根据

TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个

输出结果两1,所以补全参数1,即第1处的“TCobjl(l);第2处处

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

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

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

例。第3处“TC.SetNumber(lOO);”语句中的TC为类,并不是对象,

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

“obj2.SetNumber(lOO);

40.(1)应改为"catch(char*s)”。

⑵应改为“cateh(inti)”。

⑶应改为“catch(…)”。

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

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

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

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

c'throw((int)0);”,其中的类型为int。对应的异常捕捉语句catch中应

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

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

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

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

改为“catch(…)”。

41.(1)应改为“ein.getline(str,120,?);

⑵应改为“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臼是否为小写字符,而现有的语句只

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

,5

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

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

3(2)应改为、55611(51260%2)==10);”。

W(3)应改为"assert(sizeof(s3)==l);”。

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

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

ctassert(sizeof(s1)==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,所以修改为

"assert(sizeof(s3)==1);”。

43.(1)应改为"usingnamespacestd;

W⑵应改为“outl.open('l.txt',ios::binary|ios::app);

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

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

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

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

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

app);”语句缺少类ios,即第2处的语句修改为"outl.openCl.txf,ios::

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

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

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

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

5,

W(3)应改为"iRstr[i]>=a&&str[i]<=2)o

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

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

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

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

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

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

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

但是小写字符应该是a到2,所以修改为“if(str[i]>=a&&str[i]>=z)”。

45.(1)应改为"catch(char*s)”。

(2)应改为"cateh(inti)”。

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

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

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

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

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

c'throw((int)0);”,其中的类型为int。对应的异常捕捉语句catch中应

该符合这个类型,所

温馨提示

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

评论

0/150

提交评论