当前位置:首页 > 2007级计算机科学系程序设计a卷
中山大学计算机科学系2007级
计算机科学与技术专业、网络工程专业、信息安全专业(ABCDE班)
程序设计 A卷
学号 ____________ 姓名 ______________ 成绩______________
(试卷共6页,答案全写在答题纸上,交卷时连试卷一同交回) 考试形式:闭卷
任课老师:林瑛、肖菁、杨永红
2008-6
《中山大学授予学士学位工作细则》第六条:“考试作弊不授予学士学位。”
一、 单项选择(每小题1分,共15分) 1. C++源程序文件的扩展名为:
A) lik B) cpp 2. 如果函数A被声明为类B的友元,则: A) A不得访问类B的私有成员 C) A可以访问类B的私有成员
C) obj
D) exe
B) A是类B的成员函数 D) 类B的成员是A的友员
3. 关于虚函数的描述中,正确的是:
A) 派生类的虚函数与基类的同名虚函数具有不同的参数个数和类型 B) 虚函数是一个非成员函数
C) 虚函数是一个static类型的成员函数
D) 基类中说明了虚函数后,派生类中对同名函数的重定义时可不必说明为virtual,其虚特性保持不变 4. 在C++语言中,允许派生类可兼容基类类型,这是类型兼容性规则,但是这样的类型兼容性只适用
于:
A) 公有派生 B) 私有派生 C) 受保护派生 D) 所有类型的派生 5. 函数的引用性声明(函数原型)不包含哪一部分: A) 返回类型 B) 函数名称 C) 形式参数 6. 对以下声明的类A,sizeof(A)的值为: class A { static float std; float max, min; public: float fun(); }; A) 4 B) 8 C) 12
D) 函数体
D) 16
7. 要将一个局部变量的生存期扩展为全局的,则定义它时应加上修饰符: A) register B) extern C) static D) auto 8. 在C++中,什么类只能用作派生其他类的基类,而本身不能创建对象实例: A) 基类 B) 派生类 C) 虚基类 D) 抽象类 9. 友元运算符 @obj 被C++编译器解释为(@表示某种运算符,obj是其操作数): A) operator@(obj) B) operator@(obj,0) C) obj.operator@() D) obj.operator@(0)
1
10. 下列函数中,不能重载的是:
A) 构造函数 B) 析构函数 11. template
C) 非类成员的普通函数 D) 类的成员函数
根据上述语句,定义类模板APPLE的成员函数的正确格式是:
A) T APPLE
T APPLE
A) + :: << B) = >> /
C) + & []
D) + || !
13. 编译程序在对函数调用进行静态绑定时,根据以下因素决定调用哪一个函数,不正确的是: A) 函数类型 B) 函数名 C) 实际参数个数 D) 实参相应位置的类型 14. 在C++语言中,以下哪个表达式采用了八进制表示整型常量: A) k = 0123; B) k = 123; C) k = ’\\x23’; D) k = 0x123; 15. 类A中有一成员函数说明如下void A::Set(A & a); 其中A & a的含义是: A) 指向类A的指针为a
B) 将a的地址值赋给变量Set
C) a是类A的对象引用,用作函数Set()的形参 D) 变量A与a按位与作为函数Set()的参数
二、 程序改错(共20分)
1. 指出下列的程序片段的错误(每小题一个错),说明错误原因,并改正:
1) int how_to_do(int x = 0, int y = 0, int z, int w); 2) class CIRCLE {
public: CIRCLE(int x = 0, int y = 0, int radius = 1); ~CIRCLE(); int draw(); private: auto int radius; };
3) char *department = \
cout << \ delete department;
2. 阅读下面的程序,指出在哪些行上有语法错误(共2个错误),说明错误原因,并在不改动类数据成员的访问方式的前提下,改正错误:
1) #include
4) POINT(int x, int y): x(x), y(y) {} 5) int getX() { return x; } 6) int getY() { return y; } 7) void print()
8) { cout << \9) private: 10) int x = 0, y = 0; 11) }; 12) class LINE { 13) public:
2
14) LINE(int x0, int y0, int x1, int y1) 15) { start.x = x0; start.y = y0; 16) end.x = x1; end.y = y1; 17) } 18) POINT getStart() { return start; } 19) POINT getEnd() { return end; } 20) void print() 21) { cout << \start.print(); 22) cout << \ end.print(); 23) cout << \24) } 25) private: 26) POINT start, end; 27) }; 28) void main() 29) { LINE line(0, 0, 50, 50); 30) line.print(); 31) }
3. 阅读下面的程序,指出在哪些行上有语法错误(共3个错误),说明错误原因,并改正:
1) #include
5) void show(TYPE obj) 6) { cout << obj << \7) };
8) template
// pDerived指向obj对象
三、 程序填空(共16分,每空2分)
1. 在以下程序中,希望对成员函数void who()实现动态绑定,请填相应的语句
#include
class DERIVED:public BASE{ public: void who(){cout<<”Derivation\\n”;} };
void main()
{ ② *p; // 定义指针p DERIVED obj; ③ p->who(); // 此时调用的是DERIVED 类中定义的who() }
2. 要求执行下面的程序输出结果,请填写适当的语句: Calling special version, (10,20) Calling generic version, (A,B)
#include
template
TYPE max(TYPE k, TYPE t)
{ cout<< \ return ④ ; }
int max(int k, int t)
{ cout<< \ if (k>t) return k; else return t; }
// 上述两个max版本实现相同功能 void main()
{ ⑤ ; ⑥ ; }
3. 下面程序求正整数a和b之间的奇数之和。
#include
void SumOddEven (int a, int b, ⑦ ) { *odd = 0;
for(; a<=b; a++)
if (a%2) *odd+=a; }
void main()
{ int a, b, sodd;
Cout<<”请输入求和的范围[a,b]:” cin>>a>>b;
while (a<0||b<0||b-a<=10)
{ cout<<”a或b不是正整数,或者不满足b-a<=10的条件,请重新输入a和b的值:”; cin>>a>>b; }
SumOddEven(a, b, ⑧ );
cout< 四、 程序输出(共25分) 1. 给出以下程序的输出结果 #include cout << n << \ if (n < 2) result = 1; else result = fib(n - 1) + fib(n - 2); return result; } int main() { cout << fib(3) << \} 2. 给出以下程序的输出结果 #include class PERSON { public: PERSON(char* name = \ { strcpy(PERSON::name, name); cout << \ } PERSON(const PERSON& other) // 拷贝构造函数 { strcpy(name,other.name); salary = other.salary; cout << \ } 4
共分享92篇相关文档