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

下载本文档

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

文档简介

2022年河北省张家口市全国计算机等级考

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

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

一、1.选择题(10题)

1.执行语句序列ofetreamoutfileC'DATA.DAT");if(...)cout<<"OK";

elsecout<<"FAIL";后,如果文件打开成功显否则就显ZF

"FAIL%由此可知,上面if语句的.一处的表达式应是

A.outfile.fhil()或outfile

B.outfile.good。或!outfile

C.outfile.good。或outfile

D.outfile.fhil()或!outfile

2.栈和队列的共同特点是()。

A渚K是先进先出B渚K是先进后出C.只允许在端点处插入和删除元素

D.没有共同点

3.当需要将一个函数boolisnumber(charC)声明为内联函数时,则此内

联函数的函数原型为()。

A.enumboolisnumber(charC);

B.defineboolisnumber(charC);

C.inlineboolisnumber(charC);

D.externboolisnumber(chatC);

4.设有程序段intk=10;while(k=0)k=k-1;则下面描述中正确的是

A.循环执行10次B.无限循环C.循环体语句一次也不执行D.循环体语

句执行一次

5.在下面的一维数组定义中,有语法错误。

A.inta[]={l,2,3}B.inta[10]={0}C.inta[]D.inta[5]

6.下列输出字符,A,的方法中,错误的是()

A.cout<<put('A');

B.cout<<'A';

C.cout.put('A');

D.charA-A';cout<<A;

7.如果x=0,那么while(true)中的true与下面的条件()等价。

A.X=1B.X=1C.X>1D.X<1

8.下面程序的运行结果是#include<iostream.h>voidmain(){inti=l;

while(i<=8)if(++i%3!=2)continue;elsecout<<i;}

A.25B.36C.258D.369

9.下列说法不正确的是()。

A.基类指针可以指向它的公有派生类的对象

B.指向基类的对象的指针可以指向派生类的对象,因而可以访问派生类

的对象的成员

C.基类指针不能指向其私有派生类的对象

D.指向派生类对象的指针不可以指向基类的对象

10.下列关于C++函数的描述中正确的是()。

A.主函数是程序的入口,它由用户定义的函数调用

B.函数在调用之前必须先被声明

C.每个用户定义函数只能被其他函数调用一次

D.函数是C++中面向对象程序设计框架的基本组成单元

二、单选题(13题)

11.下面程序的结果是()。

#include(iostream.h>

classA

(

inta;

public:

A():a(l){}

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;

showa();

}

A.lB.2C.3D.程序有错误

12.下列数据模型中,具有坚实理论基础的是()。

A.层次模型B.网状模型C.关系模型D.以上3个都是

13.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是

A.10B.8C.6D.4

14.按照“先进先出”原则组织数据的数据结构是()0

A.队列B.栈C.双向链表D.二叉树

15.数据视图的描述称为()。

A.A.外模式B.内模式C.概念模式D.存储模式

16.语句int*P=&k;定义了指针P,与这个语句等效的语句序列是()。

A.int*p;P=&k;

B.int*P;P=k;

C.int*p;*P=&k;

D.int*p;*P=k;

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

A.静态数据成员是类的所有对象共享的数据

B.类的每个对象都有自己的静态数据成员

C.类的不同对象有不同的静态数据成员值

D.静态数据成员不能通过类的对象调用

18.数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各

种数据结构进行的运算,以及()。

A.A.数据的存储结构B.计算方法C.数据映象D.逻辑存储

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

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

20.下列运算符中,不能被重载的是()。

A.B.!=C..D.++

21.C++系统预定义了4个用于标准数据流的对象,下列选项中不属于此

类对象的是()。

A.coutB.cinC.cerrD.cset

22.下列对重载函数的描述中,错误的是()。

A.A.重载函数中不允许使用默认参数

B.重载函数中编译是根据参数表进行选择的

C不要使用重载函数来描述毫不相干的函数

D.构造函数重载将会给初始化带来多种方式

23.已知类A有公用数据成员a,并重载了=运算符,且有Aobj2;

constA*ptr=newA;,则下列语句错误的是()。

A.ptr->a=100;B.ptr=&obj2;C.ptr++;D.obj2=*ptr;

三、2.填空题(12题)

24.cout.put('A');,还可以表示为[]o

