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

下载本文档

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

文档简介

2022年甘肃省金昌市全国计算机等级考试

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

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

一、1.选择题(10题)

1.下列叙述中正确的是0。

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

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

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

D.以上三种说法都不对

2.下面不是数据库管理系统常见的数据模型的是()。

A.层次模型B.关系模型C.逻辑模型D.网状模型

3.下列语句段落将输出字符的个数为()。include<iostream.h>Void

main(){inti=100;while(l){i—;if(i==0)break;cout<<;}}

A.98个B.99个C.100个D.101个

4.若有int(*p)[3]:则以下表述中正确的是o

A.p是一个指向具有3个元素的整型数组的指针

B.p是一个指向int型变量的指针

C.p是一个有3个元素的指针数组,每个元素是一个int型指针

D.p是一个具有3个int型元素的一维数组

5.数据库管理系统DBMS中用来定义模式、内模式和外模式的语言为()

A.CB.BasicC.DDLD.DML

6.对于以下带参数的main。函数的第二形参,voidmain(intargc,

),不可能的形式是

A.char*argv[]B.charargv[]C.char**aD.char*m[]

7.如果表达式++i*k中的“++”和“*”都是重载的非静态成员运算符,则

采用运算符函数调用格式,该表达式还可表示为=O

A.operator*(i.perator++(),k)

B.operator*(operator++(i),k)

C.(i.operator++()).operator*(k)

D.k.operator*(operator++(i))

8.下列说法中错误的是

A.公有继承时基类中的public成员在派生类中仍是public成员

B.私有继承时基类中的protected成员在派生类中仍是protected成员

C.私有继承时基类中的public成员在派生类中仍是private成员

D.保护继承时基类中的public成员在派生类中仍是protected成员

9.下列叙述中正确的是

A.线性链表中的各元素在存储空间中的位置必须是连续的

B.线性链表中的表头元素一定存储在其他元素的前面

C线性链表中的各元素在存储空间中位置不一定的连续的,但表头元素

一定存储

D.线性链表中的各元素在存储空间的位置不一定是连续的,且各元素的

存储顺序也是任意的

10.下面叙述错误的是()

A.对基类成员的访问能力在private派生类中和public派生类中是相同

B.基类的private成员在public派生类中不可访问

C.基类中的public成员在protected派生类中是protected的

D.基类中的public成员在protected派生类中仍然是public的

二、单选题(13题)

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

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

A.程序错误B.!C.、0,D.为空字符

12.有下列程序:

#include<stdiO.h>

voidmain()

{intx=l,y=2,z=3;

if(x>y)

if(y<z)print{("%d",++z);

elseprintf("%d",++y);

printf(,,%d\n,,>x++);

)

程序的运行结果是()。

A.A.331B.41C.2D.1

13.有以下程序:

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

14.有如下函数模板定义:templateT2plus(Tltl,T3t3){retumtl+t3;}

则以下调用正确的是()。

A.plus(3,5L);

B.plus(3,5L);

C.plus(3,5L);

D.plus(3,5L);

15.

16.考虑函数原型voidtest(inib=7,charz='*'),下面的函数调用中,属于不合

法调用的是().

A.test(5);B.test(5»8)j

C.test(6,'*');D.test(O,O.'*');

16.以下类定义中可能会引起错误的语句是()。

classA

(

public:

~A(){}//1

inti;//2

private:

intj;//3

A(inti){i++;}//4

};

A.lB.2C.3D.4

17.有如下程序:

#include<iostream>

usingnamespacestd:

classPoint{

intx,y;

public:

Point(intxl=0,intyl=O)):X(X1),y(yl){}

intget(){returnx+y;)

);

classCircle{

Pointcenter}

intradius;

public:

Circle(intCX,intcy,intr):center(cx,cy),radius(r)

{}

intget(){retumcenter.get()+radius;}

};

intmain(){

Circlec(3,4,5);

cout«c.get()«endl;

retumO;

)

运行时的输出结果是()oA.5B.7C.9D.12

18.结构化程序设计主要强调的是()。

A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序易读性

19.在结构化设计方法中生成的结构图(SC)中,带有箭头的连线表示

A.模块之间的调用关系B.程序的组成成份C.控制程序的执行顺序D.

数据的流向

20.打开文件时可单独或组合使用下列文件打开模式:

