1、【
单选题
】
下列排序方法中,最坏情况下比较次数最少的是( )。
[1分]
、
冒泡排序
、
简单选择排序
、
直接插入排序
、
堆排序
答案:
2、【
单选题
】
下面程序的运行结果为( )。
#include
class A
{
public:
A(){tout<<”1”;}
~A(){tout<<”2”;}
};
class B:public A
{
public:
B(){cout<<”3”;}
~B(){cout<<”4”;}
};
void main()
{
B b;
}
[1分]
、
1234
、
1324
、
1342
、
3142
答案:
3、【
单选题
】
以下程序中调用cin函数给变量a输入数值的方法是错误的,其错误原因是( )。
#include
void main()
{int * P,* q,a,b;
P=&a:
eout<<”input a:”;
cin>>P:
[1分]
、
* P表示的是指针变量P的地址
、
P表示的是变量a的地址,而不是变量a的值
、
*P表示的是指针变量P的值
、
*P只能用来说明P是一个指针变量
答案:
4、【
单选题
】
与语句cout<<ENDL;不等价的是(&NBSP;&NBSP;&NBSP; )。
[1分]
、
cout <<’\n’;
、
cout<<‘\l2’:
、
cout <<’\xA’;
、
cout<<‘\0’:
答案:
5、【
单选题
】
如果表达式x * y+z中,“*”是作为友元函数重载的,“+”是作为成员函数重载的,则该表达式还可为 ( )。
[1分]
、
operator+(operator$(X,Y),z)
、
x.operator+(operator * (x,y),Z)
、
Y.operator * (operator+(x,Y),z)
、
x.operator+(operator{(X,Y))
答案:
6、【
单选题
】
在下列关键字中,不能用来表示继承方式的是( )。
[1分]
、
private
、
static
、
public
、
protected
答案:
7、【
单选题
】
下面的( )选项不能作为函数的返回类型。
[1分]
、
void
、
int
、
new
、
long
答案:
8、【
单选题
】
定义无符号整数类为UInt,下面可以作.为类UInt实例化值的是( )。
[1分]
、
一369
、
369
、
0.369
、
整数集合{1,2,3,4,5}
答案:
9、【
单选题
】
下列关于类定义的说法中,正确的是( )。
[1分]
、
类定义中包括数据成员和函数成员的声明
、
类成员的缺省访问权限是保护的
、
数据成员必须被声明为私有的
、
成员函数只能在类体外进行定义
答案:
10、【
单选题
】
有如下程序:
#nclude
using namespace std;
int main()
{
void function(double val);
double val;
function(val);
cout<
return 0;
}
void function(double val)
} val=3;}
编译运行这个程序将出现的情况是( )。
[1分]
、
编译出错,无法运行
、
输出:3
、
输出:3.0
、
输出一个不确定的数
答案:
11、【
单选题
】
this指针是C++语言实现( )的一种机制。
[1分]
答案:
12、【
单选题
】
下面关于虚函数的描述,错误的是( )。
[1分]
、
在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数
、
基类中说明了虚函数后,派生类中对应的函数也必须说明为虚数
、
虚函数可以是另一个类的友元函数,但不能是静态成员函数
、
基类中说明的纯虚函数在其任何派生类中都必须实现
答案:
13、【
单选题
】
面向对象方法中,继承是指( )。
[1分]
、
一组对象所具有的相似性质
、
一个对象具有另一个对象的性质
、
各对象之间的共同性质
、
类之间共享属性和操作的机制
答案:
14、【
单选题
】
下列程序的运行结果为( )。 #include
void main() {
int a=2:
int b=a+1: cout<
[1分]
、
0.66667
、
0
、
0.7
、
0.66666666…
答案:
15、【
单选题
】
有如下定义:
int a[5]={1,3,5,7,9},* P=a;
下列表达式中不能得到数值5的是( )。
[1分]
、
a[2]
、
a[3]
、
*(P+2)
、
+P+4
答案:
16、【
单选题
】
C++系统预定义了4个用于标准数据流的对象,下列选项中不属于此类对象的是( )。
[1分]
、
cout
、
cin
、
cerr
、
cset
答案:
17、【
单选题
】
有如下程序:
#include
using namespace std;
class GA{
public:
virtual int f()t retum l;}
};
class GB:public GA{
public:
virtual int f(){retum 2;}
};
void show(GA g){eout<<9.f();}
void display(GA&g){cout<<9.f();}
int main()
{
GA a;show(A.;display(A.;
GB b;show(B.;display(B.;
return 0;
}
执行这个程序的输出结果是( )。
[1分]
、
1111
、
1211
、
1112
、
1212
答案:
18、【
单选题
】
下列叙述中正确的是( )。
[1分]
、
有一个以上根结点的数据结构不一定是非线性结构
、
只有一个根结点的数据结构不一定是线性结构
、
循环链表是非线性结构
、
双向链表是非线性结构
答案:
19、【
单选题
】
下列关于虚函数的说明中,正确的是( )。
[1分]
、
从虚基类继承的函数都是虚函数
、
虚函数不得是静态成员函数
、
只能通过指针或引用调用虚函数
、
抽象类中的成员函数都是虚函数
答案:
20、【
单选题
】
某二叉树共有7个结点,其中叶子结点只有l个,则该二叉树的深度为(假设根结点在第1层)( )。
[1分]
答案:
21、【
单选题
】
在数据库设计中,将E~R图转换成关系数据模型的过程属于( )。
[1分]
、
需求分析阶段
、
概念设计阶段
、
逻辑设计阶段
、
物理设计阶段
答案:
22、【
单选题
】
下列关于类模板的模板参数的叙述中,错误的是( )。
[1分]
、
模板参数可以作为数据成员的类型
、
模板参数可以作为成员函数的返回类型
、
模板参数可以作为成员函数的参数类型
、
模板参数不能作为成员函数的局部变量的类型
答案:
23、【
单选题
】
在软件开发中,需求分析阶段产生的主要文档是( )。
[1分]
、
可行性分析报告
、
软件需求规格说明书
、
概要没计说明书
、
集成测试计划
答案:
24、【
单选题
】
下面关于模板的描述,错误的是( )。
[1分]
、
函数模板和类模板的参数可以是任意的数据类型
、
类模板不能直接使用,必须先实例化为相应的模板类,然后定义了模板类的对象后才能使用
、
函数模板不能直接使用,需要实例化为模板函数后才能使用
、
类模板的成员函数都是模板函数
答案:
25、【
单选题
】
数据库系统的三级模式不包括( )。
[1分]
、
概念模式
、
内模式
、
外模式
、
数据模式
答案:
26、【
单选题
】
为了取代c中带参数的宏,在c++中使用( )。
[1分]
、
重载函数
、
内联函数
、
递归函数
、
友元函数
答案:
27、【
单选题
】
C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是( )。
[1分]
、
增加了一些新的运算符
、
允许函数重载,并允许设置默认参数
、
规定函数说明符必须用原型
、
引进了类和对象的概念
答案:
28、【
单选题
】
派生类的成员函数不能访问基类的( )。
[1分]
、
公有成员和保护成员
、
公有成员
、
私有成员
、
保护成员
答案:
29、【
单选题
】
下列代码段中声明了3个类:
Class Person{};
Class Student:publiC Person{};
Class Undergraduate:Student{};
下列关于这些类之间关系的描述中,错误的是( )。
[1分]
、
类Person是类Undergraduate的基类
、
类Undergraduate从类Student公有继承
、
类Student是类Person的派生类
、
类Undergraduate是类Person的派生类
答案:
30、【
单选题
】
若有下面的函数调用:
fun(fl+b,3,max(n一1,B.)
则fun的实参个数是( )。
[1分]
答案:
31、【
单选题
】
有如下两个类定义:
class XX{
private:
double xl;
protected:
double x2;
public:
double x3;
};
class YY:protected XX{
private:
double yl;
protected:
double y2;
public:
double y3;
在类YY中保护成员变量的个数是( )。
[1分]
答案:
32、【
单选题
】
下列关于运算符重载的描述中,正确的是( )。
[1分]
、
运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符
、
一元运算符只能作为成员函数重载
、
二元运算符重载为非成员函数时,参数表中有一个参数
、
C++中可以重载所有的运算符
答案:
33、【
单选题
】
建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、C(派生类)构造函数),这3种构造函数的调用顺序为( )。
[1分]
答案:
34、【
单选题
】
在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是( )。
[1分]
、
ios_base::cur
、
ios—base::beg
、
los_base::0ut
、
ios—base::end
答案:
35、【
单选题
】
当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为( )。
[1分]
、
ios—base::in
、
ios—base::in l ios base::0ut
、
los base;:0ut
、
ios_base::in&ios_base::0ut
答案:
36、【
单选题
】
下列有关运算符重载的叙述中,正确的是( )。
[1分]
、
运算符重载是多态性的一种表现
、
C++中可以通过运算符重载创造新的运算符
、
C++中所有运算符都可以作为非成员函数重载
、
重载运算符时可以改变其结合性
答案:
37、【
简答题】
请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,该工程含有一个源程序文件pn,jl.cpp。其中位于每个注释“//ERROR 木}}水found}}水木”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
The value is 10
注意:只修改注释“//ERROR **** found****”的下一行语句,不要改动程序中的其他内容。
//pmjl.cpp
#include
using namespace std;
class MyClass{
int value;
public:
//ERROR********found*********
void MyClass(int val):value(val){}
int GetValue()const{return value;}
void SetValue(int val);
};
//ERROR********found********
inline void SetValue(int val){value=val;}
int main()
MyClass obj(O);
obj.SetValue(10);
//ERROR********found********下列语句功能是输出obj的成员value的值
tout<<”The value is”<<OBJ.VALUE<
return 0;
}
[18分]
解析:
(1)MyClAss(int vAl):vAluE(vAl){}
(2)voiD MyClAss::SEtVAluE(int vAl){vAluE=vAl;}
(3)Cout“”ThE vAluE is”“oBj.GEtVAluE()“EnD1;
38、【
简答题】
请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中有矩阵基类MatrixBase、矩阵类Matrix和单位阵UnitMatrix的定义,还有main函数的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:
1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//t+++found母
***”。
#nClude using namespaCe std; //矩阵基础类,一个抽象类
Class MatrixBase{ int rows,Cols; publiC:
MatrixBase(int rows,int Cols):roWS(rows),Cow(Cols){} int getRows()Const{retum rows;}//矩阵行数
int getCols()Const{return Cols;}//矩阵列数
virtual double getElement(int r,int C)Const=0;//取第i个元素的值 void show()Const{//分行显示矩阵中所有元素
for(int i=0;i<ROWS;I++){&NBSP;&NBSP;&NBSP;
for(int j=0;j<COLS;J++)&NBSP;&NBSP;&NBSP; }
<<””; Cout<< **********found********** /> } }; //矩阵类
Class Matrix:publiC MatfixBase{ double*val;
publiC: //**********found**********
Matrix(int rows,int Cols,double in[]=NULL):——{ //**********found**********
val=;
for(int i=0:i<ROWS*COLS;I++)
val[i]=(m==NULL?0.0:Ill[i]);
}
一Matrix(){delete[]val;} double getElement(int r,int C)Const{retum val[r*getCols()+C];}
};
//单位阵(主对角线元素都是l,其余元素都是0的方阵)类 Class UnitMatrix:publiC MatrixBase{
publiC:
UnitMatrix(int rOWS):MatrixBase(rows,rows){} //单位阵行数列数相同
double getElement(int r,int C)Const{ //**********found**********
if(_____)retum l.0; retum 0.0;
} }; int main(){
MatrixBase*m;
double d[][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}}; ITI=new Matrix(3,5,(double*)d);
m→show(); delete m;
Cout<
m=new UnitMatrix(6); Ill→show();
delete m; retum0; }
[24分]
解析:
(1)GEtElEmEnl(1,i)
(2)MAtrixBAsE(rows,Cols)
(3)FlEw DouBlE[rows*Cols]
(4)r==C
39、【
简答题】
请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数0perator=,以实现深层复制。
要求:
补充编制的内容写在“//************333************”与“//****************666*************”之间。不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。
//CDeepCopy.h
#include
#include
using namespace std;
class CDeepCopy
{
public:
int n;//动态数组的元素个数
int *p;//动态数组首地址
CDeepCopy(int);
~CDeepCopy();
CDeepCopy&operator=(const CDeepCopy&r);//赋值运算符函数
};
void writeToFile(char});
//main.cpp
#include”CDeepCopy.h”
CDeepCopy::一CDeepCopy(){delete[]P;}
CDeepCopy::CDeepCopy(int k){n=k;p=new int[n];}//构造函数实现
CDeepCopy&CDeepCopy::0perator=(const CDeepCopy&r)//赋值运算符函数实现
{
//***********333*********
//***********666***********
}
int main()
{
CDeepCopy a(2),d(3);
a.p[O]=1;d.p[O]=666;//对象a,d数组元素的赋值
{
CDeepCopy b(3);//调用赋值运算符函数
a.p[O]=88;b=a;
cout<
}
cout<
cout<<”d fade away;\n”;
cout<
writeToFile(””);
return 0;
}
[18分]
解析:
lq=r.n;//把对象r字符长度赋值给n
delete[]P;//删除动态数组P
P=new int[n];//给动态数组P分配空间为n
for(int i=0;i<n;i++)
//遍历对象r中的数组PP[i]=r.P[i];//把r.
P[i]赋值给P[i]
retum*this://返回被赋值的对象