版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023年河南省漯河市全国计算机等级考试C++语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________
一、1.选择题(10题)1.有如下类声明:classMyBASE{intk;public:voidset(intn){k=n;}intget()const{returnk;}};classMyDERIVED:protectedMyBASE{protected:intj;public:voidset(intm,intn){MyBASE::set(m);j=n;}intget()const{returnMyBASE::get()+j;}};则类MyDERIVED中保护的数据成员和成员函数的个数是
A.4B.3C.2D.1
2.公有派生类对象可以访问基类中的()。
A.公有成员B.私有成员C.保护成员D.任何成员
3.以下函数实现的功能是()。voidfun(char*s){char*p,*q,temp;p=s;q=s+strlen(s)-1;while(p<q){temp=*p;*p=*q;*p=temp;p++;q--;}}
A.将一个字符串首尾颠倒B.计算字符串的长度C.统计字符串中的空格个数D.将字符串中的小写字母变成大写字母
4.完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例的测试方法是()
A.黑箱测试法B.白箱测试法C.错误推测法D.安装测试法
5.关于构造函数A()的拷贝构造函数正确的是
A.A(A*B);B.A(AB);C.A(A&B);D.A(A);
6.若有以下定义:inta[]={1,2,3,4,5,6,7};charcl=’b’,c2=‘2’;则数值不为2的表达式是()。
A.a[1]B.’d’-c1C.a[‘3’-c2]D.c2-0
7.有如下函数模板定义:template<typenameT1,inta2,inta3>T1fun(T1a1){return(al+a2+a3);}则下列调用中正确的是()。
A.fun<int,4,3>(5);
B.fun<4,3>(5);
C.fun<int,int,int>(5);
D.fun(5);
8.所谓关系是指()。
A.各条记录中的数据彼此有一定的关系
B.一个数据库文件与另一个数据库文件之间有一定的关系
C.数据模型符合一定条件的二维表格式
D.数据库中各个字段之间彼此有一定关系
9.charc='\41';printf("%o",c);的结果为()。
A.0101B.101C.41D.65
10.若磁盘上已存在某个文本文件,其全路径文件名为d:\ncre\test.txt,下列语句中不能打开该文件的是
A.ifstreamfile("d:\ncre\test.txt");
B.ifstreamfile("d:\\ncre\\test.txt");
C.ifstreamfile;file.open("d:\\ncre\\test.txt");
D.ifstream*pFile=newifstream("d:\\ncre\\test.txt");
二、单选题(13题)11.有如下程序:#included<iostream>usingnamespacestd;classTestClass{protected:TestClass(){cout<<X;}TestClass(charc){cout<<c;}};classTestClassl:publicTestClass{public:TestClassl(charc){cout<<C;}};intmain(){TestClassld1(y);return0;}执行这个程序,屏幕上将显示输出()。A.yB.yxC.xyD.yy
12.复制构造函数的参数一般是
A.某对象名B.某对象成员名C.某对象的引用名D.指向对象的指针名
13.有如下函数定义:voidfunC(inta,int&B.{a++;b++;}若执行代码段:intx=0,Y=1;funC(X,Y);则变量x和y的值分别是()。
A.0和1B.1和1C.0和2D.1和2
14.下列叙述中正确的是()。
A.栈是“先进先出”的线性表
B.队列是“先进后出”的线性表
C.循环队列是非线性结构
D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构
15.下列关于构造函数的描述中,错误的是()。
A.构造函数名与类名相同B.构造函数可以有返回值C.构造函数可以重载D.每个类都有构造函数
16.通过派生类的对象可直接访问其A.公有继承基类的公有成员B.公有继承基类的私有成员C.私有继承基类的公有成员D.私有继承基类的私有成员
17.下列描述正确的是()。
A.表示m>n为true或mnm
B.switCh语句结构中必须有default语句
C.if语句结构中必须有else语句
D.如果至少有一个操作数为true,则包含“If”运算符的表达式为true
18.下列for循环的循环体执行次数为()。for(inti=O,j=10;i=j=10;i++,j--)
A.0B.1C.10D.无限
19.下列程序的执行结果是()。#include(iostream.h>#include<stdlib.h>classTestClass{public:intX,y;TestClass(){x=y=0;}TestClass(inta,intb){x=a;y=b;}voiddisp(){cout<<"x="<<x<<",y="<y<<endl;}};voidmain(){TestClasss1(2,3);s1.disp();}A.x=2,y=2B.x=2,y=3C.x=3,y=2D.x=3,y=3
20.有如下程序:
#include<iostream>
usingnamespacestd;
classBook{
public:
Book(char*t=””){strcpy(title,t);}____________private:
chartitle[40];
};
classNovel:publicBook{
public:
Novel(char*t=””):Book(t){}
char*Category()const{return”文学”;)
};
intmain(){
Book*pb;
pb=newNovel();
cout<<pb->Category();
return0;
}
若程序运行时输出结果是“文学”,则划线处缺失的语句是A.char*Category();
B.char*Category()const;
C.virtualchar*Category()const;
D.virtualchar*Category()const=0;
21.对于类定义classA{public:virtualvoidfuncl(){}voidfunc2(){}};classD:publicA{public:voidfuncl(){cout<<"classBrune1"<<end1;}virtualvoidfunc2(){cout<<"classBfunc2"<<end1;}};下面正确的叙述是______。
A.A::func2()和B::funcl()都是虚函数
B.A::func2()和B::funcl()都不是虚函数
C.B::func1()是虚函数,而A::func2()不是虚函数
D.B::func1()不是虚函数,而A::func2()是虚函数
22.下列说法中错误的是()。
A.公有继承时基类中的public成员在派生类中仍是public成员
B.私有继承时基类中的protected成员在派生类中仍是protected成员
C.私有继承时基类中的public成员在派生类中仍是private成员
D.保护继承时基类中的public成员在派生类中仍是protected成员
23.有如下程序:
#include+
usingnamespacestd;
#include
usingnamespacestd;
classBase
{
public:
voidfun(){cout<<"Base::fun"<
};
classDerived:publicBase
{
public:
voidfun()
{
cout<<"Derived::fun"<
}
};
intmain()
{
Derivedd;
d.fun();
return0;
}
已知其执行后的输出结果为:
Base::fun
Derived::fun
则程序中下划线处应填入的语句是A.Base.fun();B.Base::fun()C.Base->fun()D.fun();
三、2.填空题(12题)24.下面程序的运行结果是【】。
#include<iostream.h>
doublefun(doublea,doubleb,charc='*')
{
doubled;
switch(c)
{
case'+':d=a+b;break;
case'-':d=a-b;break;
case'*':d=a*b;break;
case'/':d=a/b;break;
}
returnd;
}
voidmain()
{
doubled=1.0;
d=d-fun(fun(2.5,3.5,'+'),fun(3,5),'/');
cout<<"d="<<d<<end1;
}
25.在双链表中,每个节点有两个指针域,一个指向前驱节点,另一个指向【】。
26.在面向对象的模型中,最基本的概念是对象和______。
27.使用函数模板的方法是先说明函数模板,然后实例化成相应的______进行调用执行。
28.顺序存储方法是把逻辑上相邻的结点存储在物理位置【】的存储单元中。
29.通过使用new和delete两个运算符进行的分配为【】存储分配。
30.下列程序在构造函数和析构函数中申请和释放类的私有成员,请完成该程序。
classMyclas{
int*x;
public:
MyClas(intn);
~MyClas();
};
MyClas::MyClas(intn){
【】;
}
MyClas::~MyClas(){
【】;
}
31.数据结构分为逻辑结构与存储结构,循环队列属于【】。
32.在结构化分析方法中,用于描述系统中所用到的全部数据和文件的文档称为【】。
33.某二叉树中度为2的结点有18个,则该二叉树中有【】个叶子结点。
34.数据的物理独立性是指当数据的【】改变时,通过系统内部的自动映象或转换功能,保持了数据的逻辑结构不变。
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,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:
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;
}
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。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。
注意:不要改动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,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为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;}
41.使用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;
}
42.使用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;}43.使用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;}
44.使用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;
}
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.请使用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。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。每卖出一个水果,则计算水果的重量,还要计算所有卖出水果的总重量以及总个数,同时允许退货,请按照以下的操作,把类补充完整。(1)定义类TCFruit的私有静态数据成员float型变量AllWeight和int型变量AllN0,请在注释1后添加适当的语句。(2)完成类TCFruit的带一个float型变量w的构造函数,并把这个w加到AllWeight中,并且AllNo自加。请在注释2后添加适当的语句。(3)在析构函数中,在AllWeight中减去weight,然后AllNo自减,请在注释3后添加适当的语句。(4)完成静态成员变量的初始化为0,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#include(iostream.h>classTCFruit{private:floatWeight;//********1********staticintAllNo;public:TCFruit(floatw){//********2********AllWeight+=w:AllNo++:}~TCFruit{//********3********AllWeight-=Weight:}voiddisplay{cout<<"SellaFruitwith"<<Weight<<"k9"<<endl;cout<<”Allsellnumber:"<<AllNo<<endl;cout<<"Allsellweight:"<<AllWeight<<"k9"<<endl<<endl;}};//********4********floatTCFruit::AllWeight=0.0;intmain{TCFruitFruitl(1.2);Fruitl.display;TCFruitFruit2(2.3);Fruit2.display;return0;}六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程MyProj1。此工程包含千个源程序文件MyMainl.cpp,其中定义了用于表示日期的类Date,但类Date的定义并不完整。请按要求完成下列操作,将类Date的定义补充完成:
①定义私有数据成员year、month和day分别用于表示年、月、日,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。
②完成默认构造函数Date的定义,使Date对象的默认值为:year=1,month=1,day=1,请在注释“//**2**”之后添加适当的语句。
③完成重载构造函数Date(inty,intm,intd)的定义,把数据成员year、month和day分别初始化为参数y、m和d的值,请在注释“//**3**”之后添加适当的语句。
④完成成员函数print的类外定义,使其以“年-月-日”的格式将Date对象的值输出到屏幕上。请在注释“//**4**”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件MyMain1.cpp清单如下:
//MyMainl.cpp
#include<iostream>
usingnamespacestd;
classDate
{
public:
//**2**
Date(inty,intm,intd)
{
//**3**
}
voidprint()const;
private:
//datamember
//**1**
};
voidDate::print()const
{
//**4**
}
intmain()
{
Datenational_day(1949,10,1);
national_day.print();
return0;
}
49.使用VC6打开考生文件夹下的工程MyProj6。此工程包含一个源程序文件MyMain6.cpp。在程序中,定义了一个Furniture类,Bed类和Sofa类是在Furniture类的基础上按公有继承的方式产生的派生类,Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生的派生类。
请按要求完成下列操作,将类Date的定义补充完成:
①Bed类是在Furniture类的基础上按公有继承的方式产生的派生类,为了使程序中的多重继承关系不出现二义性。请在注释“//**1**”之后添加适当的语句。
②Sofa类是在Furniture类的基础上按公有继承的方式产生的派生类,为了使程序中的多重继承关系不出现二义性。请在注释“//**2**”之后添加适当的语句。
③Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生的派生类。请在注释“//**3**”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件MyMain6.cpp清单如下;
//MyMain6.cpp
#include<iostream>
usingnamespacestd;
classFurniture
{
public:
Furniture(){}
voidsetweight(intw)
{
weight=w;
}
intgetweight()
{
returnweight;
}
protected:
intweight;
};
//**1**classBeddefinition
{
public:
Bed(){}
voidsleep()
{
cout<<"sleeping..."<<end1;
}
};
//**2**classSofadefinition
{
public:
Sofa(){}
voidwatchTV()
{
cout<<"watchingTV..."<<end1;
}
};
//***3***
{
public:
Sleepersofa(){}
voidFoldout()
{
cout<<"Foldoutthesofa".<<endl;
};
intmain()
{
Sleepersofass;
ss.setweight(20);
cout<<ss.getweight()<<end1;
return0;
}
参考答案
1.B解析:本题考核派生与继承中关于访问权限的继承。类MyDERIVED保护继承类MyBASE,那么类MySASE中的共有成员在派生类MyDERIVED中表现为保护权限,所以加上派生MyDERIVED后来定义的一个保护数据成员j,类MyDERIVED中保护的数据成员和成员函数的个数是3。
2.A解析:公有派生类对象只能访问基类中的公有成员。
3.A解析:本题考核while循环语句和指针的使用。在该函数中,循环开始时,指针p指向字符串的第1个字符,指针q指向字符串的最后一个字符,首先交换这两个字符;然后,指针p前进一个字符位置(指向下一个字符),指针q后退一个字符位置(指向前一个字符);经过若干次循环,条件p<q将为假(即指针p和指针q相遇),循环结束。从而实现了将一个字符串首尾颠倒的功能。
4.A解析:黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据功能导出测试用例。注意:白箱测试是根据对程序内部逻辑结构的分析来选取测试用例,白箱测试也称为逻辑覆盖测试,故选项B)不正确;错误推测法只是黑箱测试所使用的一种具体的方法,故选项C)不正确;安装测试是测试层次中的一种,它属于高级测试,故选项D)不正确。注意:常用的黑箱测试方法及其定义,白箱测试用例的准则。
5.C解析:固定的一种拷贝方式就是<类名>:<类名>const<类名>&<引用对象名>注意:如果一个类中没有声明,拷贝构造函数,编译器会自动生成一个如上述形成的仅有的拷贝构造函数。
6.D解析:字符在进行数学运算时取其ASCⅡ码值,其中’b’的ASCⅡ码值为98,’d’的ASCⅡ码值为100,字符’2’的ASCⅡ码值为50。可知D选项中表达式c2-0的值为50。
7.A解析:类模板是类的抽象,类是类模板的实例。在调用时,尖括号内指定实际的类型名,在编译时,编译系统就用int取代类模板中的类型参数,这样就具体化了类模板。其中的参数为4,3。
8.C解析:每个关系都类似1张表,或者在某种程度上类似1个“平面”记录文件。
9.C解析:printf('%o',c);以八进制输出c,而\'\\41\'就是八进制表示的字符。,
10.A解析:本题考查的知识点是转义字符。在C++的字符常量或字符串中,以“\\”开头的一系列字符被看作一个特殊的字符,即转义字符。要表示'\'字符时,必须使用转义字符'\\\\'。故本题应该选择A。
11.AC。【解析】本题中类TestClass为基类,TestClassl为TestClass的派生类。由main主函数入手,定义TestClassl类型的对象dl,参数值为y。TestClassl类继承TestClass,所以主函数中“TestClassldl(y);”语句首先调用“TestClassl(charc){colll<<C;}”然后调用基类中的“TestClass{COUt<<X;)”输出X,然后执行“TestClass(charc){cout<<c;}”输出y,即答案为“xy”。
12.C解析:C++语言中拷贝构造函数的参数一般是某个对象的引用名。
13.C函数参数的3种传递方式:①将变量名作为形参和实参,即传值方式;②传递变量指针;③引用形参。本题中实参x为传值方式,所以X的值不会改变;Y为引用形参,所以会改变。故本题答案为C。
14.D栈是先进后出的线性表,所以A错误;队列是先进先出的线性表,所以B错误;循环队列是线性结构的线性表,所以C错误。故答案为D选项。
15.BB。【解析】构造函数没有返回值,虽然叫函数,但是它没有任何返回值,包括void型都不是,官方叫法应该叫“构造器”。
16.A本题主要考查了继承和派生。基类中的公有成员在派生类中的访问控制属性将随着继承方式而改变:派生类从基类公有继承时,基类的公有成员在派生类中仍然是公有成员;派生类从基类私有继承时,基类的公有成员在派生类中改变为私有成员;无论哪种继承方式,派生类的成员和派生类的对象都无法访问基类的私有成员。因此选项B和选项D错误。通过类的对象只能访问类的公有成员,因此选项C错误。
17.D本题主要考查c++语言的基本语法,选项A中应该为m>n|jm<n;选项B中default语句可有可无;选项(:中if可以单独作为一条语句,不是必须和else搭配。
18.D
19.BB。【解析】由主函数入手,定义了类TestClass的对象s1(2,3),当类对象进入其作用域时调用构造函数,构造函数应该是调用具有参数的“TestClass(inta,intb){x=a;Y=b;}”,然后调用成员函数disp,则输出为“cout<<"x="<<x<<",y="<<y<<endl;“。即x=2,y=3。
20.D本题考查虚函数的定义。
21.C
22.B解析:本题考核派生类中的访问权限问题。继承方式包括:public(公有派生),protected(保护派生)和private(私有派生)。不同的继承方式会导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。这里的访问主要来自两个方面:一是派生类中的新增成员对从基类继承来的成员的访问;二是派生类外部通过派生类对象对从基类继承来的成员的访问。私有继承时基类中的protected成员在派生类中变成了private成员,所以B选项的描述是错误的。
23.B
24.d=0.6
25.后续节点(后继节点)后续节点(后继节点)解析:链式存储结构的节点中,只有一个指示直接后继的指针域。因此从某个点出发,只能顺指针往后寻查其他节点。若要寻查节点的直接前驱,则需要从表头指针出发,影响查找效率。为了克服单链表这种单向性的缺点,可利用双向链表。双向链表的节点中,有两个指针域,其一指向直接后继,另一个指向直接前驱。
26.类类解析:在面向对象的模型中,最基本的概念是对象和类。对象是现实世界中实体的模型化;将属性集和方法集相同的所有对象组合在一起,可以构成一个类。
27.模板函数模板函数
28.相邻相邻解析:常用的存储表示方法有4种,顺序存储、链式存储、索引存储、散列存储。其中,顺序存储方法是把逻辑上相邻的结点存储在物理位置也相邻的存储单元中。
29.动态动态解析:本题考查的是对动态分配内存的掌握,在C++语言中,使用关键字Hew和delete进行动态内存中请和释放。
30.x=newint(n)deletexx=newint(n),deletex解析:在类的构造函数中,是申请内存空间,并使指针x指向构造函数的形参n,所以构造函数的函数体应为:x=newint(n);。在析构函数中,是释放类的私有成员,即指针变量x,所以析构函数的函数体应该为deletex;。
31.存储结构存储结构解析:数据结构分为逻辑结构与存储结构,循环队列属于存储结构.因此,本题的正确答案为存储结构。
32.数据字典数据字典解析:在结构化分析方法中,用于描述系统中所用到的全部数据和文件的文档称为数据字典。
33.19
34.物理结构物理结构解析:数据的独立性是数据和程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。数据独立性一般分为物理独立性和逻辑独立性。
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)应改为“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);”。
38.(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]);”。
39.(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)”。
40.(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”。
41.(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);”。
42.(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)”。43.(1)“voidmain”。(2)“intm=0144;”。(3)“intn=OX25;”或“intn===0x25;”。【解析】本题主要考查了主函数定义及幂同进制之间的转换,包括十进制到八进制,十进制到十六进制。主函数定义的定义形式为“main”,函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年安全感官培训内容核心要点
- 2026年安全制度培训哪些内容快速入门
- 阿坝藏族羌族自治州壤塘县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 新乡市辉县市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 2026年系统方法年度联通工作总结报告
- 常德市津市市2025-2026学年第二学期五年级语文第六单元测试卷(部编版含答案)
- 泸州市古蔺县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 石嘴山市平罗县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 晋中市太谷县2025-2026学年第二学期五年级语文第六单元测试卷(部编版含答案)
- 朝阳市凌源市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 供应链协同对农村电商发展的机制分析
- CIP、SIP工艺流程操作说明书
- 桩基施工安全措施方案
- 盘活利用闲置低效厂区厂房实施方案
- 高空安全培训试题及答案
- 2024年1月20日河北省委办公厅公开选调工作人员笔试真题及解析(综合文字岗)
- 商场人员进出管理制度
- 建设工程用电合同协议
- SJG 130 – 2023《混凝土模块化建筑技术规程》
- GB/T 4340.2-2025金属材料维氏硬度试验第2部分:硬度计的检验与校准
- GB 4789.3-2025食品安全国家标准食品微生物学检验大肠菌群计数
评论
0/150
提交评论