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

付费下载

下载本文档

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

文档简介

2021年湖北省咸宁市全国计算机等级考试

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

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

一、L选择题(10题)

1.在C++语言程序中

A.函数的定义可以嵌套,但函数的调用不可以嵌套

B.函数的定义和调用均可以嵌套

C.函数的定义和调用均不可以嵌套

D.函数的定义不可以嵌套,但函数的调用可以嵌套

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

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

3.以下程序的执行结果是()。#include<iostream.h>template<class

T>classSample{Tn;Public:Sample(Ti){n=i;)voidoperator++();

voiddisp(){cout<<"n="<<n<<endl;}};template<classT>void

Sample<T>::opetat

A.n=aB.a=OC.n=bD.a=b

4.“年龄在18-25之间”这种约束是属于数据库当中的

A.原子性措施B.一致性措施C.完整性措施D.安全性措施

5.若二维数组a有m列,则计算任一元素a[i]用在数组中相对位置的公

式为(假设a⑼⑼位于数组的第一个位置上)()o

A.i*m+jB.j*m+IC,i*m+j-lD,i*m+j+l

6.字符串通常采用的两种存储方式是()o

A•链式存储结构和索引存储结构

B.顺序存储结构和散列存储结构

C.顺序存储结构和链式存储结构

D.索引存储结构和散列存储结构

7.有以下程序:#include<iostream>usingnamespacestd;intfl(intx,

inty){returnx>y?x:y;}intf2(intx,inty){returnx>y?y:x;}intmain

(){inta=4,b=3,c=5,d,e,f;d=fl(a,b);d=fl(d,c);e=f2(a,b);e=

f2(e,c);f=a+b+c-d-e;cout<<d<<","<<e<<","<<f<<endl;

return0;}执行后的输出结果是()。

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

8.已有函数max(a,b),为了使函数指针变量p指向函数max,则下面

选项中赋值方法正确的是()。

A.p=maxB.*p=maxC.p=max(a,b)D.*p=max(a,b)

9.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象

的加法,并返回相加结果,则该成员函数的声明语句为O

A.ABoperator+(AB&a,AB&b)

B.ABoperator+(AB&a)

C.opemtor+(ABa)

D.AB&operator+()

10.下列运算符中,在C++语言中不能重载的是()。

A.*B,>=C,::D./

二、单选题(13题)

11.有以下程序:

classDate

