2022年山东省济南市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第1页
2022年山东省济南市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第2页
2022年山东省济南市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第3页
2022年山东省济南市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第4页
2022年山东省济南市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

2022年山东省济南市全国计算机等级考试C++语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.下列叙述中正确的是()。

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

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

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

D.以上三种说法都不对

2.若有intx[]={1,2,3,4,5,6,7,8,9,10},*p=x;则值为4的表达式是______。

A.p+=2,*(p++)B.p+=2,*++pC.p+=3,*p++D.p+=2,++*p

3.下列关于输入流类成员函数getline()的描述中,错误的是A.该函数是用来读取键盘输入的字符串的

B.该函数读取的字符串长度是受限制的

C.该函数读取字符串时,遇到终止符便停止

D.该函数读取字符串时,可以包含空格

4.以下程序段的输出结果是()。intx=5;do{cout<<x--<<end1;}while(!x);

A.5B.无任何输出C.4D.陷入死循环

5.类A是类B的友元,类B是类C的友元,则下列说法正确的是()。

A.类B是类A的友元B.类C是类A的友元C.类A是类C的友元D.以上都不对

6.语句ofstreamf("SALARY.DAT",ios::app|los::binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,并且______。

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

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

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

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

7.用树形结构来表示实体之间联系的模型称为

A.关系模型B.层次模型C.网状模型D.格式化模型

8.在表达式x+y*z中,“+”是作为成员函数重载的运算符,“*”是作为非成员函数重载的运算符。下列叙述中正确的是()。

A.operator+有两个参数,operator*有两个参数

B.operator+有两个参数,operator*有一个参数

C.operator+有一个参数,operator*有两个参数

D.operator+有一个参数,operator*有一个参数

9.下列关于虚函数调用的描述,______是正确的。

A.一定使用动态联编B.一定使用静态联编C.必须使用动态联编D..不一定使用动态联编

10.下列叙述中,不属于测试的特征的是()。

A.测试的挑剔性B.完全测试的不可能性C.测试的可靠性D.测试的经济性

二、单选题(13题)11.有下列程序:#include<stdi0.h>voidmain(){inta=S,b=1,t;t=(a<<2)|b;printf("%d\n",t);}程序运行后的输出结果是()。A.21B.11C.6D.1

12.下面类的定义,有()处错误。classMyClass{public:voidMyClass();~MyClass(intvahle);private:inti=0;};A.1B.2C.3D.4

13.对长度为n的线性表排序,在最坏情况下,比较次数不是n(rt一1)/2的排序方法是()。

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

14.关于类和对象描述错误的是()。

A.对象(Object)是现实世界中的客观事物,对象具有确定的属性

B.类是具有相同属性和行为的一组对象的集合

C.对象是类的抽象,类是对象的实例

D.类是对象的抽象,对象是类的实例

15.下列语句中,错误的是()。

A.constintbuffer=256;

B.constdouble*point;

C.intconstbuffer=256;

D.double*eonstpoint:

16.软件详细设计产生的如下图所示。该图是()。

A.N—S图B.PAD图C.程序流程图D.E—R图

17.下面关于break语句的描述中,不正确的是()。A.A.break可以用于循环体内

B.break语句可以在for循环语句中出现多次

C.break语句可以在switch语句中出现多次

D.break语句可用于if条件判断语句内

18.下述关于数据库系统的叙述中,正确的是()。

A.数据库系统减少了数据冗余

B.数据库系统避免了一切冗余

C.数据库系统中数据的一致性是指数据类型一致

D.数据库系统比文件系统能管理更多的数据

19.若MyClass是一个类名,其有如下语句序列:MyClassc1,*c2;MyClass*c3=newMyClass;MyClass&c4=c1;上面的语句序列所定义的类对象的个数是()。A.1B.2C.3D.4

20.当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为()。

A.ios::inB.ios::outC.ios::inlios::outD.以上都不对

21.下面有关重载函数的说法中正确的是

A.重载函数必须具有不同的返回值类型

B.重载函数形参个数必须不同

C.重载函数必须有不同的形参列表

D.重载函数名可以不同

22.设inta=1,b=2;,则(a++)+b和a+++b这两个表达式的值分别为()。

A.3,3B.3,4C.4,3D.4,4

23.若变量已正确定义并赋值,以下符合C++语言语法的表达式是()。

A.a:=b+1B.a=b=c+2C.int18.5%3D.a=a+7=c+b

三、2.填空题(12题)24.以下程序的执行结果是______。

#include<iostream.h>

classA

{

inta;

public:

voidseta(intx){a=x;}

voidshowa(){cout<<a<<endl;}

};

classB

{

intb;

public:

voidsetb(intx){b=x;}

voidshowb(){cout<<b<<endl:}

};

classC:publicA,privateB

{

private:

intc;

public:

voidsetc(intx,inty,intz)

{

c=z;

seta(x);

setb(y);

}

voidshowc(){cout<<c<<endl;}

};

voidmain()

{

Cc;

C.seta(1);

C.showa();

C.setc(1,2,3);

C.showc();

}

25.【】允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。

26.在下面函数的横线处填上适当的内容使该函数能够利用递归方法求解字符串str的长度(不得使用系统提供的字符串处理函数)。

intGetLen(char*str

{

if(【】)return【】;

elsereturn1+GetLen(str+1);

}

27.假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为【】。

28.派生类中的成员不能直接访问基类中的______成员。

29.已知数组a中的元素个数为n,下列语句的作用是将下标为i的元素移动到下标为i-1的单元,其中1≤i<n。例如,当n=4,a中原有数据为1、2、3、4时,则移动后a中元素为2、3、4、4。请将语句补充完整:

for(inti=0;i<n-1;i++)a[i]=a______。

30.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行调用______的构造函数。再执行调用子对象类的构造函数,最后执行派生类的构造函数体中的内容。

31.C++语言的函数参数传递方式有值传递和【】、引用传递。

32.冒泡排序算法在最好的情况下的元素交换次数为【】。

33.完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例的测试方法是【】。

34.下面是一个栈类的模板,其中push函数将元素i压入栈顶,pop函数弹出栈顶元素。栈初始为空,top值为0,栈项元素在stack[top-1]中,在下面横线处填上适当语句,完成栈类模板的定义。

template<classT>

classTstack{

enum{size=1000};

Tstack[size];

inttop;

public:

Tstack():top(0){

voidpush(constT&i){

if(top<size)

stack[top++]=i;

}

Tpop(){

if(top==0)exit(1);//栈空时终止运行

return______;

}

};

35.有以下程序:

#include<iostream>

usingnamespacestd;

classBase

{

public:

Base()

{

x=0;

}

intx;

};

classDerivedl:virtualpublicBase

{

public:

Derived1()

{

x=10;

}

};

classDerived2::virtualpublicBase

{

public:

Derived2()

{

x=20;

}

};

classDerived:publicDerived1,protectedDerived2

{};

intmain()

{

Derivedobj;

cout<<obj.x<<endl;

return0;

该程序运行后的输出结果是【】。

四、程序改错题(10题)36.使用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;

}

37.使用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;}

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

}

39.使用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;}

