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

下载本文档

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

文档简介

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

一、1.选择题(10题)1.下列关于栈的描述正确的是()。

A.在栈中只能插入元素而不能删除元素

B.在栈中只能删除元素而不能插入元素

C.栈是特殊的线性表,只能在一端插入或删除元素

D.栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素

2.以下函数调用语句中含有参数的个数是excc((v1,v2),(v2,v3,V4),v6);

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

3.为了培养良好的程序设计风格,下列描述中正确的是

A.程序应简单、清晰、可读性好B.符号名的命名只要符合语法C.充分考虑程序的执行效率D.程序的注释可有可无

4.有下列程序:#inClude<iostream>usingnamespacestd;c1assA{pubic:virmalvoidfunc1(){cout<<"A1";}voidfunc2(){cout<<"A2";}};c1assB:publicA{publIc:voidfunc1(){cout<<"B1";}voidfunc2(){cout<<"B2"

A.B182B.A1A2C.B1A2D.A182

5.以下对C++语言函数的有关描述中,正确的是

A.在C++语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参

B.C++语言函数既可以嵌套定义又可以递归调用

C.函数必须无返回值,否则不能使用函数

D.函数必须有返回值,返回值类型不定

6.下列叙述中错误的是

A.在数据库设计的过程中,需求分析阶段必须考虑具体的计算机系统

B.在数据库设计的过程中,概念结构设计与具体的数据库管理系统有关

C.在数据库设计的过程中,逻辑结构设计与具体的数据库管理系统有关

D.在数据库设计的过程中,物理结构设计依赖于具体的计算机系统

7.下面程序的执行结果为#include"iostream"usingnamespacestd;classA{inta;public:voidSeta(intx){a=x;}voidDisplay_a(){cout<<a<<end1;}};classB{intb;public:voidSetb(intx){b=x;}voidD

A.输出为223B.有错误在第5行C.输出为123D.有错误在第7行

8.类的说明如下,请指出错误的地方______。classMyclass{inta=111;public:Myclass(intx,inty);Myclass(intval);~Myclass();}

A.inta=111;

B.Myclass(Intx,inty);

C.Myclass(intval);

D.~Myclass();

9.下列关于new运算符的描述中错误的是

A.使用运算符new创建对象数组时必须定义初始值

B.使用运算符new创建对象时,会调用类的构造函数

C.运算符new可以用来动态创建对象和对象数组

D.使用new运算符创建的对象可以使用运算符delete删除

10.下面关于类概念的描述中()是错误的。

A.类是抽象数据类型的实现

B.类是具有共同行为的若干对象的统一描述体

C.类是创建对象的样板

D.类就是C语言中的结构体类型

二、单选题(13题)11.以下关键字不能用来声明类的访问权限的是()。

A.publiCB.statiCC..proteCtedD.private

12.有如下类模板定义:template<typenameT>classBigNumber{longn;public;BigNumber{Ti}:n(i){}BigNumberoperator+(BigNumberb){returnBigNumber{n+b.n);}};已知b1、b2是BigNumber的两个对象,则下列表达中踏误的是()。A.b1+b2B.b1+3C.3+b1D.3+3

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

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

14.

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

A.栈按“先进先出”组织数据B.栈按“先进后出”组织数据C.只能在栈底插入数据D.不能删除数据

16.类模板template<classT>classX{…},其中友元函数f对特定类型T(如int),使函数f(x<int>)成为x<int>模板类的友元,则其说明为()。

A.A.friendvoidf();

B.B.friendvoidf(x<T>);

C.C.friendvoidA::f();

D.D.friendvoidC<T>::f(x<T>);

17.执行下列程序后,w的值为()。intw=A,x=14,y=15;w=((x‖y)&&(w<a));A.-1B.NULLC.1D.0

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

A.printB.FORC.&aD.-00

19.下面关于C++流的叙述中,正确的是()。A.cin是一个输入流对象

B.可以用ifstream定义一个输出流对象

C.执行语句序列char*y="PQMN";cout<<y;将输出字符串PQMN的地址