(Dios

(2)ios_base::aopiosase::binary

(3)iosbase::

④iosbase::out

若要以二进制读方式打开一个文件,需使用的文件打开模式为()。

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

21.下列关于C++语言类的描述中错误的是

A.类用于描述事物的属性和对事物的操作

B.类与类之间通过封装而具有明确的独立性

C.类与类之间必须是平等的关系,不能组成层次结构

D.类与类之间可以通过一些方法进行通信和联络

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

#include<iostream.h>inti=0;

classA{public:A{i++;}

};

voidmain{

Aa,b[3],*C;C=b;

cout«i«endl:

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

23.下列叙述中错误的是()。

A.在程序中凡是以“#”开始的语句行都是预处理命令行

B.预处理命令行的最后不能以分号表示结束

C.#defineMAX是合法的宏定义命令行

D.C++中预处理命令行的处理是在程序执行的过程中进行的

三、2.填空题(12题)

24.CASE是一组【】的集合,可以辅助软件开发生命周期各阶段进行

软件开发。

25.若要访问指针变量p所指向的数据,应使用表达式o

26.下面程序的运行结果为【】。

#include<iostream.h>

voidmain()

{

unsignedcharvaluer127;

inttotal=100;

value++;

total+=value;

cout<<total<<endl;

A)227B)100C)127D)27

27.类中包含了一个静态成员函数,则main函数中和P.fl(P);语句具

有同样功能的语句为【lo

#include<iostream,h>

classM

{

public,

M(inta){A=a;B+=a;

staticvoidfl(Mm)

private:

intA;

staticintB:

)

voidM::fl(Mm)

(

cout<<"A="<<m.A<<endl;

cout<<"B="<<m.B<<endl;

)

intM::B=10,

voidmain()

(

MP(5);

P.fl(P);

}

28.面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物

的一个【】。

29.含有纯虚函数的类称为o

30.operator是运算符重载时必须使用的关键字,它和被重载的运算符连

在一起,作为运算符函数的专用函数名,务必把该函数说明为的。

31.虚函数必须是类的【】。

32.若有以下定义及初始化语句:

inti=100;

int*ip=&i;

intk=*ip;

并假设整型数i的地址为0x12345678,指针中的地址为0x21000000,则

k的值为【】。

33.语句cout<<'\n'还可表示为[]0

34.写出下列程序的运行结果。

#include<iostream,h>

classX{public:

virtualvoiddisp(){cout<<“X类的disp函数<<"endl;}

);

classY:publicX{

public:

voiddisp(){cout<<“Y类的disp函数<<"endl;}

);

voidmain(){

Xa,*p=&a;

Yb;

p->disp();

p=&b;

p->disp();

}

运行结果为:[]

【】

35.一个C++语言程序的开发步骤通常包括编辑、【】、链接、运行和调

试。

四、程序改错题(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(s1)=5"«endl;

chars2[10]="ab":

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

assert(sizeof(s2)==2);

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

chars3=23:

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

assert(sizeof(s3)=4);

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

return;

)

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

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

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

到屏幕中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

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

cin.getline(str,120);

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

while(str)

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

if(str[i])=a)

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

i++;

)

cout«str«endl;

return;

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

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

确。

程序输出:

8

8

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

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

试题程序:

#include(iostream.h>

classCO

{

public:

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

staticintn=O:

CO

n++:

〜CO

n—:

}:

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

intCO::n;

voidmain

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

I********error********

eout«C.n«endl;

cout«C0::n«endl;

)

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

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

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

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

构,错误的语句在

II******error******白勺-|什|~。

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

ofstreamoutl;

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

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

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

{

I/********enor********

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;

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

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

number=1

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

IJ********error*********

TCobjl;

objl.Print;

TCobj2(3);

//********error********

objl.number=10;

I/********error*%()******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

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

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

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

程序异常.,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

)

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

catch(chars)

(

cout«s«endl;

)

try

(

throw((int)0);

)

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

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

)

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

catch

(

cout«"ERROR"«endl;

returnO;

)

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

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

number=1

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********error********

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

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

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

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

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

Constructor,i=0,

Destructor

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

可。

试题程序:

#include(iostream.h)

classTC

inti;

public:

TC;

voiddisplay;

〜TC;

};

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

TC:TC

{

cout«"Constructor"«",";

i=0;

)

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

TC:display

(

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

)

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

TC:TC

(

COUI«"Destructor"«endl:

)

voidmain

TCa;

a.display;

)

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

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

cin.getline(str,120);

!1********enor********

while(str)

!1********error********

if(str[i])=a)

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

i++;

)

cout«str«endl;

return;

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

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

9,8,7,6,5

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

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

试题程序:

#include(iostream.h>

classTC

!********enor********/

TC(inti)

(

m_i=i;

)

voidprint

(

cout«—m_i«,;

)

public:

intm_i;

);

