一、选择题(每小题1分,共40分)
1、假定int类型变量占用两个字节,其有定义int x[10]={0,2,4};,则数组x在内存中所占字节数是( )。
A.3
B.6
C.10
D.20
2、有两个关系R,S如下:
由关系R通过运算得到关系s,则所使用的运算为( )。
A.选择
B.投影
C.插入
D.连接
3、对于循环队列,下列叙述中正确的是( )。
A.队头指针是固定不变的
B.队头指针一定大于队尾指针
C.队头指针一定小于队尾指针
D.队头指针可以大于队尾指针,也可以小于队尾指针
4、下列有关函数重载的叙述中,错误的是( )。
A.函数重载就是用相同的函数名定义多个函数
B.重载函数的参数列表必须不同
C.重载函数的返回值类型必须不同
D.重载函数的参数可以带有默认值
5、有三个关系R S和T如下.
则由关系R和S得到关系T的操作是( )。
A.自然连接
B.并
C.交
D.差
6、下面关于类和对象的描述中,错误的是( )。
A.类就是C语言中的结构体类型,对象就是C语言中的结构体变量
B.类和对象之间的关系是抽象和具体的关系
C.对象是类的实例,一个对象必须属于一个已知的类
D.类是具有共同行为的若干对象的统一描述体
7、有如下程序:
#inClude using namespaCe std; Class test{
private: int a;
publiC:
test( ){Cout<
test(Const test&_test){ a=test.a:
Cout<
test( ){Cout<
};
int main( ){ test A(3); return 0;
}
执行这个程序的输出结果是( )。
A.3
B.ConstruCtor
destruCtor
C.Copy ConstruCtor
destruCtor
D.3
destruCtor
8、有如下函数模板:
template
T east(U u)i return u;}
其功能是将U类型数据转换为T类型数据。已知i为int型变量,下列对模板函数cast的调用中正确的是( )。
A.cast(i);
B.cast<>(i);
C.east(i);
D.east(i);
9、下面程序的运行结果是( )。
#include
void fun(int *a,int *B. {
int x=*a:
*a=*b;*b=X;
cout<
void main() {
int X=1,Y=2; fun(&x,&y);
cout<
}
A.12 12
B.12 21
C.21 12
D.21 21
10、在C++语言中,打开一个文件就是将这个文件与一个( )建立关联。
A.流
B.类
C.结构
D.对象
11、 下列语句中,错误的是( )。
A.const int buffer:256;
B.const int temp;
C.const double*point;
D.const double*rt=new double(5.5);
12、 下列程序的输出结果为( )。
#include
void main()
{
char*a[]={”hell0”,”the”,”world”};
char** pa = a:
pa++;
cout<
}
A.hello
B.the
C.world
D.hellotheworld
13、 关于运算符重载,下列表述中正确的是( )。
A.C++已有的任何运算符都可以重载
B.运算符函数的返回类型不能声明为基本数据类型
C.在类型转换符函数的定义中不需要声明返回类型
D.可以通过运算符重载来创建C++中原来没有的运算符
14、 可以用P.a的形式访问派生类对象P的基类成员a,其中a是( )。
A.私有继承的公有成员
B.公有继承的私有成员
C.公有继承的保护成员
D.公有继承的公有成员
15、 在下列原型所示的C++函数中,按“传值”方式传递参数的是( )。
A.void fl(int X);
B.void t2(int*X);
C.void f3(Const int*X);
D.void f4(int&x);
16、 以下关键字不能用来声明类的访问权限的是( )。
A.public
B.static
C.protected
D.private
17、下面程序的运行结果为( )。
#include class A
{
int hum;
public:
A(int i){nuln=i;}
A(A&A.{num=a.num十+;} void print(){eout(
void main()
A a(1),b(A.; a.print();
A print();
A.11
B.12
C.21
D.22
18、 下面是重载为非成员函数的运算符的函数原型,其中错误的是( )。
A.Fraction operator+(Fraction,Fraction);
B.Fraction operator一(Fraction);
C.Fraction&operator=(Fraction&,Fraction);
D.Fraction&operator+=(Fraction&,Fraction);
19、 下列语句中错误的是( )。
A.Const int a;
B.Const int a=10;
C.Const int * point=0;
D.Const int * point=new int(10);
20、 下列关于函数的描述中,错误的是( )。
A.函数可以没有返回值
B.函数可以没有参数
C.函数可以是一个类的成员
D.函数不能被定义为模板
21、 下列语句都是程序运行时的第1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是( )。
A.cout<
B.eout<
C.cout<
D.cout<
22、 有三个关系R、S和T如下:
则由关系R和S得到关系T的操作是( )。
A.自然连接
B.差
C.交
D.并
23、 有如下程序:
#include
using namespace std;
class VAC{
public:
intf()const{return 3;}
int f(){retum 5;}
};
int main()
{
VAC vl;
const VAC v2;
cout<
return 0;
}
执行这个程序的输出结果是( )。
A.53
B.35
C.55
D.33
24、 一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。
A.一对一
B.一对多
C.多对一
D.多对多
25、 下列关于二叉树的叙述中,正确的是( )。
A.叶子结点总是比度为2的结点少一个
B.叶子结点总是比度为2的结点多一个
C.叶子结点数是度为2的结点数的两倍
D.度为2的结点数是度为1的结点数的两倍
26、 有以下语句,则对a数组元素的引用不正确的是(0≤i≤9)( )。
int a[10]={0,1,2,3,4,5,6,7,8,9},*P=a;
A.a[P-a]
B.*(&a[i])
C.P[i]
D.*(*(a+i))
27、 下列程序的运行结果为( )。
#include
void print(double A.
{
cout<
}
void print(int atint B.
{
cout<
}
void main()
{
print(1.2);
eout<
print(3,4);
}
A.1.2 34
B.2.2 34
C.1.2 43
D.2.2 43
28、 存在定义int a[10],x,* pa;,若pa=&a[0],下列的( )选项和其他3个选项不是等价的。
A.x=*pa;
B.x=*(a+1);
C.x=*(pa+l)
D.x=a[1];
29、 下列叙述中正确的是( )。
A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D.循环队列中元素的个数是由队头指针和队尾指针共同决定
30、 通常拷贝构造函数的参数是( )。
A.某个对象名
B.某个对象的成员名
C.某个对象的引用名
D.某个对象的指针名
31、如果在表达式++x/y中,“++”是作为友元函数重载的,…/”是作为成员函数重载的,则该表达式还可为( )。
A.(operator++(x)).operator/(Y)
B.(operator++(0)).operator/(Y)
C.operator/((operator++(x,0)),Y)
D.operator/((operator++(0)),Y)
32、 一个函数功能不太复杂但要求被频繁调用,应选用( )。
A.内联函数
B.重载函数
C.递归函数
D.嵌套函数
33、 数据库应用系统中的核心问题是( )。
A.数据库设计
B.数据库系统设计
C.数据库维护
D.数据库管理员培训
34、 有如下程序: Class Base{ publiC:
int data; };
Class Derivedl:publiC Base{};
Class Derived2:proteCted Base{};
int main( ) {
Derivedl dl; Derived2 d2; dl.data=0;//①
d2.data=0;//② retum 0;
}
下列关于程序编译结果的描述中,正确的是( )。
A.①②皆无编译错误
B.①有编译错误,②无编译错误
C.①无编译错误,②有编译错误
D.①②皆有编译错误
35、 下列关于基类和派生类关系的叙述中,正确的是( )。
A.每个类最多只能有一个直接基类
B.派生类中的成员可以访问基类中的任何成员
C.基类的构造函数必须在派生类的构造函数体中调用
D.派生类除了继承基类的成员,还可以定义新的成员
36、 结构化程序所要求的基本结构不包括( )。
A.顺序结构
B.GOT0跳转
C.选择(分支)结构
D.重复(循环)结构
37、将E—R图转换为关系模式时,实体和联系都可以表示为( )。
A.属性
B.键
C.关系
D.域
38、 下面是一个模板声明的开始部分:
templatedouble…由此可知( )。
A.这可能是一个函数模板的声明
B.这可能是一个类模板的声明
C.这既可能是一个函数模板的声明,也可能是一个类模板的声明
D.这肯定是一个错误的模板声明
39、有如下程序:
#include
using namespace std;
class AA{
int k;
protected:
int n;
void setK(int k){this一>k=k;}
public:
void setN(int n){this一>n=n;}
};
class BB:public AA{/*类体略*/};
int main()
}
BB X;
A n=1;//1
B setN(2);//2
C k=3;//3
D setK(4);//4
return 0;
}
在标注号码的四条语句中正确的是( )。
A.1
B.2
C.3
D.4
40、 有如下头文件:
int fl();
static int f2();
class MA{
public:
int f3();
static int f4();
};
在所描述的函数中,具有隐含的this指针的是( )。
A.fl
B.f2
C.f3
D.f4
二、基本操作题(18分)
41、
请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,该工程中包含程序文件main.epp,其中有类Door(“门”)和主函数main的定义。程序中位于每个“//ERROR****found ****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:
打开503号门…门是锁着的,打不开。
打开503号门的锁…锁开了。
打开503号门…门打开了。
打开503号门…门是开着的,无须再开门。
锁上503号门…先关门...门锁上了。
注意:只修改每个“//ERROR***********found **********”下的那一行,不要改动程序中的其他内容。
#include
using namespace std;
class Door{
int Bum;//门号
bool closed;//true表示门关着
bool locked://true表示门锁着
public:
Door(int nHm){
//ERROR***********found***********
nun=this一>ann:
closed=locked=true:
}
bool isClosed()const{rehlrn closed;}
//门关着时返回true,否则返回false
bool isOpened()const{return!closed;}
//门开着时返回true,否则返回false
b001 isLocked()const{retum locked;}
//门锁着时返回true,否则返回false
bool isUnlocked()const{return!locked;}
//门未锁时返回true,否则返回false
void open(){ //开门
cout<
//ERROR***********found***********
if(closed)
cout<
else if(10cked)
cout<
else{
closed=false;
eout<
}
}
void close(){//关门
cout<
if(closed)
cout<
else{
closed=true;
cout<
}
}
//ERROR************found************
void lock()const{//锁门
cout<
if(locked)
cout<
else{
if(!closed){
cout<
closed=true;
}
locked=true:
cout<
}
}
wild unlock(){//开锁
cout<
if(!locked)
cout<
else{
locked=false;
cout<
}
};
int main(){
Door door(503);
door.open();
door.unlock();
door.open();
door.open();
floor.10ck();
return 0;
}
三、简单应用题(24分)
42、
请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含一个程序文件 main.cpp,其中有类CPolygon(“多边形”)、CRectangle(“矩形”)、CTriangle(“三角形”)的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。该程序的正确输出结果应为: 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。 #include
{tout<
int area(void){return(width *height);}
class CTriangle:public CPolygon{
int length;//三角形一边长 int height;//该边上的高
public:
CTriangle(int l,int h):length(1),height(h){}
//*********found*********
int area(void){return(——)/2;}
};
int main(){
CRectangle rect(4,5); CTriangle trgl(4,5);
//*********found********* ______ *ppolyl,* ppoly2; ppolyl=▭
ppoly2=&trgl;
ppolyl->printarea(); ppoly2->printarea(); retun 0;
四、综合应用题(18分)
43、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的DataList类,是一个用于表示数据表的类。s0rt成员函数的功能是将当前数据表中的元素升序排列。请编写这个sort函数。程序的正确输出应为: .
排序前:7,1,3,11,6,9,12,10,8,4,5,2 排序后:l,2,3,4,5,6,7,8,9,10,11,12
要求:
补充编制的内容写在“//********33********”与“//********666********”两行之问。不得修
改程序的其他部分。
注意:程序最后将结果输出到文件。ut.dat中。输出函数writeToFile已经编译为。obj文件,并且在本程序
调用。
//DataList.h
#inClude using namespaCe std; Class DataList{//数据表类
int len;
double*d: publiC:
DataList(int len,double data[]=NULL);。DataList(){delete[]d;}
int length(Constt retum len;}//数据表长度(即数据元素的个数) double getElement(int i)Const{return d[i];}
void sort();//数据表排序
void show()Const;//显示数据表}.
void writeToFile(Char*,Const DataList&).//main.Cpp
#inClude”DataList.h”
DataList::DataList(int len,double data[]):len(1en){ d=new double[1en];
for(int i_0;i
d[i]=(data==NULL?0.0:data[i]);
}
void DataList::sort(){//数据表排序//********333********
//********666********}
void DataList::show()Const{//显示数据表
for(int i=0;i
int main(){
double S[]={7,1,3,11,6,9,12,10,8,4,5,2}; DataList list(12,S);
Cout<
list.sort();
Cout<
writeToFile(””,list); return 0;
}