D.执行语句序列charx[80];cin.getline(x,80);时,若输入Happynewyear,则X中的字符串是“Happy”

20.有如下程序:#include<iostream>usingnamespacestd;classTestClass{public:virtualvoidfunl(){cout<<"funlTestClass";}virtualvoidfun2(){cout<<“fun2TestClass”;}};classTestClassl:publicTestClass{voidfun(){cout<<“funlTestClassl”;}};intmain(){TestClassobj1,*P;TestClasslobj2;p=&obj2;p->fun1();p->fun2();return0;}该程序执行后的输出结果是()。A.funlTestClasslfun2TestClass

B.funlTestClass1fun2TestC1ass1

C.funlTestClassfun2TestClass

D.funlTestClassfun2TestClassl

21.有下列程序:#include<stdi0.h>voidf(int*P,int*q);voidmain()(intm=1,n=2,*r=&m;f(r,&n);printf("%d,%d",m,n);}voidf(int*P,int*q){p=p+1;*q=*q+1;}程序运行后的输出结果是()。A.1,3B.2,3C.1,4D.1,2

22.当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为A.ios::inB.ios::outC.ios::in|ios::outD.以上都不对

23.下面对于友元函数描述正确的是()。

A.友元函数的实现必须在类的内部定义

B.友元函数是类的成员函数

C.友元函数破坏了类的封装性和隐藏性

D.友元函数不能访问类的私有成员

三、2.填空题(12题)24.下列程序将x、y和z按从小到大的顺序排列,请将下面的函数模板补充完整。

template<classT>

voidorder(【】)

{

Ta;

if(x>y)

{

a=x;

x=y;

y=a;

}

if(y>z)

{

a=y;

y=z;

z=a;

}

if(x>y)

{

a=x;

x=y;

y=a;

}

}

25.定义类对象时自动调用【】为类对象中的数据成员赋初值。

26.表达式x.operator++()还可写成【】。

27.类模板不同于函数模板,类模板只可用【】型参数。

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

#include<iostream.h>

voidmain()

{

inta=5,b=4,c=3,d;

d=(a>b>C);

cout<<d;

}

29.数据库系统在其内部分为三级模式,即概念模式、内模式和外模式。其中,【】是用户的数据视图,也就是用户所见到的数据模式。

30.有以下程序:

#included<iostream>

usingnamespacestd;

classBase

{

public:

Base()

{

x=0;

}

intx;

};

classDerived1:virtualpublicBase

{

public:

Derived1()

{

x=10;

}

};

classDerived2:virtualpublicBase

{

public:

Derived2()

{

x=20;

}

};

classDerived:publicDerived1,protectedDerived2

{};

intmain()

{

Derivedobj;

cout<<obj.x<<endl;

return0;

}

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

31.如果类Alpha继承了类Beta,则类Alpha称为派生类,类Beta称为【】类。

32.若需要把一个函数"voidFunc();"定义为一个类Sample的友元函数,则应在类Sample的定义中加入一条语句【】。

33.以下程序的执行结果为【】。

#include<iostream>

usingnamespacestd;

classbase

{

public:

virtualvoidwho()

{

cout<<"baseclass"<<end1;

};

classderivel:publicbase

{

public:

voidwho()

{

cout<<"derivelclas

34.流成员函数______返回当前流的状态。

35.非成员函数应声明为类的______函数才能访问这个类的private成员。

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

}

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函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******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函数中的错误,使该程序的输出结果正确。程序输出: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;}41.使用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;}

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

}

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

}

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,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为

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;

}

五、综合应用题(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)“while”应改为“while(infile.get(ch))”。

(2)应添加“bur[len++]=ch;bur[len]=ch;len++;”。

(3)应添加“outfile2<<bur[i++];”或“outfile2<<buf[i];i++;”。

(4)“TCobj;”应改为“TCobi("in.txt");”。

【解析】本题考查了文件流的使用。根据题意,第1处要获得一个字符,并判断是否到文件结尾,所以应使用get函数;第2处应将ch存入buf数组,同时让len增1;第3处将buf中的字节输出给outfile2,注意同时让i增1,否则while循环将进入死循环;第4处TC只确一个带char*参数的构造函数,所以创建对象时必须使用构造参数,根据题意这个参数应该是“"in.txt"”。