40.使用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;

}

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

42.使用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;

}

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

}

44.使用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;}

45.使用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;

}

五、综合应用题(2题)46.使用VC++6.0打开源程序文件3.cpp。其中类TC用于把文件输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将in.txt文件中的内容输出到屏幕,并且将文件按照以上方式分割,存于文件out1.txt和out2.txt中。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)从输入文件中获得一个字符,并判断是否到文件结尾,如果到文件结尾,则退出循环。请在注释1后添加适当的语句。(2)把获得的输入文件的内容存储到bur中,并且用len记录下文件的长度。请在注释2后添加适当的语句。(3)将输入文件的后一半内容存储在第二个文件中,请在注释3后添加适当的语句。(4)使用文件流对象打开输入文件in.txt,请在注释4后添加适当的语句。注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。试题程序:#include<iostream.h>#include<fstream.h>#include<stdlib.h)classTC{public:TC(char*fileName){len=0;fstreaminfile;infile.open(fileName,ios::in);charch;//********1********while{cout<<ch;//********2********}infile.close;}voidsplit{fstreamoutfilel;fstreamoutfile2;outfile1.open("out1.txt",ios::out);outfile2.open("out2.txt",ios::out);inti=0:for(i=0;i<len/2;i++){outfilel<<buf[i];}do{//********3********}while(i!=len);outfilel.close;outfile2.close;}prwate:intlen;charbuf[1024];};voidmain{//********4********TCobj;obj.split;return;}

