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

下载本文档

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

文档简介

2022年湖北省孝感市全国计算机等级考试

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

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

一、1.选择题(10题)

1.C++语言中关于构造函数的说法正确的是

A.构造函数的函数名不必和类名相同B.构造函数只能每一个C.每个

类必定有构造函数D.构造函数必有返回值

2.假定MyClass为一个类,则该类的拷贝构造函数的声明语句为()。

A.MyClass&(MyClassx);

B.MyClass(MyClassx)

C.MyClass(MyClass&x);

D.MyClass(MyClass*x)

3.若执行语句:cout<<setfillC*')<<setw(10)<<123<<"OK"<<

endl后将输出

A*******]230K

B[23********OK

C*******]23********OK

D[23*******OK********

4.关于C++语言与C语言关系描述中错误的是

A.C++语言是C语言的超集

B.C++语言对C语言进行了扩充

C.C++语言包含C语言的全部语法特征

D.C++语言与C语言都是面向对象的程序设计语言

5.模板是实现类属机制的一种工具,其功能非常强大,它允许用户构造

类属类,即()。

A.模板函数B.函数模板C.模板类D.类模板

6.下列关系模型中,能使经运算后得到的新关系中属性个数多于原来关

系中属性个数的是

A.选择B.连接C.投影D.并

7.语句ofstreamf("SALARY.DAT",ios::app|los::binary);的功能是建立

流对象f,试图打开文件SALARY.DAT并与之连接,并且。

A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个

新文件

B.若文件存在,将其置为空文件;若文件不存在,打开失败

C若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个

新文件

D.若文件存在,打开失败;若文件不存在,建立一个新文件

8.在不同文件的函数中,对非静态全局变量的引用要加的关键字是()。

A.registerB.autoC.staticD.extern

9.关于成员函数的重载,说法正确的是()。

A.就是在类中设计多个函数名相同,参数个数及参数类型也相同的函数

B.析构函数可以重载

C.函数重载,要求函数名相同,但参数个数不同,或参数相同,但其类

型不同

D.构造函数不可重载

10.在任意一棵二叉树的前序序列和后序序列中,各叶子之间的相对次

序关系()。

A.不一定相同B.都不相同C.互为逆序D.都相同

二、单选题(13题)

11.已知函数f的原型是"voidf(int*x,int&y);”,变量vl、v2的定义是

“intvl,v2;",下列调用语句中,正确的是()。

A.f(vl,v2)B.t(vl,&v2)C.f(&vl,v2)D.f(&vl,&v2);

12.有如下类定义:

classTest

{public:

Test(){a=0;c=0;}//①

intf(inta)const{this->a=a;}//②

staticintg(){returna;}//③

voidh(int

B.{Test::b=b;};//④

private:

inta;

staticintb;

constintc;

);

intTest::b=0;

在标注号码的行中,能被正确编译的是

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

13.C++程序执行总是从【】开始的。

A.main函数B.第一行C.头文件D.函数注释

14.以下程序的正确运行结果是()。#include<iostream.h>intfun(int);

voidmain(){inta=2,i;for(i=0;i<3;i++)cout<<fun(a)<<endl;cout<<

endl;}intfun(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);}

A.4,5,6B.6,7,9C.7,8,9D.7,7,7

15.已知函数fun的原型为intfun(int,int,int);下列重载函数原型中错误

的是_________O

A.charfun(int,int);

B.doublefun(int,int,double);

C.intfun(int,clar*);

D.floatfun(int,int,int);

16.C++语言中关于构造函数的说法正确的是()。

A.构造函数的函数名不必和类名相同B.构造函数只能有一个C.每个

类必定有构造函数D.构造函数必有返回值

17.设函数中有整型变量n,为保证其在未赋初值的情况下初值为0,应

选择的存储类别是()。

A.A.autoB.xegisterC.staticD.autO或register

18.下列类的定义中,有()处语法错误。classBase{public:Base(){}

Base(inti){data=i;}private:intdata;};classDerive:publicBase{public:

Derive():Base(O){}Derive(intx){d=x;}voidsetvalue(inti){data=i;}

private:d;};

A.lB.2C.3D.4

19.栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,

栈中元素可以出栈,则出栈序列可能是()。

A.ABCEDB.DCBEAC.DBCEAD.CDABE

20.下列关于栈的叙述正确的是()。

A.栈顶元素最先被删除B.栈顶元素最后才能被删除C.栈底元素永远

不能被删除D.以上三种说法都不对

21.当需要将一^•函数boolisnunlber(charc)声明为内联函数时,此内联函

数的函数原型为()o

A.enumboolisnumber(charc);

B.defineboolisnumber(charc);

C.inlineboolisnumber(charc);

D.extemboolisnumber(charc);

22.函数模板:template<classT>Tadd(Tx,Ty){returnx+y;}下列

对add函数的调用不正确的是()。

A.add<>(1,2)B=add<int>(1,2)C.add(1.0,2)D.add(1.0,2.0)

23.下列工具中为需求分析常用工具的是()0

A.PADB.PFDC.N-SD.DFD

三、2.填空题(12题)

24.结构化分析方法是面向进行分析的方法。

25.类支持输入操作,类支持输出操作。

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

27.在下面程序的横线处填上适当的语句,使该程序执行结果为10。

#include<iostream>

usingnamespacestd;

classMyClass

{

public:

MyClasS(intA)

('

X=a;

【】〃取x的值

private:

intx;

intmain()

MyClassmy(10);

28.非成员函数只有在声明为类的【】才能访问这个类的所有private成

员。

29.设在主函数中有以下定义和函数调用语句,且fun()函数为void类

型,请写出fun()函数的首部【】。

intmain()

(

doubles[10][22];

intn;

fun(s);

return0;

}

30.C++语言程序由函数构成,其至少包含一个函数,这就是【】。

31.C++程序是从【】函数开始执行的。

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

#include<iostream.h>

voidmain()

{inta=0;

a+=(a=8);

cout<<a;

)

33.基类为虚函数,撤销对象调用析构函数时,采用联编。

34.【】技术是将数据和行为看成是一个统一的整体,使一个软件成分,

即所谓的对象。

35.为解决在多重继承环境中因公共基类带来的二义性问题,C++语言

提供了【】机制。

四、程序改错题(10题)

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

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

cin.getline(str,120);

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

while(str)

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

if(str[i])=a)

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

1++;

cout«str«endl;

return;

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

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

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

程序异常,输出信息为

error

O

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

try

(

throw("error");

)

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

catch(chars)

{

cout«s«endl;

)

try

(

throw((int)0);

)

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

catch

(

cout«i«endl;

)

try

{

throw(O);

throw("error");

)

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

catch

(

cout«"ERROR"«endl;

returnO;

)

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

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

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

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

构,错误的语句在

******error******的下面。

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

ofstreamoutl;

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

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

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

!1********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;

)

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

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

Constructor,i=0,

Destructor

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

可。

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

TC;

};

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