六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test9_3,此工程包含一个源程序文件test9_3.cpp,其中定义了Circle类与Money类,Circle类可对半径为r的圆进行周长与面积的计算,而Money类用于计算一圆形游泳池的造价。游泳池四周有原形过道,过道外围上栅栏,过道宽度为3米,根据键入的游泳池半径,每米栅栏价格及每平方米过道价格,即可计算出游泳池的造价。请按要求完成下列操作,将程序补充完整。

(1)定义符号常量PI(值为3.14159f)与WIDTH(值为3.00f),分别用于表示圆周率与过道的固定宽度。请在注释“//**1**”之后添加适当的语句。

(2)定义Circle类默认构造函数,把私有成员radius初始化为参数r的值。请在注释“//**2**”后添加适当的语句。

(3)完成Money类默认构造函数的定义,把私有成员FencePrice(每米栅栏的价格)、ConcretePrice(每平方米过道的价格)初始化为参数f,c的值。请在注释“//**3**”之后添加适当的语句。

(4)完成Money类成员函数floatMoney::TotalMoney(noatfencelen,floatconarea)的定义,根据参数fencelen(栅栏的长度)和conarea(过道的面积),返回栅栏与过道的总造价。请在注释“//**4**”之后添加适当的语句。

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

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

#include<iostream.h>

//**1**

classCircle

{

private:

floatradius;

public:

//**2**

floatCircumference(){return2*PI*radius;)

floatArea(){returnPI*radius*radius;)

};

classMoney

{

private:

floatFencePrice;

floatConcretePrice;

public:

Money(floatf,floatc);

floatTotalMoney(floatfencelen,floatconarea);

};

Money::Money(floatf,floatc)

{

//**3**

}

floatMoney::TotalMoney(floatfencelen,floatconarea)

{

//**4**

}

voidmain()

{

floatradius,fence,concrete;

cout.setf(10s::fixed);

cout.setf(ios::showpoint);

cout.precision(2);

cout<<"Entertheradiusofthepool:";

cin>>radius;

cout<<"EntertheFencePrice:";

cin>>fence;

cout<<"EntertheConcretePrice:";

cin>>concrete;

CirclePool(radius);

CirclePoolRim(radius+WIDTH);

Moneymon(fence,concrete);

floattotalmoney=mon.TotalMoney(PoolRim.Circumference(),(PoolRim.Area()-P00l.Area()));

cout<<"ThetotalmoneyisRMB"<<totalmoney<<endl;

}

49.使用VC6打开考生文件夹下的工程test37_3。此工程包含一个test37_3.cpp,其中定义了类Letter和Number以及Grid,其中Grid类由Letter类和Number类public派生,但三个类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)添加类Letter的带一个参数c的构造函数,c是char型的数据,默认值为'A',该函数把参数c的值赋给类的保护成员ch,请在注释“//**1**”之后添加适当的语句。

(2)添加类Number的带一个参数n的构造函数,n是int型的数据,默认值为0,该函数把参数n的值赋给类的保护成员num,请在注释“//**2**”之后添加适当的语句。

(3)添加派生类Grid构造函数的定义,传入的参数为char型的c和血型的n,并将其分别赋值给基类的ch和num,请在注释“//**3**”之后添加适当的语句。

(4)完成派生类Grid的友元函数——“<<”运算符重载的定义,使其以格式“[g.ch,g.num]”输出,请在注释“//**4**”之后添加适当的语句。

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

#include<iostream.h>

classLetter

{

protected:

charch;

public:

//**1**

};

classNumber

{

protected:

intnum;

public:

//**2**

};

classGrid:publicLetter,publicNumber

{

public:

//**3**

friendostream&operator<<(ostream&o,Grid&g);

};

//**4**

{

o<<"["<<g.ch<<","<<g.num<<"]";

returno;

}

intmain()

{

Gridg('C',3);

cout<<"Gridreference:"<<g<<end1;

return0;

}

