版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2021年内蒙古自治区乌兰察布市全国计算机等级考试C++语言程序设计测试卷(含答案)学校:________班级:________姓名:________考号:________
一、1.选择题(10题)1.在下面程序中,A、B、C、D四句编译时不会出错的是()。#include<iostream>usingnamespacestd;classBase{public:Base();Base(inte):count(C){}virtualvoidprint()const=0;private:intcount;};classDerived:publicBase{public:Derived():Base(0){}Derived(intC):Base(C){}voidprintt()const{cout<<"Derived"<<endl:}};voidmain(){Derivedd(10);Base*pb;pb=&d;//ABase&cb=d;Deriveddd=*pb;//BDerived&cd=cb;//CBasebb=d;//D
2.栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是()。
A.ABCEDB.DCBEAC.DBCEAD.CDABE
3.下列描述中错误的是()。
A.派生类可以作为基类派生其他的子类
B.派生类继承基类的所有数据成员
C.派生类可以有多个基类
D.派生类不能继承一些函数成员
4.关于在调用模板函数时模板实参的使用,下列表述正确的是A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D.对于常规参数所对应的模板实参,任何情况下都不能省略
5.结构化程序设计主要强调的是()。
A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序易读性
6.下列关于构造函数说法不正确的是
A.构造函数必须与类同名B.构造函数可以省略不写C.构造函数必须有返回值D.在构造函数中可以对类中的成员进行初始化
7.在inta=3,int,p=&a;中,p的值是
A.变量a的地址值B.无意义C.变量p的地址值D.3
8.对于拷贝初始化构造函数,正确的描述是()。
A.在C++语言中,如果不自定义类的拷贝初始化构造函数,则每个类都有默认的拷贝初始化构造函数
B.必须为每个类定义拷贝初始化构造函数
C.如果要使用拷贝初始化构造函数,则必须在类中先定义
D.当定义了类的构造函数时,如果要使用拷贝初始化构造函数,则必须定义拷贝初始化构造函数
9.下列关于运算符重载不正确的是()
A.运算符重载不能改变运算符的操作数个数
B.运算符重载不能改变运算符的优先级
C.运算符重载不能改变运算符的结合性
D.运算符重载能改变对预定义类型数据的操作方式
10.下列有关内联函数的叙述中,正确的是()。
A.内联函数在调用时发生控制转移
B.内联函数必须通过关键字inline来定义
C.内联函数是通过编译器来实现的
D.内联函数函数体的最后一条语句必须是return语句
二、单选题(13题)11.有如下两个类定义:
classAA{};
classBB{
AAv1,*v2;
BBv3;
int*v4;
};
其中有一个成员变量的定义是错误的,这个变量是A.v1B.v2C.v3D.v4
12.有如下类定义:classFoo{public:Foo(intv):value(v){}//①~Foo(){}//②private:Foo(){}//③intvalue=0;//④};其中存在语法错误的行是()。A.①B.②C.③D.④
13.对于一个类定义,下列叙述中错误的是A.如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数。
B.如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数。
C.如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数。
D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数。
14.
15.当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为A.ios_base::in
B.ios_base::inlios_base::out
C.ios_base::out
D.ios_base::ingdos_base::out
16.下列函数模板的定义中,合法的是A.templateTabs(Tx){returnx<0–x:x;}
B.templateclassTabs(Tx){retumx<0-x;x;}
C.templateTabs(Tx){retumx<0-x;x;}
D.templateTabs(Tx){returmx<0-x;x;}
17.有64个结点的完全二叉树的深度为______(根的层次为1)。
A.8B.7C.6D.5
18.关于类和对象描述错误的是()。
A.对象(Object)是现实世界中的客观事物,对象具有确定的属性
B.类是具有相同属性和行为的一组对象的集合
C.对象是类的抽象,类是对象的实例
D.类是对象的抽象,对象是类的实例
19.类模板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>);
20.下列模式中,能够给出数据库物理存储结构与物理存取方法的是A.内模式B.外模式C.概念模式D.逻辑模式
21.有如下语句序列:
charstr[10];cin>>str;
当从键盘输入”Ilovethisgame”时,str中的字符串是A.”Ilovethisgame”B.”Ilovethi”C.”Ilove”D.”I”
22.若有以下函数调用语句:fun(m+n,x+y,f(m+n,z,(x,y)));在此函数调用语句中实参的个数是()。
A.6B.5C.4D.3
23.下列数据结构中,属于非线性结构的是A.循环队列B.带链队列C.二叉树D.带链栈
三、2.填空题(12题)24.在长度为n的有序线性表中进行二分查找,最坏的情况下需要的比较次数为【】。
25.如果表达式--x中的“--”是重载的类运算符,采用运算符函数调用格式,该表达式还可以表示为【】。
26.在任何类中都有三种访问权限的数据成员,这三种权限是public、private和【】。
27.如果把类FriendClass定义为类TestClass的友元类,则应该在类TestClass的定义中加入语句______。
28.有如下定义语句:
MyClass*p[10];
当类对象数组指针p离开它的作用域时,系统自动调用析构函数【】次。
29.将x+y*z中的“+”用成员函数重载,“*”用友元函数重载应写为【】。
30.下面是一个栈类的模板,其中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【】;
}
};
31.数据流图的类型有【】和事务型。
32.写出下列程序的运行结果【】。
#include<iostream.h>.
#include<fstream.h>
#include<stdlib.h>
voidmain()
{
fstreamoutfile,infile;
outfile.open("data.clat",ios::out);
if(!outfile)
{
cout<<"Can'topenthefile."<<end1;
abort();
}
outfile<<"1234567890"<<end1;
outfile<<"aaaaaaaaa"<<end1;
outfile<<"**********"<<end1;
outfile.close();
infile.open("data.dat",ios::in);
if(!infile)
{
cout<<"Can'topenthefile."<<end1;
abort();
}
charline[80];
intI=0;
while(!infile.eof())
{
I++;
infile.getline(line,sizeof(line));
cout<<I<<":"<<line<<end1;
}
infile.close();
}
33.在类的对象被创建时,______函数会被自动调用。
34.下面程序的输出结果是【】。
#include<iostream.h>
intadd(inta,intb);
voidmain()
{
externintx,y;
cout<<add(x,y)<<end1;
}
intx(20),y(5);
intadd(inta,intb)
{
ints=a+b;
returns;
}
35.如果表达式x=y*z中的“*”是作为成员函数重的运算符,采用运算符函数调用格式,该表达式还可以表示为【】。
四、程序改错题(10题)36.使用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;}37.使用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;}
38.使用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;
}
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。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动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,该程序运行时有错误,请改正程序中的错误,使得程序输出:
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;
}
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,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件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;
}
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。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。
注意:不要改动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.(1)应添加“BA(intm){a=m;}”。
(2)应添加“PAl(intm,intn):BA(n){b=m;}”。
(3)应添力Ⅱ“PA2(intm,intn,intk):PAl(n,k){C=m;)”。
(4)应添加“cout<<geta<<""<<getb<<""<<C<<endl;”。
【解析】根据第1处要求,构造函数的函数名和类名一致,显然BA构造函数的名称为BA,在BA中通过参数m完成对成员变量a的赋值,因此构造函数的名称为BA(intm),在函数内部对成员a赋值,故第1处的语句应添加“BA(intm){a=m;)”。根据第2处的要求,构造函数的形式为“PAl(intm,intn)”,m赋值给PA1类成员b,将n作为基类BA构造函数的参数值传入,故第2处应添加“PA1(intm,intn):BA(n){b=m;}”。根据第3处的要求,函数形式为PA2(intm,intn,intk),在构造函数中将m赋值给数据成员c,将n和k分别赋值给基类PA1构造函数的参数m和n,因此第3处应添加“PA2(intm,intn,intk):PA1(n,k){C=m;}”。根据第4处的要求,PA2类公有派生于PA1,而PA1公有派生于BA,因此在PA2类中可以调用基类的geta和getb来获得基类私有成员a和b,再输出PA2的私有成员C即满足要求,因此第4处应添加“cout<<geta<<""<<getb<<""<<C<<endl;”。
47.使用VC++6.0打开考生文件夹下的源程序文件3.cpp。请完成以下部分,实现在屏幕上输出为C3C2这个程序需要修改的部分,请按照以下部分实现。(1)类C0不能被实例化,请定义一个纯虚函数print,在注释1后添加适当的语句。(2)类C1私有虚继承类C0,请在注释2后添加适当的语句。(3)类C2公有继承于C0,请在注释3后添加适当的语句。(4)类c3公有继承于C2与C1,请在注释4后添加适当的语句。注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。试题程序:#include(iostream.h)classCO{//********1********};//********2********classC1:{public:voidprint{cout<"”C1"<<endl;}};//********3********classC2:{public:voidprint{cout<<"C2"<<endl;}};//********4***x****classC3:{public:voidprint{cout<<"C3"<<endl;}};voidmain{C30bj3;C20bj2;obj3.print;obj2.print;return;}六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test7_3,此工程包含一个源程序文件test7_3.cpp,其中含有一个类Circle的定义,但该类的定义并不完整。请按要求完成下列操作,将类Circle的定义补充完整。
(1)为类Circle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radius。将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。请在注释“//**1**”之后添加适当的语句。
(2)为类Circle增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序
Circlec;
c.SetRadius(5);
c.Print();
将输出:Thecirclehasradiusof5!
请在注释“//**2**”之后添加适当的语句。
(3)完成友元函数voidCompareR(Circle*cl,Circle*c2)的定义,在屏幕中输出c1与c2比较radius大小结果,要求使用if-else结构完成。请在注释“//**3**”之后添加适当的语句。
输出结果如下;
Thecirclehasradusof5!
Thecirclehasradiusof10!
c1<c2
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test7_3.cpp清单如下:
#include<iostream.h>
classCircle{
public:
Circle():radius(5){}
//**1**
voidSetRadius(intr){radius=r;}
intGetRadius(){returnradius;}
//**2**
friendvoidCompareR(Circle*c1,Circle*C2);
private:
intradius;
};
voidCompareR(Circle*c1,Circle*C2)
{
//**3**
cout<<"c1>c2"<<endl;
else
if((c1->GetRadius())==(c2->GetRadius()))
cout<<"c1=c2"<<endl;
else
if((c1->GetRadius())<(c2->GetRadius()))
cout<<"c1<c2"<<endl;
}
voidmain()
{
Circlec1;
c1.SetRadius(5);
C1.Print();
Circlec2(10);
c2.Print();
CompareR(&c1,&c2);
}
49.使用VC6打开考生文件夹下的工程test34_3。此工程包含一个test34_3.cpp,其中定义了表示栈的类stack。源程序中stack类的定义并不完整,请按要求完成下列操作,将程序补充完整。
(1)定义类stack的私有数据成员sp和size,它们分别为整型的指针和变量,其中sP指向存放栈的数据元素的数组,size为栈中存放最后一个元素的下标值。请在注释“//**1**”之后添加适当的语句。
(2)完成类stack的构造函数,该函数首先从动态存储空间分配含有100个元素的int型数组,并把该数组的首元素地址赋给指针sp,然后将该数组的所有元素赋值为0,并将size赋值为-1(size等于-1表示栈为空)。请在注释“//**2**”之后添加适当的语句。
(3)完成类stack的成员函数push的定义。该函数将传入的整型参数x压入栈中,即在size小于数组的最大下标情况下,size自加1,再给x赋值。请在注释“//**3**”之后添加适当的语句。
(4)完成类stack的成员函数pop的定义,该函数返回栈顶元素的值,即在size不等于-1的情况下,返回数组中下标为size的元素的值,并将size减1。请在注释“//**4**”之后添加适当的语句。
程序输出结果如下:
thetopelem:1
thepopelem:1
thestackisempty
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test34_3.cpp清单如下:
#include<iostream.h>
classstack
{
//**1**
public:
stack();
boolempty(){returnsize==-1;}
boolfull(){returnsize==99;}
voidpush(intx);
voidpop();
voidtop();
};
stack::stack()
{
//**2**
for(inti=0;i<100;i++)
*(sp+i)=0;
size=-1;
}
voidstack::push(intx)
{
//**3**
cout<<"thestackisfull"<<end1;
else
{
size++;
*(sp+size)=x;
}
}
voidstack::pop()
{
//**4**
cout<<"thestackisempty"<<end1;
else
{
cout<<"thepopelem:"<<*(sp+size)<<end1;
size--;
}
}
voidstack::top()
{
ifiempty())
cout<<"thestackisempty"<<end1;
else
{
cout<<"thetopelem:"<<*(sp+size)<<end1;
}
}
voidmain()
{
stacks;
s.push(1);
s.top();
s.pop();
s.top();
}
参考答案
1.A解析:B和C不符合赋值兼容规则,D不能建立抽象类的对象。
2.B解析:栈操作原则上“后进先出”,栈底至栈顶依次存放元素A、B、C、D,则表明这4个元素中D是最后进栈,B、C处于中间,A最早进栈。所以出栈时一定是先出D,再出C,最后出A。
3.B解析:c++语言中通常有3种继承修饰符public,protected和private,限制依次严格,另外对类中的数据和函数也有这3种修饰符进行限制。一个派生类能不能继承基类的所有数据成员受它们的限制。注意:c++语言中继承关系的修饰符pubIic,protected和private的运用。
4.D解析:本题考查的是模板实参的省略。模板实参在以下几种情况中不能省略:
①从模板函数实参表获得的信息有矛盾:
②需要获得特定类型的返回值,而不管参数的类型如何;
③虚拟类型参数没有出现在模板函数的形参表中;
④函数模板含有常规形参。
故本题的正确答案是选项D。
5.D结构化程序设计由迪杰斯特拉(E.W.dijkstra)在1969年提出,他主张“清晰第一,效率第二”,以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,这样使完成每一个模块的工作变得单纯而明确,为设计一些较大的软件打下了良好的基础。
由于模块相互独立,因此,在设计其中一个模块时,不会受到其他模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为可以充分利用现有的模块作为积木式的扩展。
结构化程序设计的基本思想是采用“自顶向下,逐步求精”的程序设计方法和“单入口单出口”的控制结构。自顶向下、逐步求精的程序设计方法从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序结构模块组成的结构化程序框图;“单入口单出口”的思想认为一个复杂的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、嵌套构成,那么这个新构造的程序一定是一个单入口单出口的程序。据此就很容易编写出结构良好、易于调试的程序。
6.C解析:构造函数是一类特殊的函数,其特点是函数名与类同名,没有返回值,也可以省略不写,还可以对类中的成员进行初始化。
7.A解析:本题实际是考察指针的含义。指针代表的是变量或函数等在内存的地址。
8.A解析:拷贝构造函数是一个特殊的构造函数,它用一个已知的对象初始化一个正在创建的同类对象,它不能指定函数返回类型;只有一个参数,是同类的某个对象名的引用。每一个类中都必须有一个拷贝构造函数,如果类中未声明,编译器会自动生成一个公有的拷贝构造函数。
9.DD。【解析】本题考查C++语言中操作符重载的概念。运算符重载的关键字是operator。运算符重载的规则是重载时不能改变运算符的操作数个数,不能改变运算符的优先级,不能改变运算符的结合性,不能改变对预定义类型数据的操作方式。
10.C解析:此题考查的是内联函数的概念.在调用时,内联函数会像宏函数一样地层开,将调用表达式用内联函数体来替换,所以它没有一般函数的参数压栈和退栈操作,所以选项A)错误;即使没有使用inline说明,编译器也会将在类的说明部分定义的函数认定为内联函数,所以选项B)错误:内联函数只是比普通函数有更高的执行效率。对于类型为void的函数,它不需要返回任何函数值,所以在函数体中既可以使用return语句,也可以不使用,选项D)错误。
11.CC。【解析】本题主要考查类对象的定义,类的对象一般放在类结构体外或在主函数中定义,而不能放在类定义的结构体中,但自身类的指针可以,本题BBv3不能被定义于类体内。
12.D解析:本题考查了类的定义。C++语言规定,在类体中不允许对所定义的数据成员进行初始化。故本题应该选择D。
13.B解析:本题考查的知识点是:构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。故本题应该选择B。
14.C
15.A解析:在默认情况下,与ifstream流对象关联的文件将以in模式打开,该模式允许文件进行读操作;与ofstream关联的文件则以out模式打开,使文件可写。
16.A
17.B
18.CC。【解析】C++中,类是用户自定义的一种数据类型,对象是类的实例,类定义了属于该类的所有对象的共同特性。一个类作为一种数据类型,它可以定义多个对象。
19.B\nB。【解析】声明一个函数模板的格式template<模板形参表声明>函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。
\n
20.A数据库管理系统的三级模式结构由外模式、模式和内模式组成。
外模式,或子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。模式,或逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一一部分。内模式,或存储模式,或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方式的描述。
21.D解析:在使用标准输入流cin和流提取运算符>>进行多项数据的输入时,使用空白字符(空格键、回车键和Tab键)作为两项数据的分隔符,当遇到I后面的空格时,cin对象即停止接收后面的数据。本题正确答案为D。
22.D解析:参数之间是用逗号分隔的,不要因为参数是表达式而被迷惑。函数的第一个参数是表达式m+n,第三个参数是表达式f(m+n,z,(x,y))。
23.C根据数据结构中各数据元素之间的前后件关系的复杂程度,一般将数据结构分为两大类:线性结构和非线性结构。循环队列、带链队列和带链栈都是线性结构,而二叉树是非线性结构。
24.log2nlog2n解析:在长度为n的有序线性表中进行二分查找,最坏的情况下需要的比较次数为log2n。
25.x.operator--()x.operator--()解析:本题考核运算符函数的两种调用方式。假定已经作为某个类的成员函数重载了二元运算符+,且c1、c2都是该类的对象,则c1.operator+(c2)与c1+c2函数相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与c1+c2相同。
26.protectedprotected解析:本题考察类的访问权限,属于基本知识,考生应熟练掌握。
27.friendclassFiendClassfriendclassFiendClass解析:把一个类声明为另外一个类的友元类,只要在另外一个类中添加如F语句:friendclass类名:所以答案是“friendclassFriendClass”。
28.00解析:类对象数组指针p本身不定义类对象,而是定义了数组指针p可以指向一个MyClass的对象。
29.operator+(operator*(yz))operator+(operator*(y,z))解析:C++中用成员函数重载x*y为:x.operator*(y),用友元函数重载x*y为:operator*(x,y),用成员函数重载x+y为:x.operator+(y),用友元函数重载x+y为:operator+(x,y)。
30.stack[--top]或stack[top-=1]或stack[top=top-1]stack[--top]或stack[top-=1]或stack[top=top-1]
31.变换型变换型解析:典型的数据流类型有两种:变换型和事务型,,变换型是指信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统;在很多软件应用中,存在某种作业数据流。它可以引发一个或多个处理,这此处理能够完成液作业要求的功能,这种数据流就叫做事务。
32.1:12345678902:aaaaaaaaa3:**********4:
33.构造构造解析:此题考查的是构造函数的应用。构造函数的作用是在对象被创建时利用特定的值构造对象,构造函数在对象被创建时由系统自动调用。
34.25
35.x=y.operator*(z)36.(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”。37.(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;”。
38.(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);”。
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)应改为“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)”。
41.(1)应添加“public:”。
\n(2)“inti”应改为“inti(10);”。
\n(3)“i++;”应改为“i--;”。
\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类的对象被访问。故应在构造函数前添加“public:”,否则该类无法被实例化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i每次减1,在i>5时循环,故i初始化应为10。若循环中i每次增1,则循环永远不会退出。42.(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]);”。
43.(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]);”。
44.(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(…)”。
45.(1)应改为“ein.getline(str,120,?);”。
\n(2)应改为“while(str[i])”。
\n(3)应改为“if(str[i]>=a&&str[i]<=2)”。
\n【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员函数getline函数读入一行字符,格式为“cin.getline(字符数组,字符个数,终止标志字符)”,所以第1处改为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高考考前预测卷-生物(天津卷)(考试版及全解全析)
- 尾矿工岗前岗位知识考核试卷含答案
- 珂罗版印刷员岗前道德考核试卷含答案
- 会展设计师安全强化模拟考核试卷含答案
- 排土犁司机安全培训知识考核试卷含答案
- 民族弹拨乐器制作工班组评比模拟考核试卷含答案
- 锂焙烧工安全教育知识考核试卷含答案
- 伊鲁阿克临床应用考核试题
- 2026年糖尿病治疗新剂型研发进展与临床应用
- 某物流公司仓储管理操作细则
- 消防设施操作员初级课件
- DB31∕T 1091-2025 生活饮用水水质标准
- 财务软件使用管理制度
- 厦门市湖里区离婚协议书
- T/CSBME 065-2023医用敷料材料聚氨酯泡沫卷材
- 土石方工程场地平整施工方案
- 2024年江苏省苏州高新区初三一模化学试题及答案
- 兵团第十三师新星市招聘事业单位工作人员考试真题2024
- 2024-2025学年人教版七年级下册期中数学测试练习卷(含答案)
- TCAGHP031-2018地质灾害危险性评估及咨询评估预算标准(试行)
- 《美的供应商管理》课件
评论
0/150
提交评论