TC:TC

cout«"Constructor"«","

i=0;

)

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

TC:display

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

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

TC:TC

COUI«"Destructor"«endl:

voidmain

TCa;

a.display;

)

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

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

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

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

构,错误的语句在

II******error******白勺~曲j。

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

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

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

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

(

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

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

retumO;

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

{

returnnumber;

)

voidPrintconst

(

cout«"number="«number«endl;

}

private:

intnumber;

);

voidmain

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

Ii********enx)r*%()******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

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

到屏幕中。

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

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

试题程序:

#include<iostream.h>

voidmain

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

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

cin.getline(str,120);

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

while(str)

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

if(str[i])=a)

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

i++;

)

cout«str«endl;

return;

)

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

(

1I********ej*ror********

TCobjl;

objl.Print;

TCobj2(3);

!!********error********

objl.number=10;

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

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;

);

I!******eiTor******

TC:TC

(

cout«"Constructor"«",

i=0;

)

II******eno1******

TC:display

|

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

1I******enor******

TC:TC

COUI«"Destructor"«endl:

voidmain

TCa;

a.display;

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

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

9,8,7,6,5

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

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

试题程序:

#include(iostream.h>

classTC

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

TC(inti)

(

m_i=i;

)

voidprint

{

cout«—m_i«,;

)

public:

intm_i;

intmain

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

inti;

TC04(10);

while(i>5)

!********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­

cti的值赋给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=1;topPoint=t;

rightPoint=r;bottomPoint=b;

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

leftPoint=1;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);

II********4********rect2Display()

47.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程

proj3,其中声明的CDe叩Copy是一个用于表示矩阵的类。请编写这个

类的赋值运算符成员函数Operator,以实现深层复制。

要求:

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

“〃****************666*************"之间o不.多改不呈的其彳也部

分。

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

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

//CDeepCopy.h

#include<iostream>

#include<string>

usingnamespacestd;

classCDeepCopy

public:

intn;〃动态数组的元素个数

int*p;〃动态数组首地址

CDeepCopy(int);