(

public:

Date(inty,intm,intd);

(

year=Y:

month=m;

day=d;

)

Date(inty=2000)

(

year=y;

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

returnO;

)

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

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

12.下面程序的运行结果为()。#include<iostream.h>

voidswap(int&a,intb){inttemp;temp=a++;a=b:b=temp:}

voidmain(){inta=2,b=3;swap(a,b);cout<<a<<","<<b

<<endl;}

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

13.对于switch(C)中的变量c不能定义为的类型是()。

A.unsignedB.intC.charD.float

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

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

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

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

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

15.有如下函数模板声明:template<typenameT>TMax(Ta,T

b){return(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)

16.将小写字母H赋值给字符变量ch,正确的操作是()。

A.ch='\n'B.ch=110C.ch="n"D,ch='N'

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

A.y_2006B._EST_HC.RetumD.switch

18.下面有关内联函数的叙述中,正确的是()。

A.内联函数体的最后一条语句必须是return语句

B.内联函数必须通过关键字inline来定义

C.内联函数通过编译器来实现的

D.内联函数在调用时发生控制转移

19.与数学式子汇一对应的C语言表达式是

A.3*xAn/(2*x-l)

B.3*x**n/(2*x-l)

C.3*pow(x,n)*(l/(2*x-l))

D.3*pow(n,x)/(2*x-l)

20.类MyClass的定义如下:classMyClass{public:MyClass(){}

MyClass(inti){value=newint(i);}int*value;};若要对value赋值,

则下面语句正确的是()。

A.MyClassmy;my.value=10;

B.MyClassmy;*my;*value=10;

C.MyClassmy;my.*value=10;

D.MyClassmy(10);

21.有如下程序:

intx=3:

do{

x-=2;

COU[<<X:

}while(!(-X));

A.lB.30c.i—2D.死循环

22.在C++语言程序中,对象之间的相互通信通过()o

A.继承实现B.调用成员函数实现C.封装实现D.函数重载实现

23.有如下程序:

#include<iostream>

#include<cstring>

usingnamespacestd;

classXCF{

inta;

public:

XCF(intaa=0):a(aa){cout<<"l";}

XCF(XCF&x){a=x.a;cout<<"2";}

-XCF(){cout<<a;}

intGeta(){returna;}

);

intmain(){

XCFdl(5),d2(dl);

XCF*pd=newXCF(8);

cout<<pd->Geta();

deletepd;

return0;

)

运行时的输出结果是.O

A.1215588B.1218855C,12185D.128512

三、2.填空题(12题)

24.在结构化设计方法中,数据流图表达了问题中的数据流与加工间的

关系,且每一个实际上对应一个处理模块。

25.有如下类定义:

classSample{

public:

Sample();

〜Sample();

private:

Staticintdate:

);

将静态数据成员data初始化为0的语句是_____o

26.在C++语言中,访问一个对象的成员所用的运算符是____,访

问一个指针所指向的对象的成员所用的运算符是______。

27.以下程序的输出结果o

#include<iostream.h>

voidmain()

(

inta=0

a+=(a=8);

cout<<a;

)

28.栈中允许进行插入和删除的一端叫做o

29.对下列二又树进行中序遍历的结果为o

30.实体之间的联系可以归结为一对一的联系,一对多的联系与多对多

的联系。如果一个学校有许多学生,而一个学生只归属于一个学校,则

实体集学校与实体集学生之间的联系属于【】的联系。

31.在C++语言的面向对象程序设计框架中,【】是程序的基本组成单

JL»o

32.阅读下面程序:

#include<iostream.h>

intfun2(intm)

(

if(m%3==0)

return1;

else

return0;

}

voidfun1(intm,int&s)

(

inti;

for(i=l;i<m;i++)

if(fun2(i))

S=S*i;

)

voidmain()

(

intn=9,s=2;

funl(n,s);

cout<<s<<endl;

该程序的运行结果是【】。

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

34.当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,

不能进行入队运算。这种情况称为【】。

35.在C++中,类的成员有3种访问权限,它们分别是公有、【】和私

有。

四、程序改错题(10题)

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

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

为:

sizeof(Sl)=5

sizeof(s2)=10

sizeof(s3)=l

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

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

⑴不能删除assert()语句。

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

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

试题程序:

#include<iostream.h>

#include<assert.h>

voidmain()

(

char*sl="abc":

II********error********

assert(sizeof(s1)=3):

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

chars2[10]="ab":

II********error********

assert(sizeof(s2)==2);

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

chars3=23:

II********ej*j*o[********

assert(sizeof(s3)==4);

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

return;

)

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

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

100

37

32

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

可。

试题程序:

#include<iostream.h>

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

voidmain

(

I/************

intm=0142:

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

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

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

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

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

到屏幕中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

/I********eppor********

cin.getline(str,120);

/I********eppor********

while(str)

/I********eppor********

if(str[i])=a)

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

i++;

)

cout«str«endl;

return;

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

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

确。

程序输出:

8

8

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

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

试题程序:

#include(iostream.h>

classCO

public:

/********epj^0r********I

staticintn=O:

CO

n++:

CO

n—:

):

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

intCO::n;

voidmain

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

/********ej*j*or********/

eout«C.n«endl;

cout«C0::n«endl;

)

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

throw("error");

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

catch(chars)

(

cout«s«endl;

try

throw((int)0);

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

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

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

catch

(

cout«"ERROR"«endl;

)

returnO;

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

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

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

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

构,错误的语句在

/I************白勺-।,jo

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

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

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

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

/I********epj*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;

42.使用VC++6.。打开考生文件夹下的源程序文件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);

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

objl.number=10;

/I*************

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

number=l

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

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

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

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

Constructor,i=0,

Destructor

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

试题程序:

#include(iostream.h)

classTC

inti;

public:

TC;

voiddisplay;

-TC;

);

II******epx*or******

TC:TC

cout«"Constructor"«","

i=0;

)

II******ex*j'or******

TC:display

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

II******or******

TC:TC

COUI«"Destructor"«endl:

voidmain

TCa;

a.display;

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«''Enterastringendwith?."«endl;

II********eppor********

cin.getline(str,120);

II********eppor********

while(str)

II********eppor********

if(str[i])=a)

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

i++;

cout«str«endl;

return;

五、综合应用题(2题)

46.

请使用【答题】菜单命令或直接用VC6打开考生文件夹下的工程

prog3,其中声明了ValArray类,该类在内部维护一个动态分配的整型

数组。ValArray类的复制构造函数应实现对象的深层复制。请编写

ValArray类的复制构造函数。在main函数中给出了一组测试数据,此

种情况下程序的输出应该是:

ValArrayvl={l,2,3,4,5}ValArrayv2={b2,3,4,5}要求:

补充编制的内容写在“〃*********333*********"与

"〃*********666*********”之间,不得修改程序的其他部分。

注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile

已经编译为boj文件,并且在本程序中调用。

//ValArray.h

#include<iostream>usingnamespacestd;classValArray{

int*v:intsize;public:

ValArray(constint*P,intn):size(n){

v=newint[size];

for(inti=0;i<size;i++)v[i]=P[i];

47.使用VC++6.。打开考生文件夹下的源程序文件3.cpp。类

People包括姓名和年龄两个字段。函数fun获得年龄比较大的人的姓

名,然后输出这个姓名到屏幕。

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

整。

⑴完成类的构造函数功能,请在注释1后添加适当的语句。

(2)完成构造函数对姓名的赋值,请在注释2后添加适当的语句。

(3)定义类的友元函数fun,请在注释3后添加适当的语句。

(4)补充函数fun的年龄比较功能,请在注释4后添加适当的语句。

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

他的程序代码。

试题程序:

#include<iostream.h>

classPeople

(

public:

(

inti;

for(i=0;sUserName[i]!=0;i++)

{m_UserName[i]=sUserName[i];

///********2*1**1**1**1**1**1**1**1*

m_01d=n01d;

)

private:

charm_UserName[32];

intm_01d;

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

);

voidfun(char*s,People&personl,People&person2

(

II********4********

if

(

for(inti=0;personl.m_UserName[i]!=0;i+

+)

(

s[i]=personl.m_UserName[i];

s[i+l]=0;

)

)

else

(

for(inti=0;person2.m_UserName[i]!=0;i+

+)

{s[i]=person2.m_UserName[i];

s[i+l]=0;

voidmain

chars[32];

Peoplepl("abc",20);

Peoplep2("def",30):

fun(S,pl,p2);

cout«s«endl:

return;

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

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

test42_3,cpp,其中定义了类CpolygonxCOutput和CTriangle,其中

CTriangle类由Cpolygon和COutput类public派生,但三个类的定义并

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

⑴定义类CPolygon的保护数据成员width和height,它们都是int型的

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

(2)完成类CPolygon的成员函数set_values(inta,intb),使参数a和b分

别赋值给保护数据成员width和height,请在注释“//**2**”之后添加适

当的语句。

(3)完成类Coutput的成员函数output(int)的定义,将传入的参数为血型

的i输出到屏幕并换行,请在注释“〃**3**”之后添加适当的语句。

(4)完成派生类CTriangle的声明,它由Cpolygon和COutput类public派

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

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

#include<iostream.h>

classCPolygon

(-

protected:

〃**]**

public:

voidset_values(inta,intb)

(

〃**2**

)

);

classCOutput

(

public:

voidoutput(inti);

);

voidCOutput::output(inti)

**3**

}

〃**4**

public:

intarea(void)

(

return(width*height/2);

)

)

intmain()

(

CTriangletrgl;

trgl.set_values(4,5);

trgl.output(trgl.area());

return0;

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

序文件test23_3.cpp,其中定义了类X和它的友元类Y,但它们的定义并

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

⑴将类X的静态数据成员y初始化为lo请在注释“〃**1**”之后添加适

当的语句。

(2)完成类丫的构造函数丫(inti,intj)的定义,将参数i赋值给类丫的数

据成员,X的对象a中的数据成员x,并且把参数j赋值给类X的数据

成员y,请在注释“〃**2**”之后添加适当的语句。

⑶完成类丫的成员函数voidDisplay。的定义,将丫的数据成员,X的

对象a中的数据成员x和类X的数据成员y按照“x=_,y=_”的形式显示

出来代表一个数字),请在注释“〃**3**”之后添加适当的语句。

输出结果如下:

x=5,y=l

x=6,y=9

x=5,y=9

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

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

include<iostream.h>

classX

(

friendclassY;

public:

voidSet(inti){x=i;}

voidDisplayO

(

cout<<"x="<<x<<

cout<<"y="<<y<<endl;

)

private:

intx;

staticinty;

);

classY

public:

Y(inti,intj)

voidDisplayO;

private:

Xa;

);

〃**]**

Y::Y(inti,intj)

(

)

voidY::Display()

〃**3**

)

voidmain()

(

Xb;

b.Set(5);

b.DisplayO;

Yc(6,9);

c.Display();

b.DisplayO;

)

参考答案

LD解析:本题考查函数的定义,调用及其嵌套之间的关系。

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

3.C

4.C解析:对数据库各种特性必须有正确的理解。@解析@数据库的完

整性是指数据的正确性和相容性(如学生的学号必须惟一,性别只能是

女或男等),数据库是否具备完整性关系到数据库系统能否真实反映现

实世界,因此维护数据库的完整性是非常重要的。注意:数据库的各种

特性及表达形式。

5.A解析:。口]「]元素之前有i行元素(每行有m个元素),在的前

