资源描述
福 建 师 范 大 学 软 件 学 院
2008级软件工程专业2009-2010学年第一学期期末考试卷(A卷)
Final Examination Paper For Grade 2008
Faculty of Software, Fujian Normal University
Semester 1, 2009-2010 Academic Year (120 minutes)
Course
C++ Programming
Score from this exam
70﹪
Module
C++ Programming
Score from daily-performance
30﹪
Student No.
Final Score
Student Name
PART
Ⅰ
Ⅱ
Ⅲ
Ⅳ
Ⅴ
Total-Score
Score
一、选择题(每题2分,共30分)
1.d 2.c 3.b 4.a 5.b 6.b 7.d 8.a 9.c 10.d
11.c 12.a 13.b 14.c 15.b
Score
Marker
Checker
I. 选择题(每题2分,共30分)
1. 下列符号中,不可以作为变量名的是 d 。
A. list_p_9 B. PA123
C. ready D. for
2. 下面的哪个保留字不能作为函数的返回类型?
A. void B. int C. new D. long
3. 执行下面程序段的输出结果是 。
int x=4,y=-55;
if (x>0) if (x>10) cout <<”AA”; else cout <<”BB”;
else if (y<-8) if (y>-20) cout <<”CC”; else cout <<”DD”;
A. AA B. BB C. CC D. DD
4. 一个函数功能不太复杂,但要求被频繁调用,选用
A. 内联函数 B. 重载函数 C. 递归函数 D. 嵌套函数
5. 假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ;”语句时,自动调用该类构造函数的次数为 。
A. 3 B. 4 C. 6 D. 9
6. 在公有继承的情况下,基类成员在派生类中的访问权限
A. 受限制 B. 保持不变 C. 受保护 D. 不受保护
7. 已知一函数的原型是:int f(int ,int =0,double =0.0);则下列函数中可以加以重载的是
A. int f(int); B. int f(int,int); C. f(int,int,double); D. f(int double);
8. 下列关于静态数据成员的描述中正确的是
A.静态数据成员是类的所有对象所共有的 B.静态数据成员要在构造函数内初始化
C.类的每个对象有自己的静态数据成员 D.静态数据成员不能通过类的对象调用
9. 派生类的构造函数的成员初始化列表中,不能包含
A.基类的构造函数。 B.派生类中对象成员的初始化。
C.基类中对象成员的初始化。 D.派生类中一般数据成员的初始化。
10. 关于虚析构函数的下述描述中, 是错误的。
A.基类中析构函数为虚析构函数,则派生类中的析构函数也为虚析构函数。
B.虚析构函数能保证delete运算符有效的释放基类及派生类对象。
C.将析构函数定义为虚析构函数是因为类中有虚函数。 D.虚析构函数并不能实现动态联编。
11. 一个_____ ____允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。
A.函数模板 B.模板函数 C.类模板 D.模板类
12. 通过 调用虚函数时,采用动态绑定。
A. 对象指针 B. 对象名 C. 成员名限定 D. 派生类名
13. 下列虚基类的说明中,正确的是___ ______ 。
A.class virtual B:public A B.class B:virtual public A
C.virtual class B:public A D.class B:public A virtual
14. 下面是关于一个类的友元的说法,其中不正确的是 。
A.友元函数可以访问该类的私有数据成员 B.友元的声明必须放在类的内部
C.友元函数可以是类的成员函数 D.类与类之间的友元关系不能被继承
15. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:
A. AB operator+(AB & a , AB & b) B. AB operator+(AB & a)
C. operator+(AB a) D. AB & operator+( )
Score
Marker
Checker
II. 填空题(每空2分,共20分)
1. 模板时构成 的基石。
2. C++的异常处理机制是通过关键词try、
和 实现的。
3. 一个 const 对象只能访问 __ ____ 成员函数。
4. 重载“<<”操作符时,应声明为 __ _____ 函数。
5. 利用应用程序向导AppWizard生成的单文档应用程序,一般包括四个基本类 、主框架窗口类、 和 。
6. Visual C++创建的基于MFC的应用程序可以分为单文档应用程序、
和 。
Score
Marker
Checker
III. 程序填空(每空2分,共20分)
1 int*[row]
2 int[column]
3 *(*(p+i)+j)
4 []p[i]
5 template <class T>
6 T
7 template <class T> T Base<T>::
8 complex &c1
9 real+c1.real,image+c1.image
10 complex &c1,complex &c2
1.动态分配一个二维数组,存放若干元素,并以指针的形式输出
#include <iostream.h>
const int row=3;
const int column = 3;
int main()
{ int **p;//二级指针
p = new int *[row] ;
for(int i=0;i<row;i++)
p[i]= new int[column] ;
for(i =0;i<row;i++)
for(int j=0;j<column;j++)
p[i][j]=i*j;
for(i=0;i<row;i++)
for(int j=0;j<column;j++)
cout<< *(*(p+i)+j) <<" ";
for(i=0;i<row;i++)
delete []p[i] ;
delete []p;
return 0;
}
2. #include <iostream.h>
template <class T>
class Base
{
public:
Base( T i, T j )
{ x = i; y = j; }
T sum();
private:
T x , y;
};
template <class T> T Base<T>:: sum() //sum函数的定义
{ return x + y; }
void main()
{
Base<double> obj2(3.3,5.5);
cout<< obj2.sum()<< endl;
Base<int> obj1(3,5);
cout<<obj1.sum()<< endl;
}
3.#include <iostream.h>
class complex
{
public:
complex(){real = image =0;}
complex(float a,float b)
{
real =a;
image = b;
}
complex operator+( complex &c1 ) //重载为成员函数
{
return complex( real+c1.real,image+c1.image );
}
friend complex operator-( complex &c1,complex &c2 ) //重载为友元函数
{
return complex(c1.real-c2.real,c1.image-c2.image);
}
private:
float real;
float image;
};
IV. 写出下列程序的运行结果(每题5分,共10分)
Score
Marker
Checker
1.#include <iostream.h>
class Test
{public:
Test()
{ a = 10;
cout<<"Test Constructor"<<endl;
}
~Test()
{cout<<"Test Destructor"<<endl;}
int a;
};
class Test1
{
public:
Test1(int x){a=x;cout<<"Test1 Constructor"<<endl;}
int a;
~Test1()
{cout<<"Test1 Destructor"<<endl;}
};
class Test2
{
public:
Test2(int x,int y):n(x),m(y){cout<<"Test2 Constructor"<<endl;}
void Display()
{
cout<<"n="<<n.a<<endl;
cout<<"m="<<m<<endl;
cout<<"t="<<t.a<<endl;
}
~Test2()
{cout<<"Test2 Destructor"<<endl;}
private:
int m;
Test1 n;
Test t;
};
int main()
{
Test2 t2(3,5);
t2.Display();
return 0;
}
2.#include <iostream.h>
class A0
{
public:
virtual ~A0()
{cout<<"Destructor Function A0::~A0 is called"<<endl;}
};
class B0:public A0
{
public:
virtual ~B0()
{cout<<"Destructor Function B0::~B0 is called"<<endl;}
};
class C0:public B0
{
char *pid;
public:
C0(int k)
{pid = new char[k];}
virtual ~C0()
{
delete []pid;
cout<<"Destructor Function C0::~C0() is called"<<endl;
}
};
void function(A0 *planta)
{delete planta;}
void main()
{
A0* planta = new C0(20);
function(planta);
}
Score
Marker
Checker
Ⅴ. 写程序 (6+14=20分)
1. 假设文件data.txt中存放有5个数据:9 20 2 -1 30,请用输入文件流打开该文件,读入数据到数组中存放,并用冒泡法进行排序,把排序后的结果分别输出到显示器屏幕和write.txt文件中。
2. 设计一个类point,表示二维坐标体系中的任意一点,把point类设计为基类,含有虚函数Area(),用来计算面积,在此基础上设计一个矩形类Rectangle。
要求用以下两种方法实现:
(1)Rectangle类使用point类作为它的数据成员,定义point类的两个坐标点作为矩形对角坐标,假设矩形是和坐标轴平行或垂直的,请在main函数中输出矩形的面积。
(2)Rectangle以point类作为基类,Rectangle类的数据成员仍然是两个对角的坐标点。假设矩形是和坐标轴平行或垂直的,请在main函数中用多态调用输出矩形的面积。
第 13 页 共 13 页
展开阅读全文