25.若有定义:doublea[3][5];那么数组a的最后一个元素是[]。

26.所有的函数模板定义都是以关键字【】开始的。

27.有如下程序:

#include<iostream>

usingnamespacestd;

classPARENT

{

public:

PARENT(){cout<<"PARENT";)

);

classSON:publicPARENT

{

public:

SON(){cout<<"SON";}

);

intmain()

{

SONson;

PARENT*p;

p=&son;

return0;

}

执行上面程序的输出是o

28.以下程序的输出结果是o

#include<iostream.h>

unsignedfun(unsignednum)

{unsignedk=1;

do{k*=num%10;num/=10;}while(num);

returnk;

)

voidmain()

{unsignedn=26;

cout<<fun(n)<<endl;

29.在下面的程序的横线处填上适当的语句,使该程序的输出为12。

#include<iostream.h>

usingnamespacestd;

classBase

(

public:

inta,b;

Base(inti){a=i;}

};

classDerived:publicBase

(

inta;

public:

Derived(intx):Base(x),b(x+1){};

voidshow()

(

,输出基类数据成员a的值

cout<<b<<endl;

}

);

intmain()

(

Derivedd(l);

d.show();

return0;

30.软件开发环境是全面支持软件开发全过程的集合。

31.耦合和内聚是评价模块独立性的两个主要标准,其中【】反映了模

块内各成分之间的联系。

32.有以下程序:

#include<iostream.h>

classA

(

intx;

public:

A(inta)

(

x=a;

}

friendclassB;

);

ClassB(

public:

voidprint(Aa){

a.x-

cout<<a.x<<endl;

voidmain()

(

Aa(10);

Bb;

b.print(a);

程序执行后的输出结果是

33.若有以下程序:

#include<iostream>

usingnamespacestd;

classTestClass1

{

public:

TestClass1()

(

X=0;

intx;

);

classTestClass2:virtualpublicTestClassl

i

public:

TestClass2()

i

x=10;

}

};

classTestClass3:virtualpublicTestClass1

(

public:

TestClass3()

{

x=20;

}

};

classTestClass4:publicTestClass2,protectedTestClass3

(};

intmain()

(

TestClass4obj;

cout<<obj.x<<endl;

return0:

)

该程序运行后的输出结果是o

34.C++语言标识符是以字母或开头的,由字母,数字和下划线组

成的字符串。

35.Jackson方法是一种面向的结构化方法。

四、程序改错题(10题)

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

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

100

37

32

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

可。

试题程序:

#include<iostream.h>

/*1**1**1**1**1**1**1**1**1**1**1*

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

voidmain

/*3**1**!•*1**1,*1**1**1*

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

intm=0142:

//*1**1**1**1**t**1**1**1**1*

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

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

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

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

9,8,7,6,5

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

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

试题程序:

#include(iostream.h>

classTC

TC(inti)

(

m_i=i;

voidprint

i

cout«—m_i«,;

)

public:

intm_i;

intmain

!********error********/

inti;

TC04(10);

while(i>5)

i

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

1++:

04.print;

cout«endl;

returnO;

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

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

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

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

构,错误的语句在

II******error******卜|。

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

ofstreamoutl;

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

outl.open("l.txt",binarylapp);

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

!!********enor********

outl.puts(s[i]);

outl.close;

)

voidClearFile

{

ofstreamout1;

outl.open("l.txt");

outl.close;

)

intmain

(

chars"024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

)

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

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

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

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

构,错误的语句在

试题程序:

#include<iostream>

#include<fstream>

!1********ej*j*or********

usingstd;

voidWriteFile(char*s)

ofstreamout1;

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

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

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

I!********erroi*********

outl.puts(s[i]);

outl.close;

voidClearFile

i

ofstreamout1;

outl.open("l.txt");

outl.close;

intmain

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

retumO;

f\

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

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

确。

程序输出:

8

8

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

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

试题程序:

#include(iostream.h>

classCO

(

public:

I********ej*j*or********I

staticintn=O:

CO

(

n++:

CO

n—:

}:

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

intCO::n;

voidmain

(

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

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

eout«C.n«endl;

cout«C0::n«endl;

}

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

{

throw("error");

)

II********enoj*********

catch(chars)

(

cout«s«endl;

)

try

(

throw((int)0);

)

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

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

)

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

catch

cout«"ERROR"«endl;

returnO;

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

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

number=1

number=10

number=100

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

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

试题程序:

#include<iostream.h>

classTC

{

public:

TC(inti)

(

number=i;

)

voidSetNumber(intm)

(

number=m;

)

intGetNumberconst

(

returnnumber;

)

voidPrintconst

cout«"number="«number«endl;

private:

intnumber;

);

voidmain

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

II********ej*j*0j**^^0******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

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

(

retumnumber;

}

voidPrintconst

(

cout«"number="«number«endl;

private:

intnumber;

voidmain

!1****************

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

!1*************

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

44.使用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(s1)=3):

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

chars2[10]="ab":

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

assert(sizeof(s2)—2);

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

chars3=23:

II********ei*i*0i*********

assert(sizeof(s3)=4);

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

return;

)

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

Ii********error********

cin.getline(str,120);

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

while(str)

{

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

if(str[i])=a)

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

i++;

}

cout«str«endl;

return;

}