面还有j个元素,因此之前共有i*m+j个元素。

6.C解析:字符串的两种最基本的存储方式是顺序存储方式和链接存储

方式。

7.B解析:本题考核函数的调用和条件运算符⑺。解此题前,先来复习

一下条件运算符的运算规则。

对于表达式:〈表达式1〉?(表达式2>:(表达式3>,它的运算方

式为:先计算表达式1的值,如果其值为真(true),则表达式2的值就是

整个表达式的最终结果,否则表达式3的值就是整个表达式的值。

在了解条件运算符的运算规则后,来看函数门()和已()。根据条件运算

符的运算规则,可得到函数门()的功能是返回两数中的较大值,函数也()

的功能足返回两数中的较小值。再分析主函数,由于a=4,b=3,d经过

第1次赋值后得到值为4,即d=4od的

第2次赋值表达式为“d=fl(d,C)”,由于此时d=4、c=5,故经过两次赋

值后得到d=5。同样e经过两次赋值后可得e=3。再把a=4、b=3、c=5、

d=5、e=3代入表达式f=a+b+c-d-e,最后得到f=4。

8.A

9.B解析:实现两个AB类对象的加法,井返回相加结果的成员函数,

声明语句应该为ABoperator+(AB&a)。

10.C

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

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

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

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

d进行初始化;第3次是在执行fun函数中的返回语句retumtemp;

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

\n

12.D

Do【解析】本题考查引用调用,因为函数swap引用调用参数a,所

以在swap函数中a的变化会改变主函数中a的值,即a自力口1。但b

的值并未改变。

13.D解析:选择语句switch(c)中的c必须属于整型、字符型或枚举型。

所以答案为D。

14.A

Ao【解析】本题考查的知识点是运算符的重载。运算符重载为成员函

数时,形参个数一般为运算符的元数减1,因为此成员函数所属的对象

可成为运算符的一个运算分量。重载为非成员函数时,形参个数一般

和运算符元数相等。所以,二元运算符重载为非成员函数时,参数表

中应有两个参数,运算符重载为成员函数时,若参数表中无参数,重

载的是一元运算符。一元运算符中,一取负运算符、++增1运算

符、-减1等运算符均可重载为成员函数,C++中,有...*、

->*、::、?:五个运算符不能重载。

15.B解析:此题考查的是函数模板的引用。引用模板函数和引用一般

函数在语法形式上基本相同。需要注意的是说明一个函数模板后,当编

译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否

匹配函数模板中的对应形参。本题选项B)中,编译系统从第一个参数

“3.5”获得信息“double型数据”和从第二个参数获得信息“int型数据”两

者矛盾,错误;A、选项C)正确:选项D)中,函数名后的〈double〉是

