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

下载本文档

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

文档简介

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

一、1.选择题(10题)1.派生类的构造函数的成员初始化列表中,不能包含()。

A.基类的构造函数B.派生类中子对象的初始化C.基类的子对象初始化D.派生类中一般数据成员的初始化

2.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是

A.acbedB.decabC.deabcD.cedba

3.为使该程序执行结果为10,那么应该在程序划线处填入的语句是()。#include<iostream>usingnamespacestd;classMyClass{public:MyClass(inta){x=a;}___________//取x值private:intx;};intmain(){MyClassmy(10);cout<<my.GetNum()<<end1;return0;}

A.returnx;

B.intGetNum(){returnx;}

C.intreturnx;

D.voidGetNum(){returnx;}

4.若有如下类定义:classB{voidfunl(){}protected:doublevarl:public:voidfun2(){}};classD:publicB{protected:voidfun3(){}};已知obj是类D的对象,下列语句中不违反类成员访问控制权限的是()。

A.obj.funl();B.obj.varl;C.obj.fun2();D.obj.fun3();

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

A.与虚基类下面的派生类个数有关B.多次C.二次D.一次

6.有如下程序:#include<iostream>usingnamespaeestd;classA{public:A(inti):rl(i){}voidprint(){cout<<'E'<<rl<<'-';}voidprint()const}cout<<'C'<<rl*rl<<'-';}private:intrl;};intmain(){Aal(2);eonstAa2(4);a1.print();a2.print();return0;}程序的输出结果是

A.运行时出错B.E2-C16-C.C4-C16-D.E2-E4-

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

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

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

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

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

8.下列叙述中正确的是A.一个逻辑数据结构只能有一种存储结构

B.数据的逻辑结构属于线性结构,存储结构属于非线性结构

C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率

D.一个逻辑数据结构可有多种存储结构,且各种存储结构影响数据处理的效率

9.有如下程序:#include(iostream>usingnamespacestd;ClassTest{public:Test(){n+=2;}~Test(){n-=3;)staticintgetNum(){returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=newTest;

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

10.最初的计算机编程语言是()。

A.机器语言B.汇编语言C.高级语言D.低级语言

二、单选题(13题)11.下列叙述中正确的是()。

A.栈是“先进先出”的线性表

B.队列是“先进后出”的线性表

C.循环队列是非线性结构

D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构

12.有如下程序:#include<iostream>usingnamespacestd;intmain(){inta[6]={23,l5,64,33,40,58};ints1,s2;s1=s2=a[0];for(int*p=a+1;p<a+6;p++){if(sl>*p)s1=*P;if(s2<*p)s2=*p;}cout<<s1+s2<<endl;return0;}运行时的输出结果是()。A.23B.58C.64D.79

13.有如下程序:#include<iostream>usingnamespacestd;classA{public:virtualvoidf(){cout<<1;}voidg(){cout<<2;}};classB:publicA{public:virtualvoidf(){cout<<3;}voidg(){cout<<4;}};voidshow(A&a){a.f();a.g();}intmain(){Bb;show(b);return0;}运行时的输出结果是_________。A.12B.34C.14D.32

14.下列程序的运行结果是()。#include<iostream.h>intx=5;intfun(inta){intc:c=X*a:returnC;}voidmain(){intx=3,a=4;x=x+fun(a);cout<<"x="<<x<<endl;}A.x=15B.x=17C.x=23D.x=25

15.定义无符号整数为Uint,下面可以作为类Uint实例化值的是()。

A.-369B.369C.0.369D.整数集合{1,2,3,4,5}

16.假定MyClass为一个类,则执行MyClassa,b(2),*p;语句时,自动调用该类构造函数()次。

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

17.下列程序段中包含4个函数,其中具有隐含this指针的是()。intfunl();classTest{public:intfun2();friendintfun3();staticintfun4();};A.funlB.fun2C.fun3D.fun4

18.以下各选项组中,均是C++语言关键字的组是()。

A.publicoperatorthis