五、综合应用题(2题)

,,

46.(l)“while”应改为"while(infile.get(ch))o

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

(3)应添力/'outfile2«bur[i++];”或"outfile2«buf[i];i++;”。

(4)“TCobj「'应改为"TCobi("in.txt");

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

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

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

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

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

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

47.使用VC++6.0打开源程序文件3.cpp。其中类TC用于把文件

输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的

大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将

in.txt文件中的内容输出到

屏幕,并且将文件按照以上方式分割,存于文件。utl.txt和。ut2.txt

中。

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

整。

(1)从输入文件中获得一个字符,并判断是否到文件结

尾,如果到文件结尾,则退出循环。请在注释1后添加适当的语句。

⑵把获得的输入文件的内容存储到bur中,并且用len

记录下文件的长度。请在注释2后添加适当的语句。

(3)将输入文件的后一半内容存储在第二个文件中,请

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

(4)使用文件流对象打开输入文件in.txt,请在注释4

后添加适当的语句。

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

改其他的程序代码。

试题程序:

#include<iostream.h>

#include<fstream.h>

#include<stdlib.h)

classTC

{

public:

TC(char*fileName)

(

len=O;

fstreaminfile;

infile.open(fileName,ios::in);

charch;

while

(

cout«ch;

IIsj*

}

infile,close;

}

voidsplit

(

fstreamoutfilel;

fstreamoutfile2;

outfilel.open("outl.txt",ios::out);

outfile2.open("out2.txt",ios::out);

inti=0:

for(i=0;i<len/2;i++)

(

outfilel«buf[i];

)

do

(

)

while(i!=len);

outfilel.close;

outfile2.close;

)

prwate:

intlen;

charbuf[1024];

};

voidmain

(

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

TCobj;

obj.split;

return;

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

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

testllj.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:

CPositionQ;

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)

(

H**3**

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

序文件MyMainl2.cppo程序中定义了两个类Base和Derived,但类的

定义并不完整。

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

①定义类shapes的保护成员x和y,它们都是整型变量。请在注释“//*

*1**"之后添加适当的语句。

②完成构造函数shapes(intd,intw)定义,使类shapes的保护成员x、y分

别初始化为d、w,并分别具有默认值0、0。请在注释“〃**2**”之后添

加适当的语句。

③完成类shapes的成员函数setvalue(intd,intw)的定义,shapes类的数

据成员x和y分别被设置成d和w。请在注释“//**3**”之后添加适当

的语句。

④将类shapes的成员函数voiddisp。设置成纯虚函数。请在注释“〃**4*

*''之后添加适当的语句。

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

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

//MyMainl3.cpp

#include<iostream>

usingnamespacestd;

classshapes

{

〃***]***

public:

〃***2***

voidsetvalue(intd,intw)

(

〃***3***

)

〃***4***

};

classsquare:publicShapes

(

public:

voiddisp()

{

cout<<x*y<<endl;

}

);

intmain()