模板实参表,编译系统会将血型的形参“4”自动转化成double类型。

16.B解析:字母在C++语言中是以ASCII码存放的,即以整数形式存

放。n对应的ASCII值是110,由于对n所对应的ASCII码值不清楚,

所以解析本题只能采用排除法。选项A中,是回车换行符。选项C

中存放的是字符串no选项D中存放的是字母No

17.D

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

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

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

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

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

18.C解析C++中的内联函数可以有,也可以没有return语句。使用inline

关键字来定义内联函数,放在函数定义中函数类型之前。内联函数在程

序执行时并不产生实际函数调用,而是在函数调用处将函数代码展开执

行。内联函数是通过编译器来实现的。在类中直接定义的函数默认为内

联函数。

19.C解析:本题考查将数学表达式翻译为C++语句,其中pow(x,n)用于

求xn的值。

20.D

21.C

本题考查do...while语句,执行do...while语句时,先执行循

环体内的语句,然后判断while中表达式的值,表达式为非零时,返回

重新执行循环体语句。在本题中,先执行循环体内的语句,输出1,然

后判断表达式,为非零,且此时X为①再次执行循环体时,输出-

2,然后判断表达式为0,不执行,退出,所以答案为c。

22.B解析:对象属于某个已知的类,是类的实例,对象之间通信实际上

就是通过函数传递信息,封装是把数据和操作结合在一起,继承是对于

类的方法的改变和补充,重载是多态性之一。

23.B

本题主要考查了构造函数、拷贝构造函数和析构函数。main()函数中,