47.请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,补充编制c++程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并输出到文件out.dat中。文件in.dat的长度不大于1000字节。要求:补充编制的内容写在“//**********”与“//**********”两行之间。实现将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件0ut.dat中,输出函数writeToFile已经给出并且调用。//proj3.cpp#include<iostream>#include<fstream>#include<catting>usingnamespacestd;classdoc{private:char*sir;//文本字符串首地址intlength;//文本字符个数public://构造函数,读取文件内容,用于初始化新对象,filename是文件名字符串首地址doc(char*filename);voidreverse;//将字符序列反转一doc;voidwriteToFile(char*filename);};doc::doc(char}filename){ifstreammyFile(filename);intlen=1001,tmp;atr=newchar[1en];length=0;while((trap=myFile.get)!=EOF){str[1ength++]=trap;}str[1ength]=‘\0’;myFile.close;}voiddoc::reverse{//将数组atr中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个//字符交换……//*************333*************//*************666*************}doc::~doe{delete[]str;}voiddoc::writeToFile(char*filename){OfstreamoutFile(filename);outFile<<str;outFile.close;}voidmain{docmyDoc(”in.dat”);myDoc.reveme;myDoc.writeToFile(”out.dat”);}

六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test36_3。此工程包含一个test36_3.cpp,其中定义了类CRectangle,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)定义类CRectangle的数据成员width和height,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。

(2)添加类CRectangle的友元函数duplicate()的声明,其返回值类型和参数类型均为Crectangle的,请在注释“//**2**”之后添加适当的语句。

(3)完成类Crectangle的成员函数set_values的定义,把传入的参数a和b分别赋值为数据成员width和height,请在注释“//**3**”之后添加适当的语句。

(4)完成派生类Crectangle的友元函数duplicate的定义,把函数中的临时对象rectres的值返回主函数,请在注释“//**4**”之后添加适当的语句。

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

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

#include<iostream.h>

classCRectangle

{

//**1**

public:

voidset_values(int,int);

intarea(void){return(width*height);}

//**2**

};

voidCRectangle::set_values(inta,intb)

{

//**3**

}

CRectangleduplicate(CRectanglerectparam)

{

CRectanglerectres;

rectres.width=rectparam.width*2;

rectres.height=rectparam.height*2;

//**4**

}

voidmain()

{

CRectanglerect,rectb;

rect.set_values(2,3);

rectb-duplicate(rect);

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

}

49.使用VC6打开考生文件夹下的工程test16_3,此工程

(1)定义类Cat的保护数据成员itsAge用于表示年龄,它是int型的数据。请在注释“//**1**”之后添加适当的语句。

(2)定义类Cat的保护数据成员GetAge()的类外定义,返回成员的itsAge值,请在注释“//**2**”之后添加适当的语句。

(3)完成成员函数SetAge(intage)的类外定义,把数据成员itsAge赋值为参数age的值,请在注释“//**3**”之后添加适当的语句。

(4)完成成员函数Meow的类外定义,使其输出字节符串“meow.”到屏幕上。请在注释“**4**”后添加适当的语句。

输出结果如下:

meow.

kittyisacatwhois5yearsold.

meow.

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

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

#include<iostream.h>

classCat

{

public:

intGetAge();

voidSetAge(intage);

voidMeow();

protected:

//**1**

};

intCat::GetAge()

{

//**2**

}

voidCat::SetAge(intage)