{

shapes*ptr;

squaresi;

pt『&sl;

ptr->setvalue(10,5);

ptr->disp();

return0;

参考答案

l.C解析:本题考核C++的文件I/O操作。函数good()表示刚进行的操

作成功时返回true,否则返回false,所以可以通过类ofstream的对象

outfile调用good。函数来检测刚才文件打开是否成功。题中在建立文件

流对象的同时打开文件,若打开失败则返回fail。所以“outfile”也可以用

作判断打开文件成功与否的条件。

2.C解析:考查栈和队列概念的掌握。栈和队列都是一种特殊的操作受

限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许

在表的一端进行插入或删除操作,是一种‘后进先出'的线性表;而队列只

允许在表的一端进行插入操作,在另一端进行删除操作,是一种先进先出

'的线性表。模块之间的耦合程度反映了模块的独立性,也反映了系统分

解后的复杂程度。按照耦合程度从弱到强,可以将其分成5级,分别是:数

据耦合、同构耦合、控制耦合、公用耦合和内容耦合。选项C),没有这种

耦合方式。

3.C

4.C解析:本题中,首先将0赋给k,表达式变为0,跳出循环,没有执

行循环体语句。解答本题的关键是掌握while语句。

5.C解析:C选项没有初始化,而且没有指定元素的个数,所以是错误

的。

6.A

7.A

8.C解析:应该先做++运算,然后进行%运算,最后比较不等式,实际

上最后输出的结果就是被3除,余数为2的不大于8的数。

9.B解析:其前半句是正确的,但后半句是错误的。它可以访问派生类

的对象中由基类继承下来的成员,但不可访问派生类新增成员。

10.B

ll.CC0【解析】类A,类B,中都有showa函数,类C继承后再次重写

showa函数就解决了继承的二义性,这时C.showa函数显示的就是类

C中的showa的值。

12.C在数据库设计中,目前常用的数据模型主要有三种,分别是层次模

型、网状模型和关系模型。

层次模型是数据库系统中最早出现的数据模型。我们通常把满足以下两

个条件的数据模型称为层次模型。

(1)有且仅有一个结点无双亲,这个结点称为根结点。

(2)其他结点有且仅有一个双亲。

层次模型用树形结构来表示各实体与实体间的联系。实体是数据库中数

据描述的对象,可以是一个人、一种商品等。在层次模型中,每个结点

表示一个记录类型,记录之间的联系用结点之间的连线表示,这种联系

是父子之间一对多的联系。记录就是描述实体的相关数据。

如果取消层次模型中的两个限制,即允许一个以上的结点无双亲,则每

一个结点可以有多个父结点,便形成了网状。我们把网状表示实体之间

联系的模型称为网状模型。

关系模型用表格形式表示实体类型及其实体间的联系。关系模型是目前

最重要的一种模型,它是建立在严格的数学概念的基础上的,具有最坚

实的理论基础。关系模型的基本数据结构是二维表,每一张二维表称为

一个关系。

13.C

根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)总是

比度为2的结点多一个。

14.A

15.A解析:外模式也称子模式,它是数据库用户能够看见和使用的局

部数据的逻辑结构和特征的描述,它是由概念模式推导而出来的,是数

据库用户的数据视图,是与某一应用有关的数据的逻辑表示。

16.A

解析:本题考查的知识点是:指针的赋值。题目中的语句int*p=&k;

有两个作用:首先,定义了一个血型指针p;然后,将变量k的地址

&k赋给刚定义的指针p。所以等效的语句序列为:int*p;p=&k;,应

该选择Ao

17.A静态成员表示整个类范围共享的信息;必须对静态数据成员进行初

始化;静态数据成员是属于类的,不能通过类的对象调用。

18.A解析:数据结构作为计算机的一门学科,主要研究和讨论以下三

个方面的问题:①数据集合中各数据元素之间所固有的逻辑关系,即数

据的逻辑结构;②在对数据进行处理时,各数据元素在计算机中的存储

关系,即数据的存储结构;③对各种数据结构进行的运算。

19.A解析:运算符重载为成员函数的形式为:函数类型operator运算符

(形参表){函数体;};运算符重载为友元函数的形式为:friend函数类型

operator运算符(形参表){函数体;}。一般来讲,单目运算符最好重载为

成员函数,双目运算符最好重载为友元函数。=、口、()、->以及所有的

类型转换运算符只能作为成员函数重载。

20.C

C++不能重载的运算符只有5个,即$”、“::”、“?:”、

“sizeoE,故本题答案为C。

21.D