〜CDeepCopy;

CDeepCopy&operator=(constCDeepCopy&r);〃赋值运算符函数

};

voidwriteToFile(char});

//main,cpp

#include,,CDeepCopy.h"

CDeepCopy::一CDeepCopy{delete[]P;}

CDeepCopy::CDeepCopy(intk){n=k;p=newint[n];}〃构造函数实现

CDeepCopy&CDeepCopy::Operator=(constCDeepCopy&r)〃赋值运算

符函数实现

/

//***********666不***不******

)

intmain

CDeepCopya(2),d(3);

a.p[O]=l;d.p[O]=666;〃对象a,d数组元素的赋值

(

CDeepCopyb(3);//调用赋值运算符函数

a.p[O]=88;b=a;

cout«b.pfO];〃显示内层局部对象的数组元素

)

cout«d.p[0];//显示d数组元素a.p[0]的值

cout«”dfadeaway;\n";

cout«a.p[0];〃显示a数组元素a.p[0]的值

writeToFile("");

return0;

)

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

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

序文件test8_3.cpp,该文件设计了用于输出乘法九九表的类。请认真阅

读已有的代码,按要求完成下列操作,将程序补充完整。

(1)定义类Table的私有数据成员x和y,分别用于表示九九表中的两个

乘数(x*y),它们都是int型的数据。请在注释“〃**1**”之后添加适当的

语句;

(2)完成类Table的成员函数prin()的定义,该函数以"x*y=z”的格式打印

出九九表中的一个乘法算式,请使用格式化输出函数prinff实现,在注

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

(3)完成类Table9的成员函数print。的定义,该函数调用基类Table的

print。函数,将九九表输出到屏幕,请在注释“〃**3**”之后添加适当的

语句;

⑷补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。

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

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

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

#include<iostream.h>

#include<stdio.h>

classTable

(

〃**]**

intz;

public:

voidprint(intx,inty,intz);

);

voidTable::print(intx,inty,intz)

)

classTable9:publicTable

(

public:

voidprint();

);

voidTable9::print()

(

〃**3**

intx,y,z;

for(i=1;i<10;i++)

(

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

(

x=i;

y=j;

z=i*j;

Table::print(y,x,z);

)

printf("\n");

)

)

main()

(

〃+*4**

return0;

)

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

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

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

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

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

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

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

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

(3)在主函数中添加适当的语句,把类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::operator+(CVectorparam)

(

〃**2**

temp.y=y+param.y;

return(temp);

)

intmain()