{

//**3**

}

voidCat::Meow()

{

//**4**

}

voidmain()

{

Catkitty;

kitty.Meow();

kitty.SetAge(5);

cout<<"kittyisacatwhois";

cout<<kitty.GetAge();

cout<<"yearsold.\n";

kitty.Meow();

}

参考答案

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

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

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

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

2.C

3.A解析:本题考查的是getline()函数。getline()函数的原型为:istream_type&getline(char_type*s,streamsizen,char_typedelim);,其功能是从当前输入位置开始提取字符存入s所指向的具有n个字节的字符空间中。字符的提取与存储在遇到下列情况时停止:

①已提取并存储了n-1个字符;

②到流尾,无字符可提取;

③下一个要提取的字符等于结束标志字符delim。

因此,选项B、C、D都是正确的。getline()函数不仅可以用宋读取键盘输入的字符串,还可以用来读取文件等数据流,故选项A不正确。

4.A解析:本题考查循环语句do-while语句的执行情况.根据do-while循环语句功能特点可得:首先无条件执行循环体,表达式x--的值为5,输出为5,x的值变为4,然后检查条件(!x)为假(false),则循环结束。

5.D解析:选项A)、选项B)和选项C)都不正确,因为友元关系是单项的,并且没有交换性、传递性。

6.B

7.B解析:用树形结构来表示实体之间联系的模型称为层次模型。

8.C解析:此题考查的是运算符的重载。运算符可重载成员函数,也可重载为友元函数。当重载为成员函数时,运算符重载函数的形参个数要比运算符操作数的个数少一个;当重载为友元函数时,其参数个数应与操作敷的个数相同。

9.C

10.C解析:软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。它有3个方面的重要特征,即测试的挑剔性、完全测试的不可能性及测试的经济性。其中没有测试的可靠性这一说法。注意:软件测试与软件调试的概念,以及相应的方法。

11.AA。【解析】本题考查移位运算符在程序中对5逻辑左移2位,其值扩大4倍等于20,然后再进行按位运算,其值等于21。

12.CC。【解析】上述类的定义共有三处错误:①类的成员变量不能在定义时进行初始化;②类的构造函数不能有返回值(包括void类型);③类的析构函数不能有参数。

13.D除了堆排序算法的比较次数是0(nlog2n),其他的都是n(n—1)/2。

14.CC。【解析】C++中,类是用户自定义的一种数据类型,对象是类的实例,类定义了属于该类的所有对象的共同特性。一个类作为一种数据类型,它可以定义多个对象。

15.Dconst是一个C++关键字,用于限定不允许改变的变量。选项B是指向常量的指针,定义时可以不初始化;选项D是指针常量,定义时必须初始化。故答案为D。

16.CC。【解析】N—S图是由若干基本框图构成的流程图,其特点是没有流程线;PAD图即问题分析图(ProblemAnalysisDiagram),它是一种由左往右展开的二维树型结构;程序流程图用于描述问题解决的过程和步骤,其中方框表示处理步骤、菱形框表示逻辑判断、箭头表示控制流向;E—R图即实体一联系图(EntityRelationshipDiagram),用来描述现实世界的概念模型,构成元素有实体、属性和联系,分别用矩形、椭圆形和菱形表示。本题答案为C。

17.DD。【解析】本题考查break语句的使用。break可以结束switch语句和for循环语旬,但是不能使用在条件判断语句内。

18.A解析:数据库是一个通用化的、综合性的数据集合,它可以为各种用户所共享,具有最小的冗余度和较高的数据与程序的独立性,而且能并发地为多个应用服务,同时具有安全性和完整性。即数据库系统减少了数据冗余,但不能避免一切冗余。所以选项A正确,选项B错误。在数据库管理阶段中,数据是结构化的,面向系统,数据冗余度小,从而节省了数据的存储空间,也减少了对数据的存取时间,提高了访问效率,避免了数据的不一致性。数据的不一致性,是指对数据的存取方式,选项C错误。数据库系统比文件系统能管理更多的数据,并非是数据库系统的特点,选项D错误。本题正确答案是A。