C++标准数据流的对象分别足cout、cin、CelT>cl09,所以本题答案为

Do

22.A

Ao【解析】选项A中,重载函数中是允许使用默认参数的;为了使

重载函数有意义,不要使用重载函数来描述毫不相干的函数;重载函

数中编译是根据参数表进行选择的,包括参数的个数和类型。

23.A

Ao【解析】本题考查const修饰符的作用。注意,const位置不同,其

修饰的部分也是不同的。本题中const修饰的是ptr所指的对象本身,

所以,ptr可以重新指向新的对象,而ptr->a则无法被更新。

24.cout<<'A';cout<<'A';解析:本题考查的是C++语言的流输出操

作。cout是C++语言定义好的输出流对象,其中包括成员函数put(char

C),其功能是输出一个字符到屏幕,实际上C++语言中已经重载了操作

符“〈<”作为流输出操作符。

25.a[2][4]a[2][4]解析:C++中,数组每一维的下标都是从0开始,到n-

1结束。因此a[3][5]共有15个元素,最后一个元素是a[2][4]。

26.template

27.PARENTSONPARENTSON解析:此题考查的是派生类和基类的构

造函数。派生类构造函数的执行顺序为:首先调用基类的构造函数,调

用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用

顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。SON

son;执行时首先调用基类的构造函数,输出“PARENT”,然后调用派生

类的构造函数输出“SON”。需要注意的是,语句PARENT*p;只是定义

一个PARENT类的指针,并不调用构造函数。

28.1212解析:函数有一个形参num,循环前变量k置1,循环中,表

达式num%10是取num的个位,将Hum的个位值累乘于k中,然后

num除以10。循环直至num为0结束,这是逐一求出num十进制表示

的各位数字,并累乘于变量k的循环。函数最后返回ko函数fun的功

能是求整数的各位十进制数的积。

29.cout<<Base::acout<<Base::a解析:此题考查的是基类和派生类的

构造函数。派生类构造函数的执行顺序为:首先调用基类的构造函数,

调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调

用顺序按它们在类中说明的顺序,•最后是派生类构造函数中的内容。此

题要求结果是输出12,分析题目,首先调用基类的构造函数,然后是调

用子对象的构造函数,横线处要求输出基类成员a的值,填入cout<<

Base::a即可。

30.软件工具软件工具解析:软件开发环境或称软件工程环境是全而支

持软件开发全过程的软件工具集合。这些软件工具按照一定的方法或模

式组合起来,支持软件生命周期内的各个阶段和各项任务的完成。

31.内聚内聚

32.99解析本题考核友元类的应用。在程序中,类B是类A的友元类,

因此,在类B的所有成员函数中均可访问类A的任何成员。在main()

中,先定义类A的一个对象a(10)和类B的一个对象b。然后通过对象

b调用其成员函数print输出对象a的私有成员x的值减1即9。

33.20

34.下划线下划线

35.数据结构数据结构

36.(l)ttvoidmain,,o

(2)uintm=0144;

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

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

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

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

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

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

对应十六进制的25,因止匕2和3应分另I」改成“intm=0144;”,

“intn=0x25;”或"intn=0><25;

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

【解析】本题第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)应改为"usingnamespacestd;"。

\n(2)应改为"outl.open(l.txt',ios::binary|ios::app);

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

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

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

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

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

app);”语句缺少类ios,即第2处的语句修改为"outl.open('l.txt:ios::

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

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

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

(2)uintCO::n;”应改为"intCO::n=0;

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

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

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

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

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

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

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

“obj2.SetNumber(lOO);

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

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

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

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

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

\n(2)应改为"assert(sizeof(s2)=lO);”。

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

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

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

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

常,不能正常执行。因为strl的值为abc,但是它还有一个尾符,它的

长度应该是4,而不是3,所以在第1处修改为“assert(sizeof(sl)=4)7。

str2[10]说明,str2的空间为10,在第2处修改为“assert(sizeof(s2)=10);”。

charstr3=23;语句说明23是字符,所占存储空间为1,所以修改为

44assert(sizeof(s3)=1);

45.(1)应改为"ein.getline(str,120,?);

也⑵应改为“w如le(str[i])”。

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

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

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

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

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

温馨提示

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

最新文档

评论

0/150

提交评论