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

下载本文档

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

文档简介

2023年甘肃省张掖市全国计算机等级考试

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

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

一、1.选择题(10题)

i.()是以一种完全通用的方法来设计函数或类而不必预先说明将被使

用的每个对象的类型。

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

2.一些重要的程序语言(如C语言和Pascal语言)允许过程的递归调用。

而实现递归调用中的存储分配通常用()o

A.A.栈B.堆C.数组D.链表

3.有以下程序:#include〈iostream〉#include(string)usingnamespace

std;classvisited{private:intnumber;char*name;public:staticintglob;

voidsetmes(char*a);};voidvisited::setmes(char*a){name=new

char[strlen(A)+1];strcpy(name,A);numbei-++glob;}intvisited::glob-O;

intmain(){visitedperson[10];inti;charstr[8];for(i=0;i<5;i++){cin»str;

person[i].setmes(str);}cout<

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

4.在C++语言中,封装是借助于什么达到的?

A.结构B.类C.数组D.函数

5.语句ofstreamf("DATA.DAT",ios_base::applios_lios_bfise::binary);

的功能是建立流对象f,并试图打开文件DATA.DAT并与之连接,而且

()o

A.若文件存在,将文件指针定位于文件首,若文件不存在,建立一个新

文件

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

C若文件存在,将文件指针定位于文件尾:若文件不存在,建立一个新

文件

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

6.下列概念中,不属于面向对象方法的是()。

A.对象B.类C.继承D.过程调用

7.有关析构函数的说法不正确的是()。

A.析构函数有且只有一个

B.析构函数无任何函数类型

C.析构函数和构造函数一样可以有形参

D.析构函数的作用是在对象被撤消时收回先前分配的内存空间

8.如果一个函数带有参数说明,则参数的默认值应该在()中给出。

A.函数定义B.函数声明C.函数定义或声明D.函数调用

9.下面程序的运行结果为

#include<iostream.h>

voidmain()

for(inta=0,x=0;!x&&a<=10;a++)

a++;

)

cout<<a<<endl;

)

A.10B.11C.12D.0

10.关于静态数据成员的描述中正确的是()o

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

B.类的静态数据成员不能被类的成员函数调用

C.类的静态数据成员不能被类的构造函数调用

D.类的静态数据成员必须进行初始化

二、单选题(13题)

11.结构化程序所要求的基本结构不包括()o

A.顺序结构B.GOTO跳转C.选择(分支)结构D.重复(循环)结构

12.下面不属于同一函数模板的是()。

A.template<classtl>tlmax(tl&a,tl&b)template<classt2>t2

max(t2&a,t2&b){...}

B.template<classtl>tlmax(tla,tlb){...}template<classt2>t2max(t2

&a,t2&b){...}

C.template<classtl>tlmax(tl*a,tl*b){...}template<classt2>t2

max(t2&a,t2&b){...}

D.template<classtl>tlmax(tla,tlb){...}template<classt2>t2max(t2

&a,t2&b,t2c){...}

13.下列关于函数的描述中,错误的是()o

A.函数可以没有返回值B.函数可以没有参数C.函数可以是一个类的

成员D.函数不能被定义为模板

14.下列描述中正确的是()。

A.软件工程只是解决软件项目的管理问题

B.软件工程主要解决软件产品的生产率问题

C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则

D.软件丁二程只是解决软件开发中的技术问题

15.下面有关this指针的叙述中,正确的是()。

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

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

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

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

16.下面对结构或类中成员的访问中,不正确的访问是o

A.*pointer.salary;(其中pointer为指向类对象的指针)

B.pointer->salary;

C.x=orker,salaiy;(其中worker为具有类类型的对象)

D.Location&rA=Al;Intx=rA.GetX();(Location为已定义的类,A为对

象)

17.NULL是指

A.OB.空格C.未知的值或无任何值D.空字符串

18.下面的()选项不能作为函数的返回类型。

A.voidB.intC.newD.long

19.有如下程序:

#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

20.某系统总体结构图如下图所示::该系统

总体结构图的深度是()。

A.7B.6C.3D.2

21.下列关于模板形参的描述中,错误的是()o

A.模板形参表必须在关键字template之后

B.模板形参表必须用括弧()括起来

C.可以用class修饰模板形参

D.可以用typename修饰模板形参

22.对于类定义classA{public:virtualvoidfuncl(){}voidfunc2(){}};

classD:publicA{public:voidfuncl(){cout<<"classBrune1"<<endl;}

virtualvoidfunc2(){cout<<"classBfunc2"<<endl;}};下面正确的

