版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023年山东省青岛市全国计算机等级考试C++语言程序设计预测试题(含答案)学校:________班级:________姓名:________考号:________
一、1.选择题(10题)1.以下函数声明中,存在语法错误的是______。
A.intAA(inta,int);
B.int*BB(int,int);
C.voidCC(int,int=5);
D.void*DD(x,y);
2.下面程序段中的错误语句是______。classM{inti;public:void~AA(int);AA*p;voidAA();voidAA(intx){i=x;};};
A.AA*p;
B.void~AA(int);
C.voidAA(int);
D.voidAA(intx){i=x;};
3.源程序的文档化不包括()。
A.符号名的命名要有实际意义B.正确的文档形式C.良好的视觉组织D.正确的程序注释
4.下面程序的输出是()。#defineN3#defineM(n)((N+1)*n)#include<iostrearn.h>voidmain(){intz=2*(N+M(5+1));cout<<z<<end1;}
A.42B.48C.54D.编译报错
5.若定义intk=7,x=12;,则能使值为3的表达式是
A.x%=(k%=5)B.x%=(k-k%5)C.x%=k-k%5D.(x%=k)-(k%=5)
6.下列程序的运行结果是()。#include<iostream.h>voidfun(int*a,int*b){int*k;k=a;a=b;b=k;}voidmain(){inta=2OO4,b=9,*x=&a,*y=&b;fun(x,y);cout<<a<<""<<b<<end1;}
A.20049B.92004C.0D.编译时出错
7.设有以下变量定义,并已赋确定的值:charw;intx;floaty;doublez;则表达式:w*x+z-y所求得的数据类型为()。
A.charB.intC.floatD.double
8.类模板template<classT>classx{...},其中,友元函数f对特定类型T(如int),使函数f(x<int>);成为x<int>模板类的友元,则其说明为()。
A.friendvoidf();
B.friendvoidf(x<T>);
C.friendvoidA::f()
D.friendvoidC<D::f(x<T>);
9.下列程序的输出结果为
#include<iostream.h>
voidmain()
{
char*a[]={"hello},"the","world"};
char**pa=a;
pa++;
cout<<*pa<<endl;
}
A.helloB.theC.worldD.hellotheworld
10.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是______。
A.派生类的对象可以赋给基类的对象
B.派生类的对象可以初始化基类的引用
C.派生类的对象可以直接访问基类中的成员
D.派生类的对象的地址可以赋给指向基类的指针
二、单选题(13题)11.有如下类定义:ClassAA{inta;publiC:AA(intn=0):a(n){}};ClassBB:publiCAA{publiC:BB(intn)——};其中横线处缺失的部分是()。A.:a(n){}B.:AA(n){}C.{a(n);}D.{a=n;)
12.有如下程序:#include<iostream>#include<cstring>usingnamespacestd;classXCF{inta;public:XCF(intaa=0):a(aa){cout<<"1";}XCF(XCF&x){a=x.a;cout<<"2";}~XCF(){cout<<a;}intGeta(){returna;}};intmain(){XCFd1(5),d2(d1);XCF*pd=newXCF(8);cout<<pd->Geta();deletepd;return0;}运行时的输出结果是_________。A.1215588B.1218855C.12185D.128512
13.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为()。
A.ABoperator+(AB&a,AB&B)
B.ABperator+(AB&)
C.opetator+(ABa)
D.AB&operator+()
14.有如下程序:
#include<iostream>
#include<cstring>
usingnamespacestd;
classXCF{
inta;
public:
XCF(intaa=O):a(aA){cout<<”1”;}
XCF(XCF&X){a=x.a;cout<<”2”;}
~XCF(){cout<<at}
intGeta(){returnat}
};
intmain(){
XCFdl(5),d2(d1);
XCF半pd=newXCF(8);
cout<<pd->Geta();
deletepd;
return0;
}
运行时的输出结果是A.1215588B.1218855C.12185D.128512
15.判断char型变量c是否为小写字母的正确表达式是()。
A.'a'<=c<='z'
B.(c>=A)&&(c<=z=
C.('a'>=c)||('z'<=c)
D.(c>='a')&&(c<='z')
16.下面是一个模板声明的开始部分:Template<typenameT>double...由此可知A.这可能是一个函数模板的声明
B.这可能是一个类模板的声明
C.这既可能是一个函数模板的声明,也可能是一个类模板的声明
D.这肯定是一个错误的模板声明
17.下列关于输入流类成员函数getline()的描述中,错误的是A.该函数是用来读取键盘输入的字符串的
B.该函数读取的字符串长度是受限制的
C.该函数读取字符串时,遇到终止符便停止
D.该函数读取字符串时,可以包含空格
18.语句ofstreamf(”SALARY.DAT”,ios::app|ios::binary);的功能是建立流对象f,试图打开文件SALA-RY.DAT并与之连接,并且()。
A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件
B.若文件存在,将其置为空文件;若文件不存在,打开失败
C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件
D.若文件存在,打开失败;若文件不存在,建立一个新文件
19.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是
A.a,point,*&a
B.&*a,&a,*point
C.*&point,*point,&a
D.&a,&*point,point
20.有如下类定义和变量定义classA{public:A(){data=0;}~A(){}intGetData()const{returndata;}voidSetData(intn){data=n;}private:intdata;};constAa;Ab;下列函数调用中错误的是_________。A.a.GetData();
B.a.SetData(10);
C.b.GetData();
D.b.SetData(10);
21.有如下程序:#include<iostream>usingnamespacestd;classB{public:virtualvoidshow(){cout<<"B";}};classD:publicB{public:voidshow(){cout<<"D";}};voidfun1(B*ptr){ptr->show();}voidfun2(B&ref){ref.show();}voidfun3(BB){b.show();}intmain(){Bb,*p=newD;Dd;funl(p);fun2(b);fun3(d);return0;}程序的输出结果是()。A.BBBB.BBDC.DBBD.DBD
22.有如下函数定义:voidfunC(inta,int&B.{a++;b++;}若执行代码段:intx=0,Y=1;funC(X,Y);则变量x和y的值分别是()。
A.0和1B.1和1C.0和2D.1和2
23.有如下类定义和变量定义:
classParents{
public:
intpublicuata;
private:
intprivateData;
};
classChildA:publicParents{/*类体略*/};
classChildB:privateParents{/*类体略*/);
ChildAa;
ChildBb;
下列语句中正确的是A.cout<<
B.cout<<
C.cout<<
D.cout<<
三、2.填空题(12题)24.在面向对象的程序设计中,类描述的是具有相似性质的一组【】。
25.有如下程序:
#include<iostream>
usingnamespaeestd;classAnimal{
public:
virtualchar*getType()const{return"Animal";}
virtualchar*getVoice()const{return"Voice";}
};
classDog:publicAnimal{
public:
char*getType()const{return"Dog";}
char*getVoice()eonst{return"Woof";}
};
voidtype(Animal&A){cout<<a.getType();}
voidspeak(AnimalA){eout<<a.getVoice();}
intmain(){
Dogd;type(D);cout<<"speak";speak(D);cout<return0;
}
程序的输出结果是______。
26.有如下的程序:
#include<iostream>
#include<fstream>
usingnamespacestd;
intmain(){
chars[25]="Programminglanguage";
ofstreamf1("DATA.TXT");
f1<<"C++Programming";
n.close();
ifstreamf2("DATA.TXT");
if(f2.good())f2>>s;
f2.close
27.C++在重载运算符中,如用成员函数重载一元运算符参数表中需要【】个参数,如用友元函数重载一元运算符参数表中需要【】个参数。
28.一个类可以直接或间接的祖先中继承所有的属性和方法。采用这个方法可以提高了软件的【】。
29.在下面的程序的横线处填上适当的语句,使该程序的输出为12。
#include<iostream.h>
usingnamespacestd;
classBase
{
public:
inta,b;
Base(inti){a=i;}
};
classDerived:publicBase
{
inta;
public:
Derived(intx):Base(x),b(x+1){};
voidshow()
{
______;//输出基类数据成员a的值
cout<<b<<endl;
}
};
intmain()
{
Derivedd(1);
d.show();
return0;
30.结构化程序设计思想的核心是要求程序只由顺序、循环和【】三种结构组成。
31.在MyClass类的定义中,对赋值运算符;进行重载。请将横线处缺失的部分补充完整。
______MyClass::operator=(constMyClass&rhs)
{
if(this==&rhs)return*this;
value=rhs.value;
return*this;
}
32.在E-R图中,图形包括矩形框、菱形框、椭圆框。其中表示实体联系的是_________框。
33.重载的关系运算符和逻辑运算符的返回类型应当是【】。
34.数据的逻辑结构有线性结构和【】两大类。
35.请将如下程序补充完整,使得输出结果为:bbaa。
#include<iostream>
usingnaluespacestd;
classA{
public:
______{eout<<"aa";}
};
classB:publicA{
public:
~B(){eont<<"bb";}
};
intulain(){
B*P=newB;
deleteP;
return0;
}
四、程序改错题(10题)36.使用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;}
37.使用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;
}
38.使用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;}39.使用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;}
40.使用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;
}
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,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个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;
}43.使用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;}44.使用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;}45.使用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;}五、综合应用题(2题)46.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数0perator=,以实现深层复制。要求:补充编制的内容写在“//************333************”与“//****************666*************”之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//CDeepCopy.h#include<iostream>#include<string>usingnamespacestd;classCDeepCopy{public:intn;//动态数组的元素个数int*p;//动态数组首地址CDeepCopy(int);~CDeepCopy;CDeepCopy&operator=(constCDeepCopy&r);//赋值运算符函数};voidwriteToFile(char});//main.cpp#include”CDeepCopy.h”CDeepCopy::一CDeepCopy{delete[]P;}CDeepCopy::CDeepCopy(intk){n=k;p=newint[n];}//构造函数实现CDeepCopy&CDeepCopy::0perator=(constCDeepCopy&r)//赋值运算符函数实现{//***********333*********//***********666***********}intmain{CDeepCopya(2),d(3);a.p[O]=1;d.p[O]=666;//对象a,d数组元素的赋值{CDeepCopyb(3);//调用赋值运算符函数a.p[O]=88;b=a;cout<<b.p[O];//显示内层局部对象的数组元素}cout<<d.p[O];//显示d数组元素a.p[O]的值cout<<”dfadeaway;\n”;cout<<a.p[O];//显示a数组元素a.p[O]的值writeToFile(””);return0;}47.使用VC++6.0打开考生文件夹下的源程序文件3.cpp,其中定义了用于表示矩形的CRect类,但类CRect的定义并不完整。请按要求完成下列操作,将类CRect的定义补充完整。(1)定义私有数据成员leftPoint、topPoint、rightPoint、bottomPoint,分别用于表示矩形左上角及右下角的点的坐标,它们都是double型的数据。请在注释1之后添加适当的语句。(2)完成默认构造函数CRect的定义,指定默认实参为0,它们都是double型的数据。请在注释2之后添加适当的语句。(3)定义函数体为空的析构函数。请在注释3之后添加适当的语句。(4)在main函数中定义GReet类的实例rect2,并把re-ct1的值赋给rect2。请在注释4之后添加适当的语句。注意:除在指定位置添加语句之外,不要改动程序中的其他内容。试题程序:#include<iostream.h>classCRect{private://********1********public://********2********//********3********voidSetPoints(double,double,double,double);voidSetLeftPoint(doublem){leftPoint=m;}voidSetRightPoint(doublem){rightPoint=m;}voidSetTopPoint(doublem){topPoint=m;}voidSetBottomPoint(doublem){bottomPoint=m;}voidDisplay();};CReet::CRect(double1,doublet,doubler,doubleb){leftPoint=1;topPoint=t;rightPoint=r;bottomPoint=b;}voidCRect::Setpoints(double1,doublet,doubler,doubleb){leftPoint=1;topPoint=t;rightPoint=n;bottomPoint=b;}voidCRect::Display(){cout<<"left-toppointis("<<leftPoint<<","<<top-Point<<")"<<\n;cout<<"right-bottompointis("<<rightPoint<<","<<bottomPoint<<")"<<\n;}voidmain(){CRectrect0;rect0.Display();rect0.SetPoints(20,20.6,30,40);rect0.Display();CRectrectl(0,0,150,150);rect1.SetTopPoint(10.5);rect1.SetLeftPoint(10.5);//********4********rect2.Display();}六、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打开考生文件夹下的工程test29_3。此工程包含一个test29_3.cpp,其中定义了二维坐标类Coordinate和三维坐标类ThreeDCoord,其中ThreeDCoord类由Coordinate类public派生,但两个类的定义并不完整。请按要求完成下列操作,将程序补充完整。
(1)定义类Coordinate的保护数据成员x和y,它们都是int型的数据,代表二维坐标的横纵坐标值。请在注释“//**1**”之后添加适当的语句。
(2)根据类Coordinate定义后的成员函数Display的实现,补充该函数在类Coordinate定义体内的声明,Display为二维坐标类的虚函数。请在注释“//**2**。”之后添加适当的语句。
(3)完成二维坐标类Coordinate的构造函数,将参数a和b分别赋值给数据成员x和y。请在注释“//**3**”之后添加适当的语句。
(4)根据ThreeDCoord类构造函数的声明,补充ThreeDCoord构造函数的实现,参数a和b通过调用基类的构造函数来初始化基类的数据成员x和y,c赋值给数据成员2。请在注释“//**4**”之后添加适当的语句。
输出结果如下;
[1,2]
[3,4,5]
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件tese9_3.cpp清单如下:
#include<iostream.h>
classCoordinate
{protected:
//**1**
public:
Coordinate(inta=0,intb=0);
//**2**
};
Coordinate::Coordinate(inta,intb)
{
//**3**
}
voidCoordinate::Display()const
{
cout<<'['<<x<<","<<y<<']'<<end1;
}
classThreeDCoord:publicCoordinate
{
intz;
public:
ThreeDCoord(inta=0,intb=0,intc=0);
virtualvoidDisplay()const;
};
//**4**
voidThreeDCoord::Display()const
{
cout<<'['<<x<<","<<y<<","<<z<<']'<<end1;
}
voidmain()
{
Coordinatec(1,2);
ThreeDCoordt(3,4,5);
c.Display();
t.Display();
}
参考答案
1.D解析:D选项参数没有进行声明。
2.B
3.B解析:源程序的文档化主要包括3点:(1)符号名应具有一定实际的含义,便于理解程序功能:(2)正确的程序注释;(3)良好的视觉组织。利用空格、空行、缩进等技巧使程序层次清晰。
4.B
5.D解析:运算符“%”的两侧都应该是整型数。另外,本题需要掌握的知识点是x%=k等价于x=x%k。
6.A
7.D解析:本题考核表达式计算时数据类型的转换。C++中,参加运算的各个数据类型都转换成数据类型最长的数据类型,然后计算,表达式值的类型也就是数据长度最长的数据类型,在char、int、float、double中,double型的数据最长,所以表达式所求得的数据类型为double。
8.B
9.B解析:本题主要考查的是指针数组和指向指针的指针之间的关系,其中a是指针数组,pa是指向指针数组行的指针,所以pa自加1相当于指向下一行。
10.C
11.B本题考查公用继承对基类成员访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,所以本题答案为B。
12.B本题主要考查了构造函数、拷贝构造函数和析构函数。main()函数中,语句XCF\r\nd1(5),d2(d1);先后创建了两个对象d1和d2。在创建对象d1时,系统自动调用了构造函数,d1数据成员a的值为5,输出字符1;在创建对象d2时是用已创建的对象d1初始化,系统自动调用拷贝构造函数,对象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,然后再次调用析构函数删除对象d1,输出对象d1的数据成员a的值5。因此程序输出结果为1218855。
13.B
14.B解析:在主函数中XCFd1(5),d2(d1);,d1调用了第一个构造函数,输出1;d2调用了拷贝构造函数,输出2;xcF*pd=IleWXCF’(8);调用了构造函数,输出l;cout<<pd->Geta();调用了成员函数Geta(),输出8;deletepd;调用了析构函数,输出8;return0;,在返回O之前程序会自动调用d1和d2的析构函数,输出55。因此总的输出应该是1218855。
15.D字符型数据在计算机内部是以ASCII码存储的,英文大写字母和小写字母在ASCII码表中都是连续的。大写字母A~z是从65~90,小写字母a~z是从97~122。所以只要变量c大于等于a并月小于等于z就能保证其为小写字母。
16.A解析:类模板说明的一般形式是:
template<类型形参表>
class<类名>
{//类说明体??
};
函数模板的一般说明形式如下
template<模板形参表>
<返回值类型><函数名>(模板函数形参表)
//函数定义体
17.A解析:本题考查的是getline()函数。getline()函数的原型为:istream_type&getline(char_type*s,streamsizen,char_typedelim);,其功能是从当前输入位置开始提取字符存入s所指向的具有n个字节的字符空间中。字符的提取与存储在遇到下列情况时停止:
①已提取并存储了n-1个字符;
②到流尾,无字符可提取;
③下一个要提取的字符等于结束标志字符delim。
因此,选项B、C、D都是正确的。getline()函数不仅可以用宋读取键盘输入的字符串,还可以用来读取文件等数据流,故选项A不正确。
18.A本题考查的是文件流的操作,app表示以追加方式打开文件(即将指针移至文件尾),binao"表示以二进制方式打开文件。
19.D本题主要考查指针变量对数值的引用。在题目中,首先定义了整型指针变量point和一个整型变量a,变量a的初值为4,然后是指针变量指向a,或者说将变量a所在存储单元的地址值赋给指针变量。
在选项A中,很显然,不全是地址,只有point表示地址,而*&a等价于*(&a),表示取一个数值。
在选项B中,也不都表示地址,其中*point表示数值,其他两个表示地址。
在选项C中,与选项B类似,其中的*point表示数值。
在选项D中,都表示地址,是题目的选择答案。
20.B本题主要考查了常对象和常成员函数。使用const关键字修饰的对象称为常对象,使用const关键字说明的成员函数称为常成员函数。由于常对象不能被更新,因此,在将一个对象说明为常对象后,通过这个常对象只能调用它的常成员函数,而不能调用其他成员函数。一般对象既可以调用常成员函数,也可以调用一般成员函数。选项B中对象a为常对象,而成员函数SetData()不是常成员函数,所以这样调用会发生编译错误。
21.CC。【解析】本题考查的知识点是虚函数与多态性。在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。在C++中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。故本题最终输出结果为DBB。
22.C函数参数的3种传递方式:①将变量名作为形参和实参,即传值方式;②传递变量指针;③引用形参。本题中实参x为传值方式,所以X的值不会改变;Y为引用形参,所以会改变。故本题答案为C。
23.A
24.对象对象解析:将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。
25.DogSpeakVoiceDogSpeakVoice解析:派生类继承基类,并重新定义了基类的虚函数。voidtype(Animal&A)是对象引用作为函数参数,传递的是地址,是“地址调用”,故a.getType()调用的是派生类重新定义后的get—Type()成员函数。voidspeak(AnimalA)是对象作为函数参数,是“传值调用”,在进行函数调用时,将派生类对象赋值给基类对象。但是,对象a只能调用派生类继承自基类的成员。故在a.getVoice()中调用的是基类的虚函数getVoice(),打印“Voive”。
26.C++
27.010\r\n1解析:C++中友元函数重载一元运算符要有一个参数,重载二元运算符要有两个参数,而用成员函数重载时,重载一元运算符没有参数,重载二元运算符要有一个参数。
28.可重用性可重用性
29.cout<<Base::acout<<Base::a解析:此题考查的是基类和派生类的构造函数。派生类构造函数的执行顺序为:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。此题要求结果是输出12,分析题目,首先调用基类的构造函数,然后是调用子对象的构造函数,横线处要求输出基类成员a的值,填入cout<<Base::a即可。
30.选择选择
31.MyClass&MyClass&解析:此题考查“=”运算符的重载。运算符“=”的重载需要注意:返回值应声明为引用,函数体中总是用语句return*this;返回;如果参数被声明为指向同类对象的引用或指针,应判别所指向的对象是否与被赋值对象为同一对象,如果是则不做任何处理;如果被赋值对象占用了动态空间,应先释放这些资源,以便接收新的资源;如果参数被声明为指针或引用,通常应加上const修饰;一个类如果需要重载运算符=,通常也就需要定义自身特有的复制构造函数,反之亦然。
32.菱形E-R模型可以用一种非常直观的图的形式表示,这种图称为E-R图。在E-R图中我们分别用下面不同的几何图形表示E-R模型中的三个概念与两个联接关系。(1)实体集表示法。在E-R图中用矩形表示实体集,在矩形内写上该实体集的名字。(2)属性表示法。在E-R图中用椭圆形表示属性,在椭圆形内写上该属性的名称。(3)联系表示法。在E-R图中用菱形(内写上联系名)表示联系。
33.bool
34.非线性结构非线性结构解析:数据的逻辑结构有线性结构和非线性结构两大类。
35.~A()~A()解析:派生类和基类的析构函数调用顺序是先调用派生类的析构函数,然后调用基类的析构函数,打印“bb”说明已经在调用派生类的析构函数,则要继续打印“aa”,显然就只有定义在基类的析构函数中去打印,故答案为~A()。36.(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]);”。
37.(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);”。
38.(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(…)”。39.(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);”。
40.(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);”。
41.(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)”。
42.(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(…)”。43.(1)应改为“TC::TC”。(2)应改为“voidTC::display”。(3)应改为“TC::~TC”。【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名和作用域运算符“::”,作用域运算符用采表示某个成员属于哪个类,使用格式为“(类名)::<成员函数>((参数函数)),因此第1处应改为“TC::TC”,默认构造函数没有参数。由第2处“TC::display”后的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错误问题,display函数返回值为void,因此第2处的语句应改为“voidTC::display”。由第3处的语句“TC::TC”可知,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名相同,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采购食品原材料规章制度
- 重庆市正版软件采购制度
- 钢材绿色采购管理制度
- 掺杂石榴石单晶片太赫兹磁光调控性能及集成器件研究
- 2026年沙场运输合同(1篇)
- 物业客服上半年工作总结(15篇)
- 2025年12月20日安徽省宿州事业单位遴选面试真题及答案解析
- 简单的演讲稿14篇
- pvfe板材施工方案(3篇)
- 丹东涂料施工方案(3篇)
- 初中数学知识树
- CPK-数据自动生成器
- 增材制造技术课件
- MCS-51单片机技术项目驱动教程C语言第二版牛军课后参考答案
- 大连周水子国际机场
- 第二章护理伦理学的理论基础课件
- 闽教版小学英语五年级下册校本作业
- 拜仁慕尼黑足球俱乐部
- 晚归检讨书阅读
- 结构化面试答题套路90结构化面试题型及答题套路
- GB/T 24218.1-2009纺织品非织造布试验方法第1部分:单位面积质量的测定
评论
0/150
提交评论