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

付费下载

下载本文档

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

文档简介

2023年湖南省益阳市全国计算机等级考试C++语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.以下循环体的执行次数是

main()

{inti,j;

for(i=0,j=1;i<=j+1;i+=2,j--)cout<<i<<endl;

}

A.3B.2C.1D.0

2.为用户与数据库系统提供接口的语言是

A.高级语言B.数据描述语言(DDL)C.数据操纵语言(DML)D.汇编语言

3.下列叙述中,正确的是()。

A.入栈运算只需将新元素插到栈顶指针指向的位置

B.出栈运算只需将栈顶元素赋给一个指定变量

C.出栈运算与读栈顶元素是相同的操作

D.读栈顶元素不删除栈顶元素

4.C++中运算符优先级由高到低排列正确的是

A.::+++||B.<*||,C.sizeof%+::D.,&&newsizeof

5.下列关于纯虚函数与抽象类的描述中,错误的是()。

A.纯虚函数是一种特殊的虚函数,它没有具体的实现

B.抽象类是指具有纯虚函数的类

C.一个基类中说明具有纯虚函数,该基类的派生类一定不再是抽象类

D.抽象类只能作为基类来用,其纯虚函数的实现由派生类给出

6.有如下函数模板声明:template<typenameT>TMax(Ta,Tb){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)

7.以下各选项组中,均是C++语言关键字的组是

A.publicoperatorthis

B.shodstringstatic

C.itwhile>=

D.privatecoutprintf

8.若有以下程序:#include〈iostream〉usingnamespacestd;classsample{private:intn;public:sample(){}sample(intm){n=m;}voidaddvalue(intm){samples;s.n=n+m;*this=s;}voiddisp(){cout〈〈"n="〈〈n〈〈end1;}};intmain(){samples(10);s.addvalue(5);s.disp();return0;}程序运行后的输出结果是()。

A.n=10B.n=5C.n=15D.n=20

9.下列语句的输出结果cout<<strlen("\t\,\065\xff\n");

A.5B.14C.8D.输出项不合法,无正常输出

10.下列表示引用的方法中,()是正确的。已知:intm=10:

A.int&x=m;

B.int&y=10;

C.int&Z

D.float&t=&m;

二、单选题(13题)11.软件生命周期中的活动不包括()。

A.市场调研B.需求分析C.软件测试D.软件维护

12.执行下列语句后,输出结果为()。cout.put(S);cout<<C<<a;A.caB.scaC.SD.a

13.下列关于派生类构造函数和析构函数的说法中,错误的是()。

A.派生类的构造函数会隐含调用基类的构造函数

B.如果基类中没有缺省构造函数,那么派生类必须定义构造函数

C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数

D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数

14.下列选项中正确的语句是()。

A.A.chars[3];s="BOOK!";

B.B.char*s;s={"BOOK!"};

C.C.chars[10];s="BOOK";

D.D.char*S;s="BOOK!";

15.通过派生类的对象可直接访问其A.公有继承基类的公有成员B.公有继承基类的私有成员C.私有继承基类的公有成员D.私有继承基类的私有成员

16.是()。A.2*a*b/c/dB.a*b/c/d*2C.a/c/d*b*2D.2*a*b/c*d

17.C++语言本身没有定义I/O操作,但I/O操作包含在C++实现中。C++标准库iostream提供了基本的I/O类。I/O操作分别由两个类istreanl和()提供。

A.fstreamB.iostreamC.ostreamD.cin

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

A.PADB.PFDC.N-SD.DFD

19.下列选项中不合法的标识符是()。

A.printB.FORC.&aD.-00