叙述是o

A.A::func2()和B::funcl()都是虚函数

B.A::func2()和B::funcl()都不是虚函数

C.B::funcl()是虚函数,而A::func2()不是虚函数

D.B::funcl()不是虚函数,而A::func2()是虚函数

23.在最坏情况下,冒泡排序所需要的比较次数为

A.n/2B.(n+l)/2C.n(n-l)/2D.n(n+l)/2

三、2.填空题(12题)

24.在结构化分析方法中,用于描述系统中所用到的全部数据和文件的

文档称为【】。

25.请将下列模板类Data补充完整。

template<typenameT>

classData{

public:

voidput(Tv){val=v;}

get(){returnval;}//返回数据成员val的值,返回类型不加转换

private:

Tval;

);

26.下列程序编译错误,是由于划线处缺少某个语句,该语句是【]o

#include<iostream,h>

classA

private:

intnuml;

public:

A():numl(0){)

A(inti):numl(i){}

);

classB

private:

intnum2

public:

B():num2(0){}

B(inti):num2(i){}

intmy_math(Aobj1,Bobj2);

};

intB::my_math(Aobj1,Bobj2)

return(objI.numl+obj2.num2);

)

voidmain(void)

{

Aobjl(4)

Bobj,obi2(5);

cout<<"objl+obj2:"<<obj.my_math(obj1,obj2);

27.在面向对象方法中,允许作用于某个对象上的操作称为【】。

28.对基类数据成员的初始化必须在派生类的构造函数中的处执

行。

29.写出执行完下列代码段之后指定变量的值:

boolx=true,y=false,z=false;

x=x&&yIIz;

y=xIIy&&z;

z=!(x!=y)II(y==z);

贝ljx=false,y=false,z=[]o

30.下列程序中需要清理动态分配的数组,划线处应有的语句是[]o

#include<iostream,h>

classperson

{

intage,tall;

public:

person(){age=0;tall=40;cout<<"Ababyisborn."<<end1;}

person(inti){age=i,tall=40,cout<<"Aoldperson."<<endl;}

person(inti,inti){age=i;tall=j;cout<<"aoldpersonwithtall."<<

endl;}

〜person(){cout<<"persondead."<<end1;}

voidshow()

(

cout<<"age="<<age<<",tall="<<tall<<endl;

)

);

voidmain()

(

person*ptr;

ptr=newperson[3];

ptr[0]=person()

ptr[ll=person(18);

ptr[2]=person(20,120);

for(inti=0;i<3;i++)

ptr[i].show();

31.模板使我们可以用一个代码段指定一组相关函数(称为)或一

组相关类(称为O

32.以下程序的执行结果是【】。

#include<iostream>

usingnamespacestd;

classbase

(

public:

virmalvoidwho(){cout<<"BaseClass"<<endl;)

);

classDerivedkpublicBase

(

public:

virtualvoidwho(){cout<<"DerivedlClass"<<endl;}

};

classderived2:publicBase

(

public:

virtualvoidwho(){cout<<"Derived?Class"<<endl;)

);

intmain(intargc,char*argv[])

(

baseobj1,*P;

deliVedlobj2;

derived2obj3;

p=&obj1;p->who();

p=&obj2;p->who();

p=&obj3;p->who();

return0;

)

33.已知有函数f的定义如下:

intf(){

staticints=0;

s+=2;

returns;

)

则在某程序中第二次执行函数调用语句f();时,函数f的返回值是_____

34.在任何类中都有三种访问权限的数据成员,这三种权限是public,

private和【】。

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

四、程序改错题(10题)

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

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

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

程序异常.,输出信息为

error

O

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;

)

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

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

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

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

构,错误的语句在

II******error******白勺~mjQ

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

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

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

retumO;

}

38.使用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)

I********errOr********/

1++:

04.print;

)

cout«endl;

retumO;

)

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

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

Constructor,i=0,

Destructor

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

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

);

!!***********求

TC:TC

(

cout«"Constructor"«",

i=0;

)

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

TC:display

|

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

)

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

TC:TC

COUI«"Destructor"«endl:

voidmain

(

TCa;

a.display;

)

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

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

Constructor,i=0,

Destructor

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

可。

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

〜TC;

};

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

TC:TC

cout«"Constructor"«","

i=0;

)

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

TC:display

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

1I******error******

TC:TC

COUI«"Destructor"«endl:

}

voidmain

TCa;

a.display;

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