B.shodstringstatic

C.itwhile>=

D.priratecoutprintf

19.有如下头变件:intf1StatiCintf2();ClassMApubliC:intf3;1statiCintf4;};在所描述的函数中,具有隐含的this指针的是()。A.flB.f2C.BD.f4

20.在______情况下适宜采用inline定义内联函数。

A.函数体含有循环语句B.函数体含有递归语句C.函数代码少、频繁调用D.函数代码多、不常调用

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

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

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

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

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

22.关于continue语句叙述不正确的是()。

A.continue语句用于循环体中,结束循环

B.continue语句用于循环体中,它使执行流跳出循环体中尚未执行的语句,并进行下一循环判断

C.continue可以用于if语句中

D.continue语句不能代替break语句

23.有如下类定义和变量定义:

classParents{

public:

intpublicuata;

private:

intprivateData;

};

classChildA:publicParents{/*类体略*/};

classChildB:privateParents{/*类体略*/);

ChildAa;

ChildBb;

下列语句中正确的是A.cout<<

B.cout<<

C.cout<<

D.cout<<

三、2.填空题(12题)24.在面向对象方法中,类之间共享属性和操作的机制称为【】。

25.在C++中,派生类有三种继承方式,它们分别是公有继承、私有继承和【】。

26.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于【】的联系。

27.阅读下面的程序:

#include<iomanip.h>

voidmain()

{

cout.fill('!');

cout<<setiosflags(ioS::left)<cout<<setw(6)<<1024<<endl;

}

写出该程序的输出结果:【】。

28.已知递归函数f的定义如下:

intf(intn)

{

if(n<=1)return1;//递归结束情况

elseretuliln*f(n-2);//递归

}

则函数调用语句f(5)的返回值是【】。

29.若要访问指针变量q所指向的数据,应使用表达式______。

30.__[12]__是一系列相关函数的模型或样板,这些函数的__[13]__形式相同,只是所针对的__[14]__不同。

31.下面程序是一个堆栈的类模板,在横线处填上适当语句,完成类模板的定义。

#defineMAXSIZE100

template<classT>

classStack

{

Ts[MAXSIZE];

inttop;

public:

stack()

{

top=1;

}

voidpush(TnewValue)

{

if(top<MAXSIZE)

{

top=top+1;

s[top]=newValue;

}

else

cout<<"堆栈满,无法进栈"<<end1;

}

voidpop();

};

【】

{

if(top>1)

{

cout<<s[top]<<end1;

top=top-1;

}

else

cout<<"堆栈空!"<<end1;

}

32.对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较______次。

33.下列程序的执行结果是______。

#include<iostream.h>

classStudent

{

public:

Student(intxx){x=xx;}

virtualfloatcalcTuition();

protected:

intx;

};

floatStudertt::calcTuition()

{

returnfloat(x*x);

}

classGraduateStudent:publicStudent

{

public:

GraduateStudent(intxx):Student(xx){}

floatcalcTuition();

};

floatGraduatestudent::calcTuition()

{

returnfloat(x*2);

}

voidmain()

{

Students(20);

GraduateStudentgs(30);

cout<<s.calcTuition()<<""<<gs.calcTuition()<<endl;

//计算学生s和研究生gs的学费

}

34.假设a、b均是整型变量,则表达式a=2,b=5,a++,b++,a+b值为【】。

35.在面向对象的程序设计中,类描述的是具有相似性质的一组【】。

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

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

}

40.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在//******error******的下面,修改该语句即可。试题程序:#include<iostream.h>//******error******voidmain{//******error******intm=0142://******error******intn=0X27:intq=32;cout<<m<<endl;cout<<n<<endl;cout<<q<<endl;return;}41.使用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;}42.使用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;}43.使用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;

}

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

}

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。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。(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;}

47.(1)应添加“virtualvoidGetNamt!=0;”。

(2)应添加“constchar*GetName2”。

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

(4)应添加“m_str[i]=0;”。