参考答案

1.C解析:根据数据结构对栈的定义及其特点可知:栈是限定只在表尾进行插入或删除操作的线性表,因此栈是先进后出的线性表,对栈的插入与删除操作,不需要改变栈底元素。栈是限定只在表尾进行插入或删除操作的线性表。

2.A解析:函数的参数个数是以第一层的逗号为区分的,本题中调用语句中有3个参数。

3.A解析:良好的程序设计风格主要包括设计的风格、语言运用的风格、程序文本的风格和输入输出的风格。

设计的风格主要体现在三个方面:结构要清晰;思路要清晰,在设计程序时应遵循“简短朴实”的原则,切忌卖弄所谓的“技巧”。

语言运用的风格主要体现在两个方面;选择合适的程序设计语言以及不要滥用语言中的某些特色。特别耍注意,尽量不用灵活性大、不易理解的语句成分。

程序文本的风格主要体现在四个方面:注意程序文本的易读性;符号要规范化;在程序中加必要的注释;在程序中要合理地使用分隔符等。

输入输出的风格主要体现在三个方面;对输出的数据应该加上必要的说明;在需要输入数据时,应该、给出必要的提示,以适当的方式对输入数据进行检验,以确认其有效性。

总之,程序设计的风格应该强调简单和清晰,程序必须是可以理解的,强调“清晰第一,效率第二”。由上所述,符号名的命名不仅要符合语法,而且符号名的命名应具有一定实际含义,以便于对程序功能的理解。因此,选项B中的说法是错误的。

由于程序设计的风格强调的是“清晰第一,效率第二”,而不是效率第一。因此,选项C中的说法也是错误的。

程序中的注释部分虽然不是程序的功能,计算机在执行程序时也不会执行它,但不能错误地认为注释是可有可无的部分.在程序中加入正确的注释能够帮助读者理解程序,注释是提高程序可读性的重要手段。因此,选项D中的说法也是错误的。

4.C解析:程序中B为A的派生类,由主函数入手,主函数中定义了类A的指针p指向类B。根据基类中的“virtualvoidfunc1()”知道A中的func1为虚函数,执行“p->func1();”语句,通过指针变量调用此虚函数,此时调用的就是指针变量指向的同名函数,即派生类的func1函数,输出B1。而fun2不是虚函数,所以执行“p->func2();”输出为A2。

5.A解析:形参的值的改变,不能影啊实参的值。选项B)函数只能嵌套调用,不能嵌套定义;函数要是有返回值其类型必须确定;函数也可无返回值,用void表示。

6.B解析:数据库设计主要分4个步骤:需求分析、概念结构设计、逻辑结构设计、物理结构设计。选项B错误,应为本题的正确答案,因为概念结构设计在需求分析的基础上对客观世界做抽象,独立于数据库的逻辑结构,也独立于具体的数据库管理系统,与具体的数据库管理系统无关。

7.D解析:pnvate继承不能调用Display_b函数,public继承可以调用基类中非pfivate成员。注意:类的继承方式public,protected和private的区别。

8.A

9.A解析:本题考核运算符new。先来了解运算符new:运算符new返回指定类型的一个指针,如果分配失败(如没有足够的内存空间),则返回0。它与delete运算符一起使用,以达到直接进行动态内存分配和释放的目的。对于A)选项,使用运算符new创建对象数组时只能指定分配内存的大小,不能为该数组指定初始值,其初始值为缺省值,因此类中必须定义缺省构造函数。所以A)选项的描述是错误的。B)、C)和D)选项的描述都是正确的。

10.D

11.B解析:本题考查了类的访问权限。在C++中,类的访问权限一共有3种,分别是:\u3000public(公有)、protected(保护)和private(私有)。因此,本题应该选择B。

12.CC。【解析】该题考查了C++模板类和+运算符重载的知识,3+b1时,程序不能将b1转化为整型,所以编译会出错。

13.A栈是先进后出的数据结构,所以栈顶元素最后入栈却最先被删除。栈底元素最先入栈却最后被删除。所以选择A。