语句XCF\r\ndl(5),d2(dl);先后创建了两个对象dl和d2。在创建对象

dl时,系统自动调用了构造函数,dl数据成员a的值为5,输出字符

1;在创建对象d2时是用已创建的对象dl初始化,系统自动调用拷贝

构造函数,对象d2数据成员a的值为5,输出字符2;然后执行语句

XCF\r\n*pd=new\r\nXCF(8);系统再次调用构造函数通过new运算符动

态创建了一个XCF类的对象,该对象的数据成员a的值为8,输出字

符1,并将首地址赋给XCF类的指针pd。成员函数Geta()的功能是获

取数据成员a,因此执行语句cout«pd->Geta();输出8。接着执行语句

delete\r\npd;系统自动调用析构函数,输出指针pd所指向对象的数据

成员a,即输出8,当main()函数结束时,系统先自动调用析构函数删

除对象d2,输出对象d2的数据成员a的值5,然后再次调用析构函数

删除对象dl,输出对象dl的数据成员a的值5。因此程序输出结果为

1218855c

24.加工。加工。解析:数据流图是从数据传遵和加工的角度,来刻画

数据流从输入到输出的移动变换过程,其中的每一个加工对应一个处理

模块。

25.intSample::data=O;

26.成员选择运算符(或”.”);成员访问运算符(或"->”)成员选择运算符

(或“.”),•成员访问运算符(或>')解析:本题考查的是使用对象和对象

指针访问成员所使用的符号的不同,考生请注意它们的区别。

27.16

28.栈顶栈顶解析栈是限定在表的一端进行插入和删除操作的线性表。

在表中,允许插入和删除的一端叫做“栈顶”,不允许插入和删除的一端

叫做“栈底”。

29.ACBDFEHGPACBDFEHGP解析:二叉树中序遍历的含义:首先按中

序遍历根结点的左子树。然后访问根结点,最后按中序遍历根结点的右

子树。中序遍历二叉树的过程是一个递归的过程。根据题目中给出的二

叉树的结构可知,中序遍历的结果是ACBDFEHGPO

30.一对多一对多解析:实体之间的联系可以归结为一对一、一对多与

多对多。如果一个学校有许多学生,而一个教师只归属于一个学生,则

实体集学校与实体集学生之间的联系属于一对多的联系。

31.类类解析:C++语言面向对象程序设计的基本组成单元是class,面

向过程的程序设计的基本组成单元是函数。

32.36

33.私有私有解析:派生类成员在私有继承方式下不能访问基类的所有

成员,在保护继承方式下不能访问基类的私有成员,在公有继承方式下

不能访问基类的私有成员。

34.上溢上溢解析:入队运算是指在循环队列的队尾加入一个新元素。

这个运算有两个基本操作:首先将队尾指针进一(即rear=rear+l),并当

Year=m+1时置rear=1;然后将新元素插入队尾指针指向的位置。当循

环队列非空(s=l)时且队尾指针等于队头指针时,说明循环队列已满,不

能进行入队运算,这种情况称为“上溢”。

35.保护保护解析:类成员有3类访问权限:公有(public)、私有(private)

和保护(protected)。

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

何2)应改为、55611(51260心2)==10);”。

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

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

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

“assert(sizeof(sl)==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);*。

37.(l)“voidmain”。

(2)“intm=0144;

(3)“intn=OX25;”或“intn===0x25;

【解析】本题主要考查了主函数定义及幕同进制之间的转换,包括十

进制到八进制,十进制到十六进制。主函数定义的定义形式为

“main”,函数名之后必须是一对括号,因此第1处应改为“voidmain”。

cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发

现变量的初值不正确,十进制的100对应八进制的144,卡进制的37

对应十六进制的25,因出:2和3应分别改成“intm=0144;”,

“intn=0x25;”或“intn=0x25;

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

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

,,

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

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

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

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

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

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

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

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

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

t4,,

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

39.(l)“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;"。

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

⑵应改为“cateh(inti)”。

(3)应改为"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)应改为"usingnamespacestd;"。

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

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

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

42.(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处7C.SetNumber(lOO);”语句中的TC为类,并不是对象,

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

“obj2.SetNumber(lOO);

43.(1)应改为"TCobjl⑴;二

3(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++中

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

5,

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

第3处“TC.SetNumber(lOO)厂'语句中的TC为类,并不是对象,这里

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

“obj2.SetNumber(lOO);

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

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

W⑶应改为“TC::~TC”。

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

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

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

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

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

函数返回值为v

温馨提示

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

评论

0/150

提交评论