【解析】本题第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打开考生文件夹下的工程test39_3。此工程包含一个test39_3.cpp,其中定义了类ARRAY和其派生类STUDENT,其中类ARRAY是一个多态数组,该数组可以存放学校中的各类人员,如学生等,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)定义类ARRAY的三个公有成员纯虚函数add(inta)、del(intd)和show(ints),它们的返回值类型都是void型的。请在注释“//**1**”之后添加适当的语句。

(2)添加派生类STUDENT的保护数据成员float型的二维数组table,使其有row行和s_col列,请在注释“//**2**”。之后添加适当的语句。

(3)完成派生类STUDENT的成员函数del(ints)的定义,实现把二维数组第s行删除的功能,即把该行清零,请在注释“//**3**”之后添加适当的语句。

(4)完成派生类STUDENT的成员函数show(ints)的定义,使其以格式“"跳格table[行号][列号]is_换行”依次输出s行的各个元素,请在注释“//**4**”之后添加适当的语句。

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

#include<iostream.h>

#include<stdlib.h>

constintrow=100;

constints_col=3;

classARRAY

{

public:

//**1**

}

classSTUDENT:publicARRAY

{

public:

virtualvoidadd(ints)

{

cout<<"\tInputdataofSTUDENT."<<endl;

cout<<"\tFirst:";

cin>>table[s][0];

cout<<"\tSecond:";

cin>>table[s][1];

cout<<"\tThird:";

cin>>table[s][2];

}

virtualvoiddel(ints);

virtualvoidshow(ints);

protected:

inti;

//**2**

};

voidSTUDENT::del(ints)

{

//**3**

}

voidSTUDENT::show(ints)

{

cout<<endl;

for(i=0;i<=s_col-1;i++)

{

//**4**

}

}

intmain()

{

STUDENTst;

ARRAY*ap;

ap=&st;

ap->add(3);

ap->show(3);

ap->del(3);

ap->show(3);

return0;

}

49.使用VC6打开考生文件夹下的工程test38_3。此工程包含一个test38_3.cpp,其中定义了类complex,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)添加类complex的无参数的构造函数的定义,将私有成员real和imag都初始化为0。请在注释“//**1**”之后添加适当的语句。

(2)添加类complex的带两个参数的重载构造函数,两个参数r和i都是double类型,要求将r赋值给私有成员real,i赋值给私有成员imag,同时允许调用时参数i可是省略,请在注释“//**2**”之后添加适当的语句。

(3)完成类complex重载加法函数的定义,该函数直接返回一个类complex的对象,同时把参数对象c的实部real和虚部imag分别与当前对象对应部分分别相加,请在注释“//**3**”之后添加适当的语句。

(4)完成类complex的友元函数print的定义,使其以格式“real+imagi”输出,请在注释“//**4**”之后添加适当的语句。

源程序文件test38_3.cpp清单如下;

#include<iostream.h>

classcomplex

{

public:

//**1**

//**2**

{

real=r;imag=i;

}

complexoperator+(complex&c);

friendvoidprint(complex&c);

private:

doublereal,imag;

};

complexcomplex::operator+(complex&c)

{

//**3**

}

//**4**

cout<<c.real<<"+"<<c.imag<<"i"<<endl;

}

voidmain()

{

complexc1(2.0,3.0),c2(4.0,-2.0),c3;

c3=c1+c2;

print(c3);

c3=c3+complex(3.5);

print(c3);

}

参考答案

1.C解析:本题考核构造函数。在C++中,构造函数不能被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。所以,在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对子对象初始化的构造函数.但是它不负责基类中子对象的初始化。

2.D解析:中序遍历的递归算法如下:①遍历左子树;②访问根结点;③遍历右子树。前序遍历的递归算法如下:①访问根结点;②遍历左子树;③遍历右子树。后序遍历的递归算法如下:①遍历左子树;②遍历右子树;③访问根结点。由后序遍历结果dabec可知c是根结点,且无右子树。再由左子树的后序遍历结果dabe可知,e是左子树的根结点,且由左子树的中序遍历结果deba可知,d是左子树的左子树结点,b和a是左子树的右子树结点。再次由后序遍历结果ab可知,a是左子树结点。b是根结点。至此,各结点在树中的位置已完全确定。