intmain

!********ej*ror********/

inti;

TC04(10);

while(i>5)

(

I********errQr********

i++:

04.print;

)

cout«endl;

retumO;

五、综合应用题(2题)

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

义了用于表示矩形的CRect类,但类CRect的定义并不完整。请按要

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

(1)定义私有数据成员leftPoint、topPoint>rightPoint>bottomPoint,分

别用于表示矩形左上角及右下角的点的坐标,它们都是double型的数

据。请在注释1之后添加适当的语句。

(2)完成默认构造函数CRect的定义,指定默认实参为0,它们都是

double型的数据。请在注释2之后添加适当的语句。

(3)定义函数体为空的析构函数。请在注释3之后添加适当的语句。

(4)在main函数中定义GReet类的实例rect2,并把re-

ctl的值赋给rect2。请在注释4之后添加适当的语句。

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

试题程序:

#include<iostream.h>

classCRect

(

private:

public:

II

voidSetPoints(double,double,double,double);

voidSetLeftPoint(doublem){leftPoint=m;}

voidSetRightPoint(doublem){rightPoint=m;}

voidSetTopPoint(doublem){topPoint=m;}

voidSetBottomPoint(doublem){bottomPoint=m;}

voidDisplay();

};

CReet::CRect(doublel,doublet,doubler,doubleb)

(

leftPoint=l;topPoint=t;

rightPoint=r;bottomPoint=b;

voidCRect::Setpoints(doublel,doublet,doubler,doubleb)

leftPoint=l;topPoint=t;

rightPoint=n;bottomPoint=b;

)

voidCRect::Display()

{

cout«"left-toppointis("«leftPoint<<","«top-

Point«")"«\n;

cout«"right-bottompointis("«rightPoint<<","

<<bottomPoint«")"«\n;

}

voidmain()

(

CRectrectO;

rectO.Display();

rectO.SetPoints(20,20.6,30,40);

rectO.Display();

CRectrectl(O,0,150,150);

recti.SetTopPoint(10.5);

recti.SetLeftPoint(10.5);

!1********4********rect2Display().

47.(1)应添力口“virtualvoidGetNamt!=0;

(2)应添力口“constchar*GetName2”。

⑶应添加“TC2(char*str)”。

(4)应添加“m_str[i]=O;

【解析】本题第1处要求“在类TC1中定义接口函数GetName,为纯虚

函数在C++中,在基类中用virtual声明成员函数为虚函数。纯虚

函数是在声明虚函数时被“初始化'’为0的函数,即

“virtualvoidGetName=0;"。第2处要求“函数GetName2实现获得名字

的缓存,但只获得读允许操作这个缓存只能引用数据成员,而不能修

改,所以使用常成员函数,其一般形式为“const函数类型函数名“,即

“constchar*GetName2"。第3处要求“实现TC2的构造函数”。TC2的构

造函数与类TC2的名称应该相同,而且第3处的大括弧中是对字符数

组str的操作,所以类TC2的构造函数中的参数为str,即这里补全为

“TC2(char*str)”。第4处要求“完成TC2的构造函数,实现对名字的处

理”,补全类TC2的构造函数,构造函数中的名字变量str对应于类TC

中的成员变量m_str,所以这里补全变量赋值操作"m_str[i]=0;

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

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

test35_3.cpp,其中定义了时钟类clock,但该类的定义并不完整。请按

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

(1)定义类clock的私有数据成员hour和minute,它们都是int型的数据。

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

(2)补充完全类clock的构造函数,私有数据成员hour和minute分别初

始化为参数h和m的值,请在注释“〃**2**”之后添加适当的语句。

(3)完成类clock的成员函数printtime,的定义,该函数以“Nowthetime

ishour:minute”的格式输出数据成员hour和minute的值,如hour=3、

minute=59,则输出为"Nowthetimeis03:59”,请在注释“〃**3**”之后

添加适当的语句。

(4)完成类clock的成员函数addoneminutetime的定义,该函数可将clock

类对象表示的时间加一分钟,如现在hour=3、minute=59,运行该函数

后hour=4、minute=0o请在注释“〃**4**”之后添加适当的语句。

程序的输出结果如下:

Now,thetimeis12:59

Now,thetimeis13:00

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

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

#include<iostream.h>

classclock

(

private:

〃**]**

public:

clock(inth,intm)

{

H**2**

)

intpresenthour(){returnhour;}

intpresentminute(){returnminute;}

voidaddoneminutetime();

voidprinttime();

);