20.设inta=10,b=11,C=12;,表达式(a+B.<Cb==C的值是()。A.2B.0C.-2D.1

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

A.软件测试的目的是发现错误并改正错误

B.对被调试的程序进行“错误定位”是程序调试的必要步骤

C.程序调试通常也称为Debug

D.软件测试应严格执行测试计划。排除测试的随意性

22.有下列程序:#include<stdi0.h>intb=2;intfun(int*k){b=*k+b;return(b);)voidmain(){inta[10]={1,2,3,4,5,6,7,8},i;for(i=2;i<4;i++){b=fun(&a[i])+b;printf("%d",b);}printf("\n");}程序运行后的输出结果是()。A.1012B.810C.1028D.1016

23.下列叙述中正确的是()。

A.软件测试应该由程序开发者来完成

B.程序经调试后一般不需要再测试

C.软件维护只包括对程序代码的维护

D.以上三种说法都不对

三、2.填空题(12题)24.表达式c3=c1.operator+(c2)或c3=operator+(c1,c2)还可以表示为______。

25.类istream的成员函数______从指定流中读取一个字符,成员函数______和______从指定流中读取多个字符。

26.已知doublevar;是文件F1.CPP中的一个全局变量定义,若文件F2.CPP中的某个函数也需要访问,则在文件F2.CPP中var应说明为【】。

27.内联函数是通过【】来实现的,因此内联函数是真正的函数。

28.switch后面括号中的表达式只能是整型、______或枚举型表达式。

29.下面程序的结果【】。

#include<iostream.h>

intf(int);

voidmain(){

intx=1,i;

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

cout<<f(x)<<‘’;

cout<<end1;

}

intf(intx){

inty=1;

staticintz=3

y++;

z++;

return(x+y+z);

}

30.表达式x.operator++()还可写成______。

31.创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,则调用默认构造函数,下列程序涉及对象数组的创建和单个对象的创建,其输出结果是______。

#include<iostream>

usingnamespacestd;

classFoo{

public:

Foo(intx){eout<<'A';}

Foo(){}

};

intmain(){

Foof[3],g(3);

return0;

32.己知类sample是一个抽象类,其成员函数display是无形参、无返回类型的纯虚函数,请完成其声明:

classsample{

public:

sample(){};

______

};

33.如果一个对象部分地包含自己,或自己定义自己,则称这个对象是【】的对象。

34.执行以下程序后,输出“*”号的个数是______。

#include<iostream.h>

main()

{

inti,j;

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

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

cout<<'*';

}

35.带有虚基类的多层次派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样对虚基类的子对象初始化【】次。

四、程序改错题(10题)36.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h>

voidmain

{

inti=0;

charstr[120];

cout<<"Enterastringendwith?."<<endl;

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

cin.getline(str,120);

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

while(str)

{

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

if(str[i])=a)

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

i++;

}

cout<<str<<endl;

return;

}

37.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果正确。程序输出:88注意:错误的语句在/********error********/的下面。修改该语句即可,其他的语句不能修改。试题程序:#include(iostream.h>classCO{public:/********error********/staticintn=0:CO{n++:}~CO{n--:}}:/********error********/intCO::n;voidmain{COobj;COobj2[7];CO*C=NULL:c=&obj:/********error********/eout<<C.n<<endl;cout<<C0::n<<endl;}

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

{

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

inti;

TC04(10);

while(i>5)

{

/********errOr********/

i++:

04.print;

}

cout<<endl;

return0;

}

39.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:

number=1

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

{

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

//********error*‰******

TC.SetNumber(100);

objl.Print;

obj2.Print;

}

40.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。试题程序:#include<iostream.h)intmain{try{throw("error");}//********error********catch(chars){cout<<s<<endl;}try{throw((int)0);}//********error********catch{cout<<i<<endl;}try{throw(O);throw("error");}//********error********catch{cout<<"ERROR"<<endl;}return0;}

41.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

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

试题程序:

#include(iostream.h)

classTC

{

inti;

public:

TC;

voiddisplay;

~TC;

};

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

TC:TC

{

cout<<"Constructor"<<",";

i=0;

)

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

TC:display

{

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

}

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

TC:TC

{

COUI<<"Destructor"<<endl:

}

voidmain

{

TCa;

a.display;

}

42.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=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{//********error********TCobjl;objl.Print;TCobj2(3);//********error********objl.number=10;//********error*‰******TC.SetNumber(100);objl.Print;obj2.Print;}43.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。试题程序:#include<iostream>#include<fstream>//********error********usingstd;voidWriteFile(char*s){ofstreamout1;//********error********out1.open("1.txt",binary|app);for(inti=0;s[i]!=0;i++){//********error********out1.puts(s[i]);}out1.close;}voidClearFile{ofstreamout1;out1.open("1.txt");out1.close;}intmain{chars[1024];ClearFile;cout<<"pleaseinputastrin9:"<<endl;cin.getline(s,1024);WriteFile(s);return0;}

44.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:

sizeof(S1)=5

sizeof(s2)=10

sizeof(s3)=1

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

(1)不能删除assert()语句。

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

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

试题程序:

#include<iostream.h>

#include<assert.h>

voidmain()

{

char*s1="abc":

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

assert(sizeof(s1)==3):

cout<<"sizeof(s1)=5"<<endl;

chars2[10]="ab":

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

assert(sizeof(s2)==2);

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

chars3=23:

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

assert(sizeof(s3)==4);

cout<<"sizeof(s3)=1"<<endl;

return;

}

45.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。

程序异常,输出信息为

error

O

ERROR

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h)

intmain

{

try

{

throw("error");

}

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

catch(chars)

{

cout<<s<<endl;

}

try

{

throw((int)0);

}

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

catch

{

cout<<i<<endl;

}

try

{

throw(O);

throw("error");

}

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

catch

{

cout<<"ERROR"<<endl;

}

return0;

}五、综合应用题(2题)46.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的DataList类,是一个用于表示数据表的类。DataList的重载运算符函数0perator+,其功能是求当前数据表与另一个相同长度的数据表之和;即它返回一个数据表,其每个元素等于相应两个数据表对应元素之和。请编写这个operator+函数。程序的正确输出应该是:两个数据表:1,2,3,4,5,63,4,5,6,7,8两个数据表之和:4,6,8,10,12,14要求:补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件。ut.dat中。输出函数writeToFile已经编译为。bj文件,并且在本程序中调用。//DataList.h#inClude<iostream>usingnamespaCestd;ClaSSDataList{//数据表类intfen;double*d;publiC:DataList(intlen,doubledata[]=NULL);DataList(DataList&data);intlengthConst{retumlen;}doublegetElement(inti)Consttreturnd[i];}DataListoperator+(ConstDataList&list)Const;//两个数据表求和voidshowConst;//显示数据表};voidwriteToFile(Char$,ConstDataList&);//main.Cpp#inClude”DataList.h”DataList::DataList(intlen,doubledata[]):len(ien){d=newdouble[1en];for(inti=0;i<len;i++)d㈨i=(data==NULL?0.0:data[i]);}DataList::DataList(DataList&data):len(data.1en){d=newdouble[1en];for(inti=0;i<len;i++)d[i]=data.d[i];DataListDataList::0perator+(Con8tDataList&list,)Const{//两个数据表求和double*dd=newdouble[1ist.1ensth];//********333********//********666********returnDataList(1ist.1ength,dd);}voidDataList::showConst{//显示数据表fr(int。i=0;i<len-1;i++)eout<<d[i]<<”,”;Cout<<d[1en-1]<<endl;intmain{doublesl[]={1,2,3,4,5,6};doubles2[]={3,4,5,6,7,8};DataListlist1(6,sl),list2(6,s2);//定义两个数据表对象eout<<”两个数据表:”<<endl:listl.show:list2.show;eout<<endl<<”两个数据表之和:”<<endl:(1istl+list2).show;writeToFile(””,listl+list2);return0:47.使用VC++6.0打开考生文件夹下的源程序文件3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。(1)定义类的公有数据成员函数N0、Name[32],其中N0是int型的数据,Name[32]为字符型。请在注释1后添加适当的语句。(2)完成函数Set的定义,分别设置N0和Name的值,请在注释2后添加适当的语句。(3)完成函数print,请在注释3后添加适当的语句,输出结果如下:N0=12345Name=HelloWorld!(4)添加默认构造函数,设置N0为0,Name为空,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#include<iostream.h>classTC{public://********1********//********2********{No=no;for(inti=0;strName[i]!=0;i++){Name[i]=strName[i];Name[i+1]=0;}}voidprint(){//********3********}TC(){//********4********)};intmain(){TCstu:stu.Set(12345,"HelloWorld!");stu.print();return0;}六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程MyProj8。此工程包含一个源程序文件MyMain8.cpp,该程序实现栈的入栈和出栈的操作。其中有两个类:一个是节点类node,它包含节点值和指向上一个节点的指针prey;另一个类是栈类stack,它包含栈的头指针top。但类的定义并不完整。

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

①定义私有节点值data,它是血型的数据,以及定义一个指向上一个节点的指针prev。请在注释“//**1**”之后添加适当的语句。

②完成构造函数node(intd,node*n)的定义,使得私有成员data和prev分别初始化为d和n。请在注释“//**2**”之后添加适当的语句。

③完成类stack的成员函数push(inti)的类体内的定义。函数push()实现入栈这个操作,即把形参i压入栈中,那么此时应该创建一个新的节点,并让这个节点的prev指针指向栈顶。请在注释“//**3**”之后添加适当的语句。

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

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

//MyMain8.cpp

#include<iostream>

usingnamespacestd;

classstack;

classnode

{

private:

//**1**

public:

node(intd,node*n)

{

//**2**

}

friendclassstack;

};

classstack

{

node*top;//栈头

public:

stack()

{

top=0;

}

voidpush(inti)

{

//**3**

}

intpop()

{

node*t=top;

if(top)

{

top=top->prev;

intc=t->data;

deletet;

returnc;

}

return0;

}

};

intmain()

{

stacks;

s.push(6);

s.push(3);

s.push(1);

return0;

}

49.使用VC6打开考生文件夹下的工程MyProj9。此工程包含一个源程序文件MyMain9.cpp。程序中定义了两个类Point和Circle,但类的定义并不完整。

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

①类Circle是基类Point公有派生宋的。请在注释“//**1**”之后添加适当的语句。

②完成构造函数Circle(inta,intb,intc)的定义,采用初始化列表的方式使基类Point私有成员x、y分别初始化为a、b,类Circle的私有成员r初始化为c。请在注释“//**2**”之后添加适当的语句。

③完成类Circle的成员函数area()的类体外的定义。函数area的功能是计算出此圆对象的面积,即PI*r*r。请在注释“//**3**”之后添加适当的语句。

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

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

//MyMain9.cpp

#include<iostream>

usingnamespacestd;

#definePI3.14

classPoint

{

private:

intx,y;

public:

Point(inta,intb)

{

x=a;

y=b;

}

intgetx()

{

returnx;

}

intgety()

{

returny;

}

};

//**1**

{

private:

intr;

public:

//**2**

intgetr()

{

returnr;

}

doublearea();

};

doubleCircle::area()

{

//**3**

}

intmain()

{

Circlec1(5,7,10);

cout<<c1.area()<<end1;

return0;

}

参考答案

1.D解析:本题考查考生对for循环中三个表达式的执行顺序及使用方法。首先执行第一个表达式,然后判断第二个表达式是否成立,如果成立则执行循环体,然后执行第三个表达式,随后再去判断第二个表达式。根据这个顺序,可以很容易的判断出,循环体只执行了一次。

2.C数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。

\u3000\u3000数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。

\u3000\u3000数据查询语言(DQL),例如:SELECT语句。

\u3000\u3000数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。

3.D解析:入栈运算需先将栈顶指针加1,然后将新元素插到栈顶指针指向的位置,选项A是错误的。出栈运算需将栈顶元素赋给一个指定变量,然后将栈顶指针减1,选项B是错误的。出栈运算与读栈顶元素不同之处在于读栈顶元素不删除栈顶元素。答案是选项D。

4.A解析:运算符的优先级是::最高,其次是【】,(),等,然后是++,--,再低还有->*,*,+,<<,>>,=。注意:逗号的优先级最低。

5.A解析:本题考核纯虚函数和抽象类的定义。

①基类的虚函数有时候不可能被调用到,这时可定义该虚函数为纯虚函数。纯虚函数没有函数体,但一定要进行说明,它告诉编译器,它的具体实现在派生类中。所以选项A的说法是错误的。

②抽象类是指至少有一个纯虚函数的类。它往往表示一些抽象的概念,它的成员函数没有什么意义。所以选项B的描述是正确的。

③抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的上层。抽象类的主要作用是将有关的类组织在一个继承层次结构中,由它来为它们提供一个公共的根,相关的子类是从这个根派生出来的。

对于抽象类的使用有几点规定:抽象类只能用作其他类的基类,不能建立抽象类对象。抽象类不能用作参数类型、函数返回类型或显式转换的类型。可以说明指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。

由此可知选项C和D的描述是正确的。

6.B解析:引用模板函数和引用一般的函数在语法形式上没有任何区别。说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应的形参。

7.A解析:关键字是系统已预定义的单词,在程序中有不同的用途,考生应该熟记。

8.C解析:本题考核this指针的应用。本程序中sample类定义了一个addvalue非静态成员函数。addvalue()函数的原型是:voidaddvalue(sample*this,intm);,该函数的第1个参数是执行该类对象的一个指针,即this指针。由于这个参数是系统隐含的,所以在定义该成员函数时并没有看到这样一个参数。在成员函数的定义体中,可以通过this访问这一参数。程序的最后输出结果是15。

9.A解析:该字符串中包含的字符是\'\\t\'(跳格符)、\'\\'\'/(双引号)、\'\\065\'(ASCII值为八进制数065,也即十进制数为51的字符)、\'\\xff’(ASCII值为十六进制数ff,也即十进制数为255的字符)、\'\\n\'(换行符)。

10.A

11.A软件的生命周期描述了软件从产生到最终消亡的全过程,生命周期中的活动包括需求分析、软件设计(分为概要设计和详细设计)、软件实现、软件测试和软件维护,不包括市场调研。

12.B解析:本题很简单,考查cout对象的成员函数put方法和<<操作符的使用方法。

13.D解析:本题考查的知识点是;派生类的构造函数和析构函数。在销毁派生类对象时,析构函数的执行;过程与构造函数严格相反,即;(1)对派生类新增普通成员进行清理;\u3000(2)调用成员对象析构函数,对派生类新增的成员对象进行清理;(3)调用基类析构函数,对基类进行清理。故本题应该选择D。

14.DD。【解析】在选项D中.字符指针s指向字符串常量BOOK!。故选项D正确。

15.A本题主要考查了继承和派生。基类中的公有成员在派生类中的访问控制属性将随着继承方式而改变:派生类从基类公有继承时,基类的公有成员在派生类中仍然是公有成员;派生类从基类私有继承时,基类的公有成员在派生类中改变为私有成员;无论哪种继承方式,派生类的成员和派生类的对象都无法访问基类的私有成员。因此选项B和选项D错误。通过类的对象只能访问类的公有成员,因此选项C错误。

16.DD。【解析】本题考查运算符的优先级书写及运算。*、/运算优先级相同,据此判断,选项D表示的是2abd/c,而不是2ab/(cd)。

17.CC。【解析】本题考查的是C++标准库iostream提供的基本I/O类。istream提供了向流中插入数据的有关操作;0stream提供了从流中提取数据的有关操作。

18.D解析:需求分析常用的工具有数据流图(DFD)、数据字典(DD)、判定树和判定表。PAD(问题分析图)、PFD(程序流程图)、N-S(盒式图)都是详细设计的常用工具,不是需求分析的工具。

19.CC。【解析】标识符的概念只能由数字、字母和下画线组成,并且只能以字母和下画线开头,所以选项C不正确。

20.B本题考查的是运算符的优先级,应该先计算a+b的值为21,然后与C比较大小的值为0,根据“&&”的运算规则,整个表达式的值为0。

21.AA。【解析】软件测试是为了发现错误而执行程序的过程。软件测试要严格执行测试计划,排除测试中的随意性。程序凋试通常也称Debug,对被调试的程序进行“错误”定位是程序调试的必要步骤。

22.CC。【解析】在程序中子函数fun(int*k)的作用是给静态全局变量加上形参*k的值。在主函数中进行第一次for循环执行时,fun(&a[2])的返回值为5,所以5+5=10,\r\n因而输出结果为10,第二次for循环执行时,fun(&a[3])的返回值为14,所以14+14=28。

23.D解析:本题考核软件测试、软件调试和软件维护的概念。软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。软件测试具有挑剔性,测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,其目的是设法暴露程序中的错误和缺陷,就是说,测试是程序执行的过程,目的在于发现错误;一个好的测试在于能发现至今未发现的错误;一个成功的测试是发现了至今未发现的错误。由于测试的这一特征,一般应当避免由开发者测试自己的程序。所以,选项A的说法错误。

调试也称排错,目的是发现错误的位置,并改正错误,经测试发现错误后,可以立即进行调试并改正错误;经过调试后的程序还需进行回归测试,以检查调试的效果,同时也可防止在调试过程中引进新的错误。所以,选项B的说法错误。

软件维护通常有4类:为纠正使用中出现的错误而进行的改正性维护;为适应环境变化而进行的适应性维护;为改进原有软件而进行的完善性维护;为将来的可维护和可靠而进行的预防性维护。软件维护不仅包括程序代码的维护,还包括文档的维护。文档可以分为用户文档和系统文档两类。但无论是哪类文档,都必须与程序代码同时维护。只有与程序代码完全一致的文档才有意义和价值。所以,选项C的说法错误。

综上所述,选项A、B、C的说法都错误,所以,选项D为正确答案。

24.c3=c1+c2

25.get、getline、read

26.外部变量外部变量

27.编译器编译器解析:内联函数是通过编译器,只是在调用的时候,像宏一样展开。注意:内联函数比普通函数的效率更高。

28.字符型字符型

29.789

30.++x++x解析:C++语言中用成员函数重载++x为x.operator++(),用友元函数重载++x为:operator++(x)。

31.AA解析:数组f[3]调用的是无参构造函数,而g(3)调用的是第一个有参构造函数,故打印A。

32.virtualvioddisplay()=0;virtualvioddisplay()=0;解析:此题考查的是纯虚函数。纯虚函数定义格式是在虚函数的后面加上“=0”。与虚函数不同的是,纯虚函数允许没有函数体,故本题应填入的内容是virtualvioddisplay()=0;。

33.递归递归解析:如果一个对象部分地包含自己,或自己定义自己,则称这个对象是递归的对象。

34.6

35.一次一次解析:当一个派生从多个基类派生,而这些基类又有一个共同的基类,当对该基类中说明的成员进行访问时,可能出现二义性。虚基类就是为了解决这种二义性问题提出来的。使用虚基类解决二义性问题的关键是在派生类中只产生一个虚基类子对象,因此,带有虚基类的多层次派生类构造函数的成员初始化列表中对虚基类的子对象只初始化一次。

36.(1)应改为“ein.getline(str,120,?);”。

\n(2)应改为“while(str[i])”。

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

\n【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员函数getline函数读入一行字符,格式为“cin.getline(字符数组,字符个数,终止标志字符)”,所以第1处改为“cin.getline(str,120,?);”。第2处的“while(str)”语句应该是判断字符串str中的每一个字符是否为结束符,若不是结束符,在循环中判断每一个字符是否为小写,若为小写,则转换。所以应该修改为“while(str[i])”。第3处的“if(str[i]>=a)”语句是判断字符str[i]是否为小写字符,而现有的语句只是判断字符是否大于a,但是小写字符应该是a到2,所以修改为“if(str[i]>=a&&str[i]>=z)”。

37.(1)“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;”。

38.(1)应添加“public:”。

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

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

\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类的对象被访问。故应在构造函数前添加“public:”,否则该类无法被实例化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i每次减1,在i>5时循环,故i初始化应为10。若循环中i每次增1,则循环永远不会退出。

39.(1)应改为“TCobjl(1);”。

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

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

\n【解析】本题第1处的“TCobjl;”语句是声明TC类的对象0bj1,根据TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输出结果两1,所以补全参数1,即第1处的“TCobjl(1);”。第2处处的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中成员函数的使用形式应该是:对象名.成员函数,所以修改为“obj1.SetNumber(10);”。类是对象的抽象,而对象是类的具体实例。第3处“TC.SetNumber(100);”语句中的TC为类,并不是对象,这里应该使用定义的对象,即obj2,所以将语句修改为“obj2.SetNumber(100);”。

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

41.(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处的语句“TC::TC”可知,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名相同,并在前面加“~”字符,用采与构造函数加以区别,因此第3处的语句应改为“TC::~TC”。

42.(1)应改为“TCobjl(1);”。(2)应改为“0bj1.SetNumber(10);”。(3)应改为“0bj2.SelNumber(100);”。【解析】本题第1处的“TCobjl;”语句是声明TC类的对象0bj1,根据TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输出结果两1,所以补全参数1,即第1处的“TCobjl(1);”。第2处处的“objl.number

温馨提示

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

评论

0/150

提交评论