19.B解析:首先定义对象的格式:(存储类型)<类名><对象名1>(<对象名2>,…,<对象名n>);第一句定义了对象c1和指针对象c2,而MyClass*c3=newMyClass是Java里的定义方式,MyClass&c4=c1这种定义方式也是不对的。

20.D

21.C解析:函数重载允许用同一个函数名定义多个函数。被重载的函数必须要有不同的形参列表。不可以根据函数返回值类型来重载函数。

22.A解析:单目的抖运算优先级高于双目的+运算,不过抖的结合性是自右向左的,而+是自左至右的,所以上面的两个表达式都是先计算a+b的值之后,a再自加1。

23.B解析:a=b=c+2实际上相当于a=(b=c+2),进而可分解为两个表达式:b=c+2和a=b。注意:选项A)中包含一个不合法的运算符“:=”;选项C)应改为(int)18.5%3;选项D)可理解为两个表达式:a+7=c+b和a=a+7,其中第一个是错的,因为C++语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。注意:C++语言赋值语句的运用,

24.13

25.类模板类模板

26.*str==NULL或者!*str0*str==NULL或者!*str\r\n0解析:如果结束,返回0值。

27.*(p->b)*(p->b)解析:注意运算符的优先级问题,可用括号括起来以明确含义。

28.私有私有解析:派生类成员在私有继承方式下不能访问基类的所有成员,在保护继承方式下不能访问基类的私有成员,在公有继承方式下不能访问基类的私有成员。

29.a[i+1]a[i+1]解析:实现由后面一个数组元素将前一个数组元素进行覆盖,故应该为a[i]=a[i+1]。

30.基类基类

31.地址传递地址传递

32.00解析:冒泡排序算法在最好的情况下(已经有序的)元素交换次数为0。

33.黑箱黑箱

34.stack[--top]或stack[top-=1]或stack[top=top-1]stack[--top]或stack[top-=1]或stack[top=top-1]解析:此题考查的是堆栈数据结构。分析题目,首先利用函数voidpush(constT&i)将i压入栈,然后Tpop()将元素弹出,但由于在压入栈时,top值已经增加1;要弹出元素,须使top先减1,才能把栈顶元素弹出。故正确答案为stack[--top]。

35.2020解析:本题考核虚基类。本题中,虽然Derivedl和Derived2都是由共同的基类x派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员x只存在一份拷贝,不论在类Derived1中修改,还是在类Derived2中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derivedobj;”时,就会先调用虚基类Base的构造函数,使得x=0,然后执行类Derived1的构造函数使得x=10,再执行类Derived2的构造函数,使得x=20。最后输出x的值为20。

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

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

38.(1)应改为“assert(sizeof(s1)==4);”。

\n(2)应改为“assert(sizeof(s2)==1O);”。

\n(3)应改为“assert(sizeof(s3)==1);”。

\n【解析】assert函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果,那么assert函数只有为真,才不会产生中断异常。“assert(sizeof(s1)==3);”语句中“sizeof(s1)==3”为假,这会使程序产生异常,不能正常执行。因为str1的值为abc,但是它还有一个尾符,它的长度应该是4,而不是3,所以在第1处修改为“assert(sizeof(s1)==4);”。str2[10]说明,str2的空间为10,在第2处修改为“assert(sizeof(s2)==10);”。charstr3=23;语句说明23是字符,所占存储空间为1,所以修改为“assert(sizeof(s3)==1);”。

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

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

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

【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员函数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)”。

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

41.(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=10;”应该是调用成员函数SetNumber赋值。在C++中成员函数的使用形式应该是:对象名.成员函数,所以修改为“obj1.SetNumber(10);”。类是对象的抽象,而对象是类的具体实例。第3处“TC.SetNumber(100);”语句中的TC为类,并不是对象,这里应该使用定义的对象,即obj2,所以将语句修改为“obj2.SetNumber(100);”。

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

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

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

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

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

温馨提示

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

评论

0/150

提交评论