3.B解析:此题为完成类的定义。由题可知,横线处要填的语句为类中的成员函数,它实现的功能是取x的值(即返回x的值)。又由主函数中的语句“cout<<my.GetNum()<<end1;”可知,此成员函数的函数名为GetNum()。其函数体为:{returnx;}。

4.C

5.D

6.B解析:在类中重载函数的情况下,常对象调用类的常成员函数,非常对象调用类的非常成员函数,故答案为B。

7.A解析:本题考查的是文件流的操作,app表示追加方式打开文件(即将指针移至文件尾),binary表示以二进制方式打开文件。

8.D解析:数据的存储结构是指数据结构(数据的逻辑结构)在计算机中的表示,又称物理结构。数据的存储结构有顺序存储结构和链式存储结构两种。不同存储结构的数据处理效率不同。根据以上分析可知,D选项为正确答案。

9.A解析:本题考查的是静态数据成员和静态成员函数。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。题目中的静态数据成员n的运算具有叠加性,执行“n+=2”和“n-=3”后n的值为0。

10.A计算机编程语言有三类,机器语言,汇编语言,高级语言。最初的编程语言是机器语言。

11.D栈是先进后出的线性表,所以A错误;队列是先进先出的线性表,所以B错误;循环队列是线性结构的线性表,所以C错误。故答案为D选项。

12.DD。【解析】根据题意,找出数组a中最大值sl和最小值s2并计算二者的和。

13.D本题主要考查了虚函数。本题中show函数的形参是基类A的对象的引用,main()函数中的调用语句show(b);中的实参b是派生类B的对象,这是利用类型兼容规则中的派生类对象可以初始化基类的引用。执行show函数中的语句a.f();函数f()是虚函数,在虚函数情况下,通过基类引用将访问被引用的派生类B的对象b的同名虚成员函数f(),故此处输出3,然后执行show函数中的语句a.g();,函数g()是实函数,在实函数的情况下,通过基类指针(或引用)所调用的只能是基类的那个函数版本,故此处输出2,show函数执行结束,main()函数执行结束。因此本题运行时的输出结果为32。

14.CC。【解析】由主函数main入手,首先x被赋值为3,a被赋值为4,然后调用fun函数,参数为4,所以在fun函数中的a=4。而主程序中的x作用域是由它定义开始到cout输出,在fun函数中无效。而在fun函数定义前的变量X作用域是整个程序,所以fun函数中的x值为5,这样C的值就为20。在主函数中的x+fun(a)中的x为靠近这条语句的x定义,即3,所以最后x的值为20+3=23。

15.BB。【解析】A是有符号数,C是浮点数,D是集合,并不是类的实例化对象,只有B完全符台。

16.A解析:C++在创建一个对象时,会调用类的构造函数。语句MyClassab(2),*p;创建了两个对象a、b和指针p,在创建对象a和b后会调用构造函数,而创建指针p时,由于p本身不是对象,所以不调用类的构造函数。

17.BB。【解析】this指针是成员函数所属对象的指针,是指向类对象的地址,是一个隐含的指针,隐含于每个类的非静态成员函数中。funl是外部函数,fun3是友元函数,fun4是静态成员函数,故选B。

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

19.C只有类的非静态成员函数才隐禽this指针,其作用域是类内部,当类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数,而不必一定写上this。所以本题答案为c。

20.A

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

22.A解析:continue是跳出了本次循环中尚未执行的语句,重新执行循环,但没有终止循环。注意:注意break,continue和goto语句的用法和区别。

23.A

24.继承继承解析:类是面向对象语言中必备的程序语言结构,用来实现抽象数据类型。类与类之间的继承关系实现了类之间的共享属性和操作,一个类可以在另一个已定义的类的基础上定义,这样使该类型继承了其超类的属性和方法,当然,也可以定义自己的属性和方法。

