1、东南大学C++下期末考试笔试卷 一、选择题(每题1分,共 10 题,共 10 分) 1、在数组int b[][4]={{1},{3,4},{4,7,9,10},{8,5,6}}中,b[2][2]的值是 D 。 A.0 B. 4 C. 7 D.9 2、以下关于this指针描述正确的是 C 。 A.使基类公有成员在子类中能够被访问。 B.this指针必须写成显式的。 C.this指针总指向要调用的其成员函数的对象。 D.静态成员函数也存在this指针。 3、如果经过new运算符动态分配失
2、败,返回结果是 B 。 A.-1 B.0 C.1 D.不确定 4、 D 是一种限制存取位置的线性表,元素的存取必须服从先进先出的规则。 A.顺序表 B.链表 C.栈 D.队列 5、下列关于指针运算的描述,错误的是 D 。 A.可将一个空指针赋给某个指针。 B.两个指针在一定条件下,能够进行相等和不等运算。 C.一个指针能够加上一个整数,指向当前元素后面的若干个位置的元素。 D.两个指针在一定条件下能够相加。 6、实现深复制,下面的类成员函数中,
3、 A 不是必须自定义的。 A. 构造函数 B. 复制构造函数 C. 析构函数 D. 复制赋值操作符函数 7、 设数组int fibon[10],int *pfib=fibon; 则访问fibon数组第二个元素,以下写法错误的是 B 。 A. fibon[1] B.*++fibon C.*++pfib D.*(pfib+1) 8、 假设Person类包含公有成员name,私有成员id和受保护成员GetID,而Student类私有继承了Person类,那么Student
4、类的成员函数能够直接访问 C 。 A.Person类的所有成员 B.仅有Person类的公有成员name C.仅有Person类的公有成员name和受保护成员GetID D.Person类的任何成员都不能访问 9、 实现多态的派生类函数不必 D 。 A.与基类虚函数同名 B.与基类虚函数同参数表 C.与基类虚函数同返回类型 D.用virtual修饰 10、分析下列代码是否存在问题,选择合适的选项: B 。 int main(void) { int *p = new int [
5、10]; p = new int [10]; delete [] p; p = NULL; return 0; } A.没有问题 B.有内存泄漏 C.存在空悬指针 D.存在重复释放同一空间 二、填空题(每空 1 分,共 20 空,共 20 分) 1、有序数组int B[17]中存放17个元素,用对半查找法查找B[11]元素,则进行比较的数组下标值依次是 8,12,10,11 。 2、设整数型指针P1,P2分别指向整数型数组A[1
6、0]={1,2,0,4,5,9,7,8,6,4}的第2和第5个元素,则P2-P1= 3 ,A[5]-A[2]= 9 。 3、单链表的结点分为 指针 域和 数据 域两部分。 4、标明为无具体实现的虚函数是 纯虚函数 。包含该函数的类称为 抽象类 ,不能用来定义对象。 5、C++文件流采用两种格式访问文件:文本格式和二进制格式。前者按 字符 存取,后者按 字节 存取。 6、重载提取运算符>>和插入运算符<<实现对象的输入和输出,需要将重载的运算符函数声明为该类的 友元函数 。 7.指针类
7、型变量用于存贮 地址 , 在内存中它占有4个存贮单元。 8. 设有说明: int a, k, m, *p1=&k, *p2=&m; 执行a=p1==&m;后a的值是 0 。 9.若有: int i,&j=i; i=1; j=i+2; 则 i= 3 。 10. 构造函数 是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其它内部管理操作。 11.一般情况下,使用系统提供的默认析构函数就能够了,但当对象的成员中使用了 new 运算符动
8、态分分配内存空间时,就必须定义析构函数以正确释放对象空间。为了对象间能正确赋值,还必须要 重载运算符= 。
12.在类的派生过程中,要实现动态多态性,首先在类中必须要定义 虚函数 ,还要在使用对象的函数中定义 基类 指针,使该指针指向不同类的对象。
13 . 利用成员函数对双目运算符重载,其有 1 个参数,该参数为运算符的 右操作函数 。
三、阅读程序题(每空1-2分,共 40 分)
1、以下程序的输出结果是:(本题6分,每空2分)
#include
9、std;
void main(void)
{
int a,b,k=4,m=6,*p1=&k,*p2=&m;
int arr[]={30,25,20,15,10,5},*p=arr;
p++;
cout<<*(p+3)< 10、下程序的错误:(本题8分,每空2分)
#include 11、
}
~Sample (int a) {value =0;}
};
void main(void)
{
Sample s(4);
cout< 12、
3、指出程序的运行结果:(本题8分,每空2分)
#include 13、D.y;}
};
void main(void)
{
Vector A(1,2),B(4,2);
cout<<"A:";
A.disp( );
cout<<"B:";
B.disp( );
A+=B;
cout<<"A+=B:";
A.disp( );
A-=B;
cout<<"A-=B:";
A.disp( );
}
程序运行结果:
A(1,2)
B(4,2)
A+=B(5,4)
A-=B(1,2)
4 14、下面是一个实现类的继承与派生的程序,请写出程序运行结果,并根据主函数中编程者的原意(调用派生类的成员函数),修改类的成员定义,然后写出修改后的运行结果(本题10分)
#include 15、lic A
{
public:
void fun1(){cout <<"B fun1"< 16、fun2
A fun3
纠正错误:(每空2分)
Fun3改为虚函数
Fun2参数X去掉
修改后的输出结果如下(每空1分):
B fun1
B fun2
B fun3
5、指出程序的运行结果:(本题8分,每空1分)
#include 17、){cout<<"B1:Destructor"< 18、),B2(),b1(){cout<<"A:Constructor"< 19、r
B2 Destructor
B3 Destructor
四、完善程序填空题(每空2分,共 15 空,共 30 分)
1. 完成如下程序,要求实现方阵(矩阵行列数目相同)的上三角元素(含对角线元素)的和。
#include 20、t sum=0;
for(int i=0;i 21、c:
Point(double xv = 0, double yv = 0) {x = xv; y = yv;}
double area() {return 0;}
void show() {cout<<"点坐标:x="< 22、 yv1), end(xv2, yv2) { }
double getLength()
{
return sqrt((x - end.x) * (x - end.x) + (y - end.y) * (y - end.y));
}
double area() {return 0;}
void show()
{
cout<<"起点: \n";
Point::show();
cout<<"终点: \n";
end .show();
}
};
3. 下列程序将结构体变量tt中的内容写入D盘上的date.txt文件 23、
#include 24、" << endl ;
exit (-1) ; }
outdate.write( (char*)&tt ,sizeof(tt));
outdata.close() ;
}
4. 完善fruit类的构造函数、析构函数、深拷贝构造函数
#include 25、ring shape; //水果形状
string color; //水果颜色
double weight;//水果均重
double *price;//指向一年中每个季度水果的均价
public:
fruit( string N,string S,string C,double W,double *p=0):
name(N),shape(S),color(C),weight(W),price(P){}
~fruit()
{
if(price){delete []price ;}
}
fruit(fruit& F)
{
26、
name=F.name;
shape=F.shape;
color=F.color;
weight=F.weight;
if(F.price)
{
price= new double[4] ;
for(int i=0;i<4;i++)
price[i]=F.price[i] ;
}
else price=F.price;
}
void setprice()
{
if(price)
{
27、cout<<"请输入每个季度"< 28、
fruit Dongtai_melon(melon);
return 0;
}
5. 下面是一个选择排序函数,完成将数组元素值按上升的次序来排序,请完善程序。
void sort(int a[],int n){
for (int i = 0; i < n; i++){
int pos=i ;
for (int j= i+1; j < n; j++){
if (a[j]