voidclock::printtime()

if(hour<10)cout<<'O';

H**3**

if(minute<10)cout<<'O';

cout<<minute<<endl;

)

v(oidclock::addoneminutetime()

〃**4**

if(minute>59)

(

minute-=60;

hour++;

)

if(hour>23)

hour=0;

)

voidmain()

{

clockc(12,59);

c.printtime();

c.addoneminutetime();

c.printtime();

)

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

test40_3.cpp,其中定义了类CVector,但该类的定义并不完整。请按要

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

⑴完成类CVector构造函数的定义,把传入的int型参数a和b分别赋

值给类的成员变量x和yo请在注释“〃**1**”之后添加适当的语句。

(2)完成类CVector的运算符重载函数的定义,使Cvector类的两个对

象相加时可以直接使用符号“+”,并且结果仍然为类Cvector的对象,请

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

⑶在主函数中添加适当的语句,把类Cvector的对象a和b相加,并且

把结果保存在对象c中,最后以“x,y”的形式输出在屏幕上,请在注释

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

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

#include<iostream.h>

classCVector

(

public:

intx,y;

CVector(){};

CVector(int,int);

CVectoroperator+(CVector);

);

CVector::CVector(inta,intb)

(

〃**]**

}

CVectorCVector::operater+(CVectorparam)

(

〃**2**

temp.y=y+param.y;

return(temp);

)

intmain()

(

CVectora(3,1);

CVectorb(1,2);

CVectorc;

〃**3**

return0;

)

参考答案

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

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

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

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

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

2.C解析:数据库模型分为层次模型、网状模型和关系模型,其中层次

模型和网状模型称为非关系模型。

3.B

4.A

5.C解析:选项A)、选项B)显然不合题意。数据定义语言(Data

DefinitionLanguage,简称DDL)负责数据的模式定义与数据的物理存

取构建;数据操纵语言(DataManipulationLanguage,简称DML)负责数

据的操纵,包括查询及增、删、改等操作。

6.B解析:本题要考查的实际是字符数组,用于向函数传递参数,属于

指针或引用传递方式。要注意的是考生不要被名称所迷惑,即根据A和

D是相同类别的,故可以排除。对C来说,也属于指针传递方式,而B

不仅不属于指针传递,而且还没有限定数组大小,编译器在编译时就会

产生错误。

7.B

8.B解析:本题考核派生类中的访问权限问题。继承方式包括:public(公

有派生),protected(保护派生)和private(私有派生)。不同的继承方式会

导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所

不同。这里的访问主要来自两个方面:一是派生类中的新增成员对从基

类继承来的成员的访问,・二是派生类外部通过派生类对象对从基类继承

来的成员的访问。私有继承时基类中的protected成员在派生类中变成了

private成员,所以B选项的描述是错误的。

9.D解析:性表的链式存储结构中,各数据结点的存储序号不连续,且

各结点在存储空间中的位置关系与逻辑关系也不一致。性链表中,各数

据元素之间的前后件关系是由各结点的指针域来指示的。所以,选项D

正确。

10.D

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

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

12.D

Do【解析】C语言中规定,else与离它最近的if相匹配。

x=l,y=2,z=3,所以第一个if的条件(x>y)不成立,直接执行

printf("%d\n",x+1);语句,输出x的值1,再把x加1。

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

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

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

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

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

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

\n

14.D

Do【解析】C++中对函数模板的调用有时候只使用了函数实参,而

没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是

必然的,而是有条件的:从模板函数实参表获得的信息有矛盾;需要

获得特定类型的返回值,而不管参数的类型如何;虚拟类型参数不出

现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模

板中虚拟类型参数T2没有出现在模板数的形参列表中,所以在调用时

不能省略,D选项的调用省略了T3,这是允许的。

15.C

16.D

Do【解析】本题考查关于C++语言类的定义方法。在C++语言中

类定义中的构造函数是私有的,但是却调用了其中的公有变量,在实

例化时会斟现错误。

17.D

Do【解析】简单类之间继承关系的调用,按照通常做法便可以得到答

案。center,get函数调用后,3和4的和被返回,接着再调用Circle类

的radius成员变量5相加后得到12。

18.D结构化程序设计由迪杰斯特拉(E.W.dijkstra)在1969年提出,他主

张“清晰第一,效率第二”,以模块化设计为中心,将待开发的软件系统

划分为若干个相互独立的模块,这样使完成每一个模块的工作变得单纯

