您的当前位置:首页正文

C08A

2021-10-18 来源:钮旅网


东华大学2008----2009学年 第 1 学期期终试题

踏实学习,弘扬正气;诚信做人,诚实考试;作弊可耻,后果自负。 课程名称 面向对象程序设计C++ (A) 使用专业 07电气信息 班级_____________________姓名________________学号__________ 试题得分 一 二 三 四 五 六 七 八 九 十 总分 一、填空题(20分)

1.语句cout<<0123输出结果为 。 2.continue语句只能用在 内。

3.友元函数被说明在类体内,它可以访问该类中的 成员。 4.若要将某类类型转换成double类型,则相应的类型转换函数的名称为 。

5.C++语言中的 运算符相当于C语言中的free()函数。

6.C++有三个重要机制,第一重要机制为数据封装,另外两个重要机制分别 为 和 。

7.设a和b分别为类A和类B的对象,则赋值语句a=b成立的条件是,类B是类A的 。

8.除支配规则和成员名限定法外,还可以用 方法避免多继承情况下

出现的二义性。

9.使用关键字class定义的类中缺省的访问权限为 。

二、选择题(请在正确答案上打上○) (20分)

1.执行语句int a[5]={1,3,5}之后,数组元素a[4]的值是多少? A. 5 B. 3 C.1 D.0

2.联合成员的地址值和所占的字节数 。 A.都相同 B.都不相同

C.前者相同,后者不同 D.前者不同,后者相同

3.下列do-while循环的循环次数是多少? int i(5);

do { cout<A.无限 B.0 C.1 D.5

1

出题人(签名)___________

室负责人(签名)_________

4.下列关于函数模板和模板函数的描述中,哪个是错误的? A.函数模板是一组函数的样板;

B.模板函数在编译时不生成可执行代码; C.函数模板是定义重载函数的一种工具; D.模板函数是函数模板的一个实例。

5.下列哪个不是成员函数?

A.静态成员函数 B.友元函数 C.构造函数 D.析构函数

6.下列关于析构函数的描述中,哪个是正确的? A. 析构函数是一种函数体为空的成员函数; B. 析构函数不能被重载; C. 析构函数可以有多个参数;

D. 析构函数的定义只能在类体内。

7.已知f1( )是类A的公有成员函数,p是指向成员函数f1( )的指针,下列哪个赋

值语句是正确的?

A.p=A::f1 B.p=f1 C.p=A::f1() D.p=f1()

8.派生类的构造函数的成员初始化列表中,下列哪个不能被包含? A.基类的构造函数;

B.派生类中子对象的初始化; C.全局变量的初始化;

D.派生类中一般数据成员的初始化。

9.关于虚函数的描述中,下列哪个是正确的? A.虚函数是void类型的成员函数; B.虚函数是一种特殊的友元函数;

C.与派生类虚函数对应的基类虚函数可以有不同的参数个数和类型;

D.基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数。

10.下列关于运算符重载的描述中,下列哪个是正确的? A.运算符重载可以改变操作数的个数; B.运算符重载可以改变优先级; C.运算符重载不可以改变语法结构; D.运算符重载可以改变结合性。

2

三、试编写一个从n个元素 (假设它们被存放在一个数组中) 挑选一个最小元素的函数模板。(10分)

四、编写一程序,从一个字符串中挑选一个在该字符串中出现频率最高的字符,并输出该字符及其出现的频率,如字符串“excellent”对应的输出应为“e, 3”。(10分)

3

五、编写一程序,打印输出999以内的水仙花数。所谓水仙花数是指它的每位数字

的立方之和等于它自身,即满足xyz=x3+y3+z3,如153=13+53+33 。(10分)

4

六、下面是一个被用来实现复数加和减运算的类,但留有一些空白。请按照类和函数定义的要求在空白处填上恰当的代码。(5分) class complex { public:

complex (double r=0,double i=0){ real=r; imag=i;}

complex operator + (const complex & c1,const complex &c2); complex operator - (const complex & c); void print() const

{ cout <double real,imag; };

(const complex & c1,const complex &c2) {

return complex(c1.real+c2.real,c1.imag+c2.imag); }

(const complex & c) {

return complex(real-c.real, imag-c.imag); }

void main() {

complex c1(1,2),c2(3,4),c3(5,6); c3=c1-c2+c3; c3.print(); }

七、找出下列程序中的错误,并注明出错类型。(5分) #include const int x=5; class A { public:

~A(int i){ cout<<\"~A\"; } private: int x; };

enum color{RED, BLUE, GREEN}; void main() { int a[3]; a[3]=5; x=5;

5

enum color c; c=1; A b; b.x=5; }

八、分析下列程序,并回答后面的问题。(10分) 程序内容如下:

#include class A { public:

A(int i=0, int j=0){ a=i; b=j;} virtual void Print() {

cout<<\"A:\"<protected: int a,b; };

class B: public A { public: B(int i=0, int j=0): A(i,j){} void Print() { cout<<\"B:\"<6

void fun(A &a) { a.Print();}

void main()

{ A a(2008,12); B b(12,25);

A &c=b; A d=b;

fun(a); fun(b); fun(c); fun(d); c.Print(); }

请回答下列问题:

(1)执行该程序后,输出结果是什么?

(2)去掉virtual void Print( )中的关键字virtual后,该程序的输出结果是什么? (3)将fun(A &a)改成fun(A a)后,该程序的输出结果又是什么?

7

九、分析下列程序,写出执行结果。(10分) #include class dot { public:

dot(int i,int j){ x=i; y=j; cout<<\"dot:x=\"<~dot(){ cout<<\"~dot:x=\"<class line: virtual public dot { public:

line(int i, int j,int k, int m): dot(i,j),p(k,m){ cout<<\"line end\\n\";

} dot p; };

class circle: virtual public dot { public:

circle(int i, int j,int k): dot(i,j){ R=k; cout<<\"circle R=\"<} int R; };

class curve: public line, public circle { public:

curve(int i, int j, int k, int m, int n): circle(m,m,k), line(k,k,m,n), dot(i,j){ };

~curve(){ cout<<\"~curve R=\"<void move(circle & c) { c.x+=10; c.y+=100; } void main()

{ curve cu(1,2,3,4,5); circle d=circle(6,7,8); move(d); }

8

9

因篇幅问题不能全部显示,请点此查看更多更全内容