//********error*%0******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

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

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

100

37

32

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

可。

试题程序:

#include<iostream.h>

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

voidmain

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

intm=0142:

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

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

throw("error");

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

catch(chars)

(

cout«s«endl;

}

try

(

throw((int)0);

)

Ii********enoj*********

catch

(

cout«i«endl;

}

try

(

throw(O);

throw("error");

}

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

catch

(

cout«"ERROR"«endl;

)

returnO;

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

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

cin.getline(str,120);

II********enol*********

while(str)

I!********enor********

if(str[i])=a)

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

1++;

cout«str«endl;

return;

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

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

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

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

构,错误的语句在

1I******error******自勺

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

1I********error********

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

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

{

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

)

五、综合应用题(2题)

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

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

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

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

整。

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

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

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

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

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

他的程序代码。

试题程序:

#include<iostream.h>

classPeople

public:

{

inti;

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

{m_UserName[i]=sUserNamefi];

)

/*1**1**1**1**1**1>*1**1*

//"不不本不不不本2""""

m_01d=n01d;

)

private:

charm_UserName[32];

intm_01d;

};

voidfun(char*s,People&personl,People&person?

(

/I********4********

if

{

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

+)

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

s[i+l]=O;

)

}

else

{

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

+)

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

s[i+l]=O;

)

)

)

voidmain

(

chars[32];

Peoplepl("abc",20);

Peoplep2("def,30):

fun(S,pl,p2);

cout«s«endl:

return;

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

义了类BA、PA1和PA2,其中PA1类由BA类公有派生,PA2类由

PA1类公有派生。上述3个类的定义并不完整,请按要求完成下列操

作,将程序补充完整。

程序输出结果如下:

10

5

1057

(1)定义类BA的构造函数,该构造函数有一个整型的参数m,在构造

函数中将m赋值给数据成员ao请在注释1之后添加适当的语句。

(2)定义类PA1的构造函数,该构造函数有两个整型的参数m和n,在

构造函数中将m赋值给数据成员b,将n作为基类BA构造函数的参

数值传人。请在注释2之后添加适当的语句。

(3)定义类PA2的构造函数,该构造函数有3个整型的参数m、n和

k,在构造函数中请将m赋值给数据成员c,将n和k分别赋值给基类

PA1构造函数的参数m和no请在注释3之后添加适当的语句。

(4)完成类PA2的成员函数show的定义,该函数调用基类成员函数,

输出基类私有成员a、b及类PA2自身的数据成员C的值,上述3个

值在输出时用空格隔开。请在注释4之后添加适当的语句。

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

试题程序:

#include(iostream.h>

classBA

{

inta;

public:

intgeta{returna;}

);

classPAl:publicBA

(

intb;

public:

/*1**1**1**1**1**!>*!**1*•1><1**t**1*

//半米不举木本不木2木木木"木木不

intgetb{retumb;}

};

classPA2:publicPAl

(

intC;

public:

I/*}crjcrjcrj*rjC?*fCr}»r}C<|Cr}»rf*

voidshow

(

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

)

};

voidmain

{

PA2a(7,5,10);

cout«a.geta«endl;

cout«a.getb«endl;

a.show;

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

48.使用VC6打开考生文件夹下的工程MyProjl。此工程包含千个源程

序文件MyMainl.cpp,其中定义了用于表示日期的类Date,但类Date的

定义并不完整。请按要求完成下列操作,将类Date的定义补充完成:

①定义私有数据成员year、month和day分别用于表示年、月、日,它

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

②完成默认构造函数Date的定义,使Date对象的默认值为:year=l,

month=l,day=l,请在注释“〃**2**”之后添加适当的语句。

③完成重载构造函数Date(inty,intm,intd)的定义,把数据成员year、

month和day分别初始化为参数y、m和d的值,请在注释“〃**分**之

后添加适当的语句。

④完成成员函数print的类外定义,使其以“年-月-日”的格式将Date对

象的值输出到屏幕上。请在注释“〃**4**”之后添加适当的语句。

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

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

//MyMainl.cpp

#include<iostream>

usingnamespacestd;

classDate

(

public:

〃**2**

Date(inty,intm,intd)

〃**3**

}'

voidprint()const;

private:

//datamember

〃**]**

);

voidDate::print()const

(

〃**4**

)

intmain()

(

Datenational_day(1949,10,1);

national_day.print();

return0;

)

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

test30_3.cpp,其中定义了类A、A1和A2,其中A1类由A类公有派

生,A2类由A1类公有派生。上述三个类的定义并不完整,请按要求完

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

(1)定义类A的构造函数,该构造函数有一个整型的参数x,在构造函数

中请将x赋值给数据成员a。请在注释“//**1**”之后添加适当的语句。

(2)定义类A1的构造函数,该构造函数有两个整型的参数x和y,在构

造函数中请将x赋值给数据成员b,将y作为基类A构造函数的参数值

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

⑶定义类A2的构造函数,该构造函数有三个整型的参数x,y和2,在

构造函数中请将x赋值给数据成员c,将y和z分别赋值给基类A1构

造函数的参数x和y。请在注释“〃**3**”之后添加适当的语句。

⑷完成类A2的成员函数show的定义,该函数调用基类成员函数,输

出基类数据成员a和b及类A2自身的数据成员c的值,上述三个值在

输出时以空格隔开。请在注释“〃**4**”之后添加适当的语句。

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

程序输出结果如下:

9

6

962

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

#include<iostream.h>

classA

(

inta;

public:

〃**]**

intgeta(){returna;}

);

classAl:publicA

(

intb;

public:

〃**2**

intgetb(){returnb;}

);

classA2:publicAl

(

intc;

public:

〃**3**

voidshow()

(

〃**4**

)

);

voidmain()

{

A2a(2,6,9);

cout<<a.geta()<<endl;

cout<<a,getb()<<end1;

a.show();

参考答案

l.A解析:此题考查的是模板的特点。模板是以一种完全通用的方法来

设计函数或类而不必预先说明将被使用的每个对象的类型。

2.A解析:一些较流行的程序语言允许过程的递归调用。递归调用就是

过程调用本身。递归实现的是:当过程每一次执行后,都能返回到最近

一次调用它的过程中。这样各调用点之间形成一种后进先出关系,而栈

结构正适合来存储这些调用点。选项A正确。

3.A解析:本题考核静态数据成员的应用。分析程序:

①类visited中,定义了两个私有成员:整型变量number和指针变量

name。两个公有成员:静态数据变量glob和函数setmes()。

②在函数setmes中,把传入的字符串保存在类的私有成员name中,并

把静态数据成员glob自加,同时赋值给私有成员number。

通过以上分析可知,函数setmes()用来记录输入的名字(即来访者的姓

名),静态数据变量glob用来记录有多少来访者。

在主函数中,输入5个字符串(即5个来访者的姓名)后,用来记录来访

者数目的静态数据成员glob的值变成5°所以程序最后的输出结果是5。

4.B解析:C++基本的性质就是它的封装性,而封装性主要是靠类来实

现的。

5.C

6.D解析:面向对象方法是一种运用对象、类、封装、继承、多态和消

息等概念来构造、测试、重构软件的方法。面向对象方法从对象出发,

发展出对象、类、消息、继承等概念。

7.D

8.C解析:允许在函数的说明或定义时给一个或多个参数指定默认值。

注意不能在函数说明和函数定义时都指定默认参数值,默认参数值应该

在函数名第一次出现时指定。

9.C解析:在进入最后一次循环时a=10,在循环体内执行“a++;”后a

=11,执行完该次循环体计算for循环的增量部分后a=12小于10,循

环结束。

10.D解析:C++类中的静态成员变量是该类中所有对象所共有的,它

能够被类中的任何函数调用,所以选项A)、选项B)、选项C)是错误

的。而类的静态数据成员是必须要进行初始化才能使用的。

11.BB【解析】1966年Boehm和JaCopini证明了程序设计语言仅仅使用

顺序、选择和重复三种基本控制结构就足以表达出各种其他形式结构的

程序设计方法。

12.D解析:函数模板的重载是靠模板参数的数量不同来区分的,因为函

数模板是抽象的,有待于进一步实例化,所以靠参数类型无法区别调用

哪个函数模板。

13.D

Do【解析】函数可以被定义为模板;"template(模板形参表><返回值

类型><函数名〉(模板函数形参表){//函数定义体},”其中〈摸板形参

表〉是由一个或多个〈模板形参〉组成,每个<模板形参〉可以有这几种

形式:typename.(参数名〉,class<(参数名〉,<类型修饰〉<参数名〉;

前两种是等价的typename和Class可以互换,它们的参数为虚拟类型

参数;最后一种参数是常规参数。

14.CC。【解析】软件工程是研究和应用如何以系统性的、规范化的、可

定量的过程化方法来开发和维护软件,以及如何把经过时间考验而证明

正确的管理技术和当前能够得到的最好的技术方法结合起来。软件工程

的目标是生产具有正确性、可用性及开销合宜的产品,它的主要思想是

强调在软件开发过程中需要应用工程化原则。

15.C

16.A

17.C解析:此题属于记忆性的题目,NULL是指未知的值或无任何值。

18.C

new是动态申请内存空间时使用的关键字,不能作为函数的返回类

型,选项A为无返回值,选项B为返回整型,选项D为返回长整型。

19.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。因此程序输出结果为

1218855-

20.C根据总体结构图可以看出该树的深度为3,比如:XY系统——功

能2——功能2.1,就是最深的度数的一个表现。

21.B

Bo【解析】主要考查函数模板的定义。声明一个函数模板的格式为

“template<<模板形参表声明〉〉〈函数声明〉",其中〈模板形参〉具有

typename<参数名〉、class<参数名>、<类型修饰〉<参数名〉三种形式,

形参用“o”括起来。

22.C

23.C解析:在长度为n的线性表中,在最坏情况下,冒泡排序需要经过

n/2遍的从前往后的扫描和n/2遍从后往前的扫描,共需n(n-l)/2o

24.数据字典数据字典解析:在结构化分析方法中,用于描述系统中所

用到的全部数据和文件的文档称为数据字典°

25.TT解析:定义成员函数需要模板参数声明,使函数具有通用的类型

以便被替换。

26.friendclassB;friendclassB;解析:在B类中出现了对A类中私有成

员numl的直接访问,这是不允许的。所以必须要把类B设成类A的友

员就可以编译通过了。

27.方法方法解析:在面向对象方法中;方法是指允许作用于某个对象

上的各种操作。允许作用于某个对象上的操作称为方法。

28.成员初始化列表成员初始化列表解析:派生类是基类的具体化,而

基类则是派生类的抽象。派生类也就是基类的具体实现,所以对基类数

据成员的初始化是在派生类的构造函数中成员初始化列表执行的。

29.真真解析:本题考核C++运算符运算优先级和结合性。执行语句

"x=x&&yIIz;”后,x的值变为falseo执行“y=xHy&&z;"后,y的值

变为false,执行“z=!(x!=y)IIy==z);”后,z的值变为true。

3O.delete[]ptrdelete[]ptr解析:本题考察对象数组的销毁方法,注意删

除对象数组时,口内不要指定大小。

31.函数模板、类模板函数模板、类模板

32.BaseClassDerivedlClassDerived2Class

33.44解析:此题考查的是局部静态变量。局部静态变量是在函数或语

句块中以static关键字定义的局部变量。其作用域和普通局部变量一样

只在定义函数或语句块中有效,但生存周期却是和全局变量一样,一直

延续到程序结束。故第一次调用f(),局部静态变量s变为2O第二次调

用f(),s又自增2,所以函数f的返回值是4。

34.protectedprotected解析:本题考察类的访问权限,属于基本知识,考

生应熟练掌握。

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

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

不能说明为虚函数。

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

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

38.(1)应添加“public:

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

\n⑶“i++;”应改为“i-;

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

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

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

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

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

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

循环永远不会退出。

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

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

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

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

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

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

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

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

函数返回值为void,因此第2处的语句应改为“voidTC::display"。由第

3处的语句"(3::1<:”可知,显然这里是在类外实现析构函数,析构函

数是一个特殊的函数,它的名称和类名相同,并在前面加“字符,用

采与构造函数加以区别,因此第3处的语句应改为“TC::~TC”。

40.(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”。

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

42.(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;

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

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

\n(2)应改为"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(str[i])”°第3处的“if(str[i]>=a)”语句是

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

,,

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

45.(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(,l.txt',ios::

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

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

46.(1)应添力口“People(char*sUserName,intnOld)”。

⑵应添加"m_UserName[i]=O;

(3)应添力口“fhendvoidfun(char*s,People&personhPeople&

person2);

⑷将“i3补充完整为“if(personl.m_Old)person2.mOld)”。

【解析】本题第1处要求“完成类的构造函数”。根据

“classPeople”语句知道People为类,所以类People的构造函数名为

People,根据第1处的大括弧中的语句知道函数中的参数为数组

sUserName存放姓名,整型nOld存放年龄,所以补充构造函数定义

为“People(char*sUserName,intnOtd)”。第2处要求”完成构造函数对姓

名的贼值”。第2处补全姓名赋值,即“m_UserName[i]=O;

温馨提示

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

评论

0/150

提交评论