而明确,为设计一些较大的软件打下了良好的基础。

由于模块相互独立,因此,在设计其中一个模块时,不会受到其他模块

的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。

模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因

为可以充分利用现有的模块作为积木式的扩展。

结构化程序设计的基本思想是采用“自顶向下,逐步求精”的程序设计方

法和“单入口单出口”的控制结构。自顶向下、逐步求精的程序设计方法

从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序

结构模块组成的结构化程序框图;“单入口单出口”的思想认为一个复杂

的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、

嵌套构成,那么这个新构造的程序一定是一个单入口单出口的程序。据

此就很容易编写出结构良好、易于调试的程序。

19.A解析:在结构图中,用带有箭头的连线表示模块之间的调用关系。

箭头由前一个模块指向后一个模块,表示前一个模块调用后一个模块。

本题的正确答案为A。

20.D

解析:ios_base::binary是作为二进制文件打开,ios_base::out是

为输出而打开;故因选D。

21.C解析:C++语言中的类是可以组成层次结构的,类是用于描述事

物的属性和对事物的操作,类与类之间有相对的独立性,但其可以通过

一些方法进行信息的通信。

22.C

外部变量i实际上记录的是调用构造函数的次数。

23.D

预处理命令是以“#”开始的语句,每一条预处理命令必须单独占用一

行.由于不是C语言的语句。并且命令行的最后不能以分号表示结

束,定义格式为“#de-fine标识符字符串“,预处理命令行是系统对源程

序进行编译之前进行处理的,不是在程序执行的过程中。

24.软件开发工具软件开发工具

25.*p

26.410410解析:本题主要考察C++类中静态数据成员的使用。程序首

先定义了类count,其内部含有private类型数据成员staticintn;同时

含有public类型构造函数count。和静态成员函数staticinttest(),这两个

函数的功能分别是为对象申请系统资源并将静态数据成员n加1和将静

态数据成员n加4。主函数前,程序将静态数据成员n初始化为0,该

数据成员为所有类count的对象所共有的数据成员;主函数中程序首先

执行静态成员函数test()(由于test声明为static,因此其调用时无需通过

具体对象),其执行过程中,静态数据成员n应该加4变成n=4,因此此

处输出为4;此后程序创建对象cl和c2,由于在每次创建过程中都要

调用构造函数count。,而每次调用count。函数后,静态数据成员n值都

会加1。因此,创建两个对象之后,n值变为n=6;再次执行test。函数

后,n的值再次加4,因此变为n=6+4=10。故程序全部执行后,变量n

值变为10,而中间程序输出为“410”。

27.M::fl(P);M::fl(P);解析:由于fl是类M的静态成员函数,即说明类

M的任何对象都共享一份fl,因此,不仅可以从对象那里访问fl,还

可以用域操作符::通过类名来访问。

28.实体实体解析:面向对象的程序设计方法中涉及的对象是系统中用

来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表

示其静态特征的属性和它可执行的一组操作组成。

29.抽象类抽象类

3O.public

31.成员函数成员函数解析:C++中,只有类的成员函数才能说明为虚

函数。这是因为,虚函数仅适用于有继承关系的类对象,所以普通函数

不能说明为虚函数。

32.100

33.cout<<endl;cout<<endl;解析:\\n表示换行,endl也可表示换

行。注意:endl和'\\n,可以通用。

34.X类的disp函数Y类的disp函数X类的disp函数\r\nY类的disp函

35.编译编译解析:C++语言程序开发的基本步骤是编辑、编译、链接、

运行和调试。

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

\n⑵应改为"assert(sizeof(s2)=lO);

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

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

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

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

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

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

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

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

€tassert(sizeof(s3)=1);”。

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

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

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

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

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

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

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

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

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

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

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

4t,,

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

38.(1)€4staticintn=O,,^Z0(^t€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;

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

(2)应改为"outl.open("1.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("1.txt",ios::binaryIios::app);第3个标识应

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

“outl.put(s[i]);

40.⑴应改为“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);

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

⑵应改为“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.⑴应改为“TCobjl(l);”。

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

\n(3)应改为“0bj2.SelNumber(lOO);"。

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

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

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

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

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

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

第3处叮(2.5611^11166«100);”语句中的T(2为类,并不是对象,这里

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

“obj2.SetNumber(lOO);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\n⑵应改为"while(str[i])”。

,,

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

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

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

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

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

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

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

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

,,

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

45.(1)应添加“public:

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

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

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

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

的对象被访问。故

温馨提示

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

评论

0/150

提交评论