14.A

15.B栈是按“先进后出”的原则组织数据的,数据的插入和删除都在栈顶进行操作。

16.B\nB。【解析】声明一个函数模板的格式template<模板形参表声明>函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。

\n

17.CC。【解析】把x和y化为二进制,X=14表示为1110,y=15表示为1111,所以x‖y=1,A的ASCIl是65,a的ASCIl是97,所以A<a=1,因此W=1。

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

19.AA。本题考查C++流的溉念和I/0的格式化。tin是istream类的对象,即输入流对象。ifstream是输入文件流,类不能定义个输出流对象。getline函数的功能是允许从输入流中读取多个字符,并且允许指定输入终止,在读取完成后,从读取的内容中删除该终止字符,所以D选项中的语句序列后x中字符串应该是Happynewyear。

20.AA。【解析】TestClass为基类,TestClass1是TestClass的派生类。基类中的funl和fun2被定义为虚函数,C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数,所以派生类中的funl和fun2也是虚函数。本题从main主函数入手,首先定义了TestClass类型的对象obil和指针P,然后又定义了TestClassl的对象obj2。指针指向对象obj2,然后调用其成员函数fun1,即输出“funlTestClassl”。

21.AA。【解析】本题中子函数f(int*p,*q)的功能是对指针p的值加1,*q的值加1。主函数中调用子函数f(r,&n)时,子函数的执行结果是r值加1,n的值加1。而m的值并没有发生变化,最后程序输出的结果为1,3。所以正确答案为选项A。

22.D解析:使用fstream类建立文件流必须定义打开方式,否则编译器无法判断该文件流是读还是写。

23.C解析:友元函数的定义既可以在类内部进行,也可以在类外部进行。它提高了程序的运行效率,但破坏了类的封装性和隐藏性,使得类的非成员函数可以访问类的私有成员。

24.T&xT&yT&zT&x,T&y,T&z解析:本题要填入的是函数的形参表。此函数的功能是:x、y和z按从小到大的顺序排列,那么就涉及到改变传入的实参值的情况,因此要采用引用传递的方式。所以此题空白处应填入:T&x,T&y,T&z。

25.构造函数构造函数解析:构造函数在初始化对象时便会自动调用。

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

27.类类解析:本题考查的是类模板的定义,C++语言中模板分为两种:类模板和函数模板,类模板只能用于类型参数,函数模板可以重载。

28.00解析:水题的关键在于对变量c的赋值运算:

d=(a>b>c)

d=(5>4>3)

先算5>4,为真,得1,即:d=(1>3),此时1>3,为假,得0。

29.外模式外模式

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

31.基基解析:在C++语言中,可以从一个类派生出另一个类。派生其他类的类称为基类(或父类),被派生的类称为派生类(或子类)。一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承,从多个基类派生的继承称为多继承。

32.friendvoidFunc();friend\u3000void\u3000Func();解析:注意friend关键词应加在函数的前面,表示该函数作为本类的一个友元函数。

33.baseclassderivelclassderive2classbaseclass\r\n\u3000\u3000\u3000derivelclass\r\n\u3000\u3000\u3000derive2class解析:类base含有虚函数who(),该类派生出derivel类和derive2类,两个派生类中都有虚函数who()的定义。在main()函数中定义了一个指向base类的指针,它也被允许指向其派生类。在执行过程中,不断改变它所指的对象,当p->who()时就能调用不同的版本。这是因为使用了虚函数,因而进行动态联编。注意:应掌握静态联编的使用方法。

34.rdstate()

35.友元友元解析:类的私有成员只能被本类的成员函数访问,如果非成员函数要访问本类的私有数据成员,必须将函数定义为该类的友元函数才行。36.(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;”。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)应添加“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)应改为“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)“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;”。41.(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]);”。

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

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

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

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

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区域,定义变量N0,Name[32],即在第1处添加语句“intN0;charName[32];”。第2处要求“完成函数Set的定义,分别设置No和Name的值”。在第2处说明函数Set的语句中,应该包括变量no,s

温馨提示

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

评论

0/150

提交评论