浙江省高校计算机专业课程统考
《C++程序设计》
考 试 试 卷(2小时)
题类 得分 一 二 三 四 五 总分 学校: 学号: 姓名:
一、 单项选择题(30分,共15题,每小题2分)
1.如果struct中的所有成员在定义时都没有使用关键字public、private或protected,则所有成员缺省定义为____。
A) public B) protected C) private D) static 2. 类的析构函数的作用通常是____
A) 一般成员函数 B) 类的初始化 C) 对象的初始化 D)释放对象占用的资源(空间) 3. 语句 int *p[10]; 的含义是____ 。
A) p 是一个指向函数的指针变量。
B) p 是指针变量,指向一个整型数据 。 C) p 是一个指向一维数组的指针变量 。 D) p 是数组, 数组的元素是指针。
4.下列单词的缩写中,____被用来表示面向对象的编程。
A) OOA B) OBJ C) OOP D) OOT 5.执行完下列语句后,a的值为____。 b=1; b+=2; a=b++;
A) 2 B) 3 C) 4 D) 5
6. 若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字____放在函数原型或函数头的前面。
A) in B) inline C) online D) inliner
7.假定一个类的构造函数为“A(int aa=1, int bb=0) : a(aa), b(bb) { }”, 则执行“A x (2);”语句后,x.a和x.b的值分别为____。
A) 1和0 B) 1和2 C) 2和0 D) 2和1 8. 下列运算符中, ____运算符不能重载。
A) && B) [ ] C) :: D) new 9.拷贝(复制)构造函数的作用是____。
A) 进行数据类型的转换 B) 用对象调用成员函数 C) 用对象初始化对象 D) 用一般类型的数据初始化对象 10.已知类A中一个成员函数说明如下 : void Set (A &a);
其中, A &a的含义是 ____。
A) 指向类A的指针为a;
B) 将a的地址值赋给变量Set
C) a是类A的对象引用, 用来作函数Set()的参数 D) 变量A与a按位相与作为函数Set ()的参数
11. 在公有继承的情况下,基类成员在派生类中的访问权限____。
A) 受限制 B) 保持不变 C) 受保护 D) 不受保护 12. 在类中说明的成员可以使用关键字____进行修饰。
A) public B) extern C) cpu D) register
13. 假定一个类的构造函数为 A(int aa,int bb){a=aa++;b=a*bb++;} ,则执行 A x(2,3); 语句
第 1 页
浙江省高校计算机专业课程统考
后, x.a 和 x.b 的值分别为 ____ 。
A) 2 和 3 B) 3 和 2 C) 2 和 6 D) 3 和 12
14. 类的指针成员的初始化是通过函数完成的,这个函数通常是____。
A) 析构函数 B) 构造函数 C) 其它成员函数 D) 友元函数 15. 说明虚函数的关键字是 ____。 A) virtual B) class C) const D) static
二、是非判断题(10分,共5题,每小题2分)(请在题号上打√或X)
□ 1. 析构函数不能定义任何参数。
□ 2. 指针可以指向数据对象,也可以指向函数。
□ 3. 类的静态数据成员需要在定义每个类的对象时进行初始化。 □ 4. 在C++中,如果函数无返回值,则返回值类型说明为void。 □ 5. 建立派生类对象会调用基类构造函数。
三、读程序,写运行结果(30分)
1. (7分)
#include
void AA::Print () { cout <
void main () { AA *a1, *a2; a1 = new AA (1,2); a2 = new AA (3, 4); a1->Print (); a2->Print (); delete a1; delete a2; }
2. (7分)
#include
}
B () {}
virtual void show () {
第 2 页
浙江省高校计算机专业课程统考
cout <<”B::show() called.”<
protected : int b; }; class D:public B { public : D (int i):B(i) {d = i + 2; show ();}
D () {}
void show () { cout <<”D::show () called.”< void main () { D d1 (30); } 3. (8分) #include Tclass (T a,T b) : x(a) {y=b;} Tclass (T a) {y=(T)0, x=a;} void pr( ){ char c; c=(y>=(T)0 ? ′+′: ′-′); cout< void main( ){ Tclass Tclass 4. (8分) #include public : CTest () { m_id = m_count ++; cout << “Constructor” << m_id << endl; } ~CTest () { cout << “Destructor” << m_id << endl; } 第 3 页 浙江省高校计算机专业课程统考 static int GetCount () { return m_count; } private : int m_id; static int m_count; }; int CTest::m_count = 0; void FunA (); CTest *FunB (); void FunA () { CTest x, *p; p = FunB (); delete p; } CTest *FunB () { CTest t, *p; p = new CTest; if (CTest::GetCount () > 3) throw 1; return p; } void main () { CTest t; try { while (1) FunA (); } catch (int no) { cout << “Catch Exception” << no << endl; } cout << “Count : “ << CTest::GetCount () << endl; } 四、填空题(10分,共5空,每小空2分) 1.完成点距离Distance函数的定义。 #include private: double X,Y; public: Point(double x=0, double y=0) {X=x;Y=y;} void Move(double x, double y) { X=x; Y=y; } friend double Distance(Point &p1, Point &p2); //计算两点间距 }; double Distance(_________①__________) { double dx = _________②________; double dy = p1.y-p2.y; return sqrt(dx*dx+dy*dy); } void main() { 第 4 页 浙江省高校计算机专业课程统考 Point a(1,1); Point b(a); b.Move(4,5); cout << Distance(a,b) << endl; } 2.类fraction(分数)的定义,其中重载的运算符<<以分数形式输出结果,例如将三分之二输出为2/3。 class fraction{ int den; //分子 int num; //分母 _________①__________ ostream& operator<<(ostream&,fraction); ? }; ostream& operator <<(ostream& os,fraction fr){ _________②________; return _________③_________; } 五、设计题(20分,共4题,每题10分,选2题做) 1. 声明一个立方体Cube 类,属性为其长 itsLength 、宽itsWidth和高度 itsHeight,请在类中提供计算立方体表面积与体积的方法,实现并测试这个类. 2. 下面是测试字符串类CString的一个程序和输出结果, 请设计并实现符合本例要求的CString类。 #include CString s1 (“C++ ”), s2 (“Program”); CString s3; s3 = s1 + s2; CString s4 (s3); s4 [1] = ‘# ’; s4 [2] = ‘ ’; //空格字符 cout << s3 << endl; cout < 输出结果 : C++ Program C# Program 3.下面是一个使用矩阵类CMatrix的程序实例及结果,请设计并完成矩阵类 (10分) #include int main () { int m = 3, n = 4; CMatrix A (m, n); int i, j; for (i = 0; i < m ;i ++) { for (j = 0; j < n; j ++) A.ElementAt (i, j) = i * n+ j + 1; 第 5 页 浙江省高校计算机专业课程统考 } A.Display (); CMatrix B = A.Rotate ();//旋转 B.Display (); return 0; } 执行结果 : 1 2 3 4 5 6 7 8 9 10 11 12 1 5 9 2 6 10 3 7 11 4 8 12 4.编写程序, 输入一个十进制正整数,输出其各位数之和. 例: 程序如果输入1235679, 应该输出33. 第 6 页