25.保护继承保护继承解析:共有三种继承方式。

26.一对多(或1:N)一对多(或1:N)解析:两个文体集间的联系实际上是实体集间的函数关系,这种函数关系可以有3种,即一对一(1;1)的联系、一对多(1:N)或多对一(N:1)的联系和多对多(M:N)的联系。

27.400!!!

28.15

29.*q

30.[12]函数模板[13]源代码[14]数据类型[12]函数模板\r\n[13]源代码\r\n[14]数据类型

31.template<classT>/voidstack<T>::pop()template<classT>/voidstack<T>::pop()解析:本程序用类模板方式设计一个栈类stack<T>,其中有两个私有数据成员s[](存放栈元素)和top(栈顶元素下标),以及两个公有成员函数push()(元素入栈)、pop()(元素出栈)。

32.log2nlog2n解析:二分法查找,也称拆半查找,是一种高效的查找方法。能使用二分法查找的线性表必须满足两个条件:用顺序存储结构;线性表是有序表。对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次

33.40060

34.99解析:本题考核运算符的应用,题中的逗号运算符用于将多个表达式串在一起,逗号运算符的左边总是不返回的,这就是说,最右边表达式的值才是整个表达式的值。逗号运算符的结合性为从左到右。所以从左开始计算,a被赋值为2,b被赋值为5,然后a和b分别自增1,最后返回a+b,即9。

35.对象对象解析:将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。36.(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);”。37.(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(…)”。38.(1)应改为“usingnamespacestd;”。(2)应改为“outl.open("1.txt",ios::binary|ios::app);”。(3)应改为“out1.put(s[i]);”。【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,对于C++中引入标准命名空间的格式,缺少namespace,所以第1处的语句修改为“usingnamespacestd;”。第2处,调用成员函数open中,输入、输出方式是在ios类中定义的,所以“out1.open("1.txt",binary|app);”语句缺少类ios,即第2处的语句修改为“out1.open("1.txt",ios::binary|ios::app);”。第3个标识应该用流成员函数put输出字符,所以第3处的语句修改为“out1.put(s[i]);”。

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

40.(1)“voidmain”。(2)“intm=0144;”。(3)“intn=OX25;”或“intn===0x25;”。【解析】本题主要考查了主函数定义及幂同进制之间的转换,包括十进制到八进制,十进制到十六进制。主函数定义的定义形式为“main”,函数名之后必须是一对括号,因此第1处应改为“voidmain”。cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发现变量的初值不正确,十进制的100对应八进制的144,卡进制的37对应十六进制的25,因此2和3应分别改成“intm=0144;”,“intn=0×25;”或“intn=0×25;”。41.(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)”。42.(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;”。43.(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(…)”。

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

45.(1)应改为“usingnamespacestd;”。

\n(2)应改为“outl.open('1.txt',ios::binary|ios::app);”。

\n(3)应改为“out1.put(s[i]);”。

\n【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,对于C++中引入标准命名空间的格式,缺少namespace,所以第1处的语句修改为“usingnamespacestd;”。第2处,调用成员函数open中,输入、输出方式是在ios类中定义的,所以“out1.open('1.txt',binary|app);”语句缺少类ios,即第2处的语句修改为“out1.open('1.txt',ios::binary|ios::app);”。第3个标识应该用流成员函数put输出字符,所以第3处的语句修改为“out1.put(s[i]);”。

46.(1)应添加“intNo;charName[32];”。(2)应添加“voidSet(intno,char*strName)”。(3)应添加“cout<<"No="<<No<<endl<<"Name="<<Name<<endl;”。(4)应添加“No=Name[0]=0;”。【解析】第1处要求“定义类的公有数据成员函数N0、Name[32],其中N0为int型,Name[32]为字符型”。在已有程序中类定义的public区域,定义

温馨提示

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

评论

0/150

提交评论