(

CVectora(3,1);

CVectorb(1,2);

CVectorc;

〃**3**

return0;

参考答案

LC解析:本题考查构造函数的概念。构造函数可以被重载,构造函数

的函数名必须和类名相同:构造函数可以有一个,也可以有多个,构造

函数没有返回值。

2.C解析:本题考核拷贝构造函数的概念。声明拷贝构造函数的格式为:

〈类名〉::<拷贝构造函数>(const〈类名>&<引用名>);,其中const

是修饰符可,以省略。

3.A解析:本题考核格式控制数据的输入输出。函数setfill(charC)用于

设置填充字符,在输出数据时,如果数据宽度小于设置的宽度,则空闲

位置要用填充字符填满。函数setw(intn)用于设置输入输出宽度,宽度

设置的效果只对一次输入或输出有效,在完成一次数据的输出或输入后,

宽度设置自动恢复为0,例如题中语句以宽度10输出数据“123”后,字

符串“OK”的输出宽度就自动恢复为0了。而且输出的初始状态为右对

齐,所以最终的输出为*******123OK。

4.D解析:C语言是一种面向过程的程序设计语言,而C++语言是一种

面向对象的设计语言,C++语言是C语言的超集,它包含了C语言的

所有语言特性,并进行了扩充。

5.C

6.B解析:本题主要考查关系模型中几种运算的特征。经过选择或投影

运算得到的新关系的属性个数最多不会超过原关系中的属性个数。经过

连接运算得到的新关系最多不少于原关系中属性的个数。故选项B正

确。

7.B

8.D

9.C解析:函数重载要求函数名相同,但参数个数或参数类型不同,•构

造函数可以重载;析构函数不能重载。

10.D解析:前序遍历序列的顺序是先根,再左子树,最后右子树;后序

遍历序列的顺序是先左子树,再右子树,最后根。因此各叶子之间的相

对次序关系在前序序列和后序序列中是一样的。

11.B

Bo【解析】voidf(int*X,int&oy);第一个参数需要取值,第二个参

数需要取地址,所以为vl为取值,&Lv2为取址。

12.D

用类型修饰符const声明的变量,必须在声明时进行初始化。因此,选

项A错误。常成员函数不能更新对象的数据成员。因此,选项B错

误。静态成员函数不能直接访问类中说明的非静态成员。因此,选项

C错误。只有选项D是正确的。

13.A

14.C

15.D

本题主要考查了函数重载。函数重载允许用同一个函数名定义多个函

数。被重载的函数必须要有不同的形参列表(即参数个数不同或参数类

型不同),不可以根据函数返回值类型来重载函数。

16.C

17.C

Co【解析】在c语言中,未赋初值的静态局部变量,编译程序自动

给它赋初值0。所以选择C。

18.B解析:本题考核派生类的定义和成员的访问权限。

第1处错误:在派生类的构造函数Derive(intx)中没有调用基类的构造函

数对基类对象初始化。

第2处错误:数据data是基类Base的私有成员,派生类Derive不能访

问,所以在函数setvalue中对data的赋值是错误的。

19.B解析:栈操作原则上“后进先出”,栈底至栈顶依次存放元素A、

B、C、D,则表明这4个元素中D是最后进栈,B、C处于中间,A最

早进栈。所以出栈时一定是先出D,再出C,最后出A。

20.AA。【解析】栈是限定在一端进行插入删除的先入后出的线性表数据

结构,栈顶元素最后被插入到栈中,但是最先被删除;而栈底元素最先

被插入,最后被删除。

21.C

Co【解析】本题考查内联函数的相关知识点。函数原型应指出函数

名、返回值类型以及在调用函数时提供的参数的个数和类型,因为要

声明为内联函数,故应加inline关键字。

22.C

23.D解析:需求分析常用的工具有数据流图(DFD)、数据字典(DD)、

判定树和判定表。PAD(问题分析图)、PFD(程序流程图)、N-S(盒式图)

都是详细设计的常用工具,不是需求分析的工具。

24.数据流数据流解析:结构化分析方法的实质是着眼于数据流,自顶

向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要

工具,建立系统的逻辑模型。

25.istream、ostream

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

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

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

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

27.intGetNum(){returnx;}intGetNum(){returnx;)解析:由主函数中

调用对象my成员函数GetNum。可得到,成员函数GetNum。的功能是

返回其私有数据成员x的值。

28.友元函数友元函数解析:本题考核友元函数。C++规定,一个类的

私有成员和保护成员,只能由其本身的成员来访问,不能被其他函数访

问,这样形成了封装的概念,也保护了类本身的数据不致于受到破坏。

但是,如果想让类中的成员数据可以被其他函数访问,可以通过友元函

数声明,来分享类中的资源。类的友元函数可以直接访问该类的所有成

员,包括私有成员。

29.voidfun(b[][22])voidfun(b[][22])解析:此题考核的知识点是函数的

定义形式与数组名作为函数的参数。函数头的定义形式是“存储类型说

明符数据类型说明符函数名(形参列表)”,此题没有涉及到函数的存储类

别。如果函数的参数是数组,其第1维的长度可以省略。因此本题的函

数首部可以写成:voidfun(b口[22])。

3O.main函数main函数解析:C++语言程序由函数构成,其至少包含一

个main。函数。

31.mainmain解析:所有的C++语言程序都是从main函数开始执行,而

普通函数的存在是为了简化main函数的复杂程度。

32.1616解析:解答本题的关键是要分析清楚表达式a+=(a=8)中,a的

值已经被赋为8,而不是0°

33.动态动态

34.面向对象面向对象

35.虚基类虚基类

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

\n(2)应改为"while(st巾])”。

\n(3)应改为"if(str[i]>=a&&st巾]<=2)”。

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

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

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

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

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

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

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

,,

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

37.(1)应改为飞2记11©121'*5)”。

⑵应改为“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(…)”。

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

\n(2)应改为"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是.txt',binary|

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

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

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

39.(1)应改为叮(2::TC”。

⑵应改为“voidTC::display”。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

41.⑴应改为"TCobjl⑴;

\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处叮(3.5611^11^61'(100);”语句中的T(2为类,并不是对象,这里

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

“obj2.SetNumber(lOO);

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

⑵应改为“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处的

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

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

,,

“iRstr[i]>=a&&str[i]>=z)o

43.(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);

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

\n⑵应改为"voidTC::display”。

\n(3)应改为“TC::~TC”。

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

和作用域运算符“::”,作用域运

温馨提示

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

评论

0/150

提交评论