《2022年面向对象设计试卷 .pdf》由会员分享,可在线阅读,更多相关《2022年面向对象设计试卷 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 面向对象程序设计试题 (8) 题 号一二三四五六七总 分12 18 18 18 12 6 16 100 得 分一,单项选择题(每小题1分,共12分) 1. 在函数的引用调用时,实参和形参应该是使用() 。A变量值和变量 B地址值和指针C地址值和引用 D变量值和引用2以下关于文件操作的叙述中,不正确的是() 。A打开文件的目的是使文件对象与磁盘文件建立联系B 关闭文件的目的之一是释放内存中的文件对象C关闭文件的目的之一是保证将输出的数据写入硬盘文件D文件读写过程中,程序将直接与磁盘文件进行数据交换3. 若有语句int a10=0,1,2,3,4,5,6,7,8,9,*p=a;则 ( )不是对
2、 a 数组元素的正确引用(其中0i10 ) 。Api B*(*(a+i) Cap-a D*(&ai) 4. 下列是构造函数的特点,()是错误的。A构造函数是一种成员函数,它具有一般成员函数的特点B构造函数的名称与其类名相同C构造函数必须指明其类型D一个类中可定义一个或多个构造函数5. 关于友元函数的描述中,()是错的。A 友元函数是成员函数,它被说明在类体内B 友元函数可直接访问类中的私有成员C 友元函数破坏封装性,使用时尽量少用D 友元类中的所有成员函数都是友元函数6. 下列对派生类的描述中,()是错误的。A 一个派生类可以作为另一个派生类的基类B 派生类至少应有一个基类C 基类中成员访问权
3、限继承到派生类中都保持不变D 派生类的成员除了自已定义的成员外,还包含了它的基类成员7. C+ 类体系中,能被派生类继承的有() 。A构造函数 B虚函数 C友元函数 D析构函数8关于下列虚函数的描述中,()是正确的。A基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数B虚函数是一个static存储类的成员函数C虚函数是一个非成员函数D派生类的虚函数与基类的虚函数应具有不同的类型或个数9. 以下有关静态数据成员函数的叙述不正确的是() 。A静态成员函数属于整个类B对静态成员函数的引用不允许使用对象名名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
4、- - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 2 C在静态成员函数中不能直接引用类的非静态成员D使用类名可以直接调用其静态成员函数10. 下列有关运算符重载的描述中,()是正确的。A运算符重载可改变其优先级 B运算符重载不改变其语法结构C运算符重载可改变其结合性 D运算符重载可改变其操作数的个数11. 对 new 运算符的下列描述中,( )是错误的。A. 用它创建对象数组时必须指定初始值B. 它可以动态创建对象和对象数组C. 用它创建对象时要调用构造函数D. 用它创建的对象可以使用运算符delete来释放12.
5、下列有关类的说法不正确的是( )。A 对象是类的一个实例B 任何一个对象只能属于一个具体的类C 类与对象的关系和数据类型与变量的关系相似D 一个类只能有一个对象二填空题 ( 每空 1 分,共 18 分) 1若有函数调用语句 fun(a+b,(y=9,x),37),则其实参的个数是。2已知字母a 的 ASCII 码为十进制数97,ch 为字符变量,则ch=a+ 8- 5的值为。3. 设: int a5=10,20,30,40,50;int *p=&a0;表达式 +*p+*(a+3) 的值是。4若有宏定义: #define T(x,y,z) x*y*z/4 coutT(3+4,2*4,4+4)en
6、dl; 上述程序段运行结果为。5 “判断整数a 是否在闭区间 -10 ,10 之中”的C+语言表达式是。6设有代码“ static int a34=1,2, 0, 4,6,8,10;”则 a12值为。7假定所有变量均已正确定义,下列程序段运行后x 的值是。 a = b = c = 14; x = 35; if(!a)x-;else if(b);if(c)x = 3;else x = 4; 8类的成员函数可以在定义,也可以在定义。9如类中没有明确定义析构函数,清除对象的工作来完成,原因是。10生成一个派生类对象时,先调用的构造函数,然后调用的构造函数。11在继承关系中,称为多重继承,称为单继承。
7、12 若 在I/O流 的输 出 中使 用 控 制符setfill( ) 设 置 填充 字 符, 应 包含 的 头文 件是。13在私有继承关系下,基类的公有成员和保护成员将成为派生类中的成员, 它们只能由来访问。三、程序填充。对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 3 程序下面相应标号的后面(每小题6 分, 3 小题,共18 分)1有一个一维数组,存放 10
8、 个职工的年龄, 别写两个函数求职工的最大年龄和最小年龄。#include void max_age(int arr ); (1)int max , min; void main( ) int i; int array10; coutinput 10 data:; for(i=0;iarrayi; max_age(array); min_age(array); coutmax_age is :maxendl; /使用全局变量max coutmin_age is :minendl; /使用全局变量min void max_age(int arr ) int j; max=arr0; /使用全局变
9、量max for(j=1;j10;j+) if ( (2) max=arrj; /使用全局变量max void min_age(int arr ) int k; min=arr0; /使用全局变量min for(k=1;karrk) (3); /使用全局变量min (1) (2) (3) 2. class A int a,b; public: _(1)_ /定义构造函数,使参数aa 和 bb 的默认值为0, /在函数体中用aa 初始化 a,用 bb 初始化 b ; main() A *p1, *p2; _(2)_ ; /调用无参构造函数生成由p1 指向的动态对象 _(3)_ ; /调用带参构造
10、函数生成由p2 指向的动态对象,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 4 /使 a 和 b 成员分别被初始化为4 和 5 (1) (2) (3) 3下列程序将结构体变量tt中的内容写入D盘上的 date.txt文件。#include #include struct date int year,month,day; void main() date tt=2002,2,12; ofstream ; outdate.ope
11、n(d:date.txt,ios:binary); if ( (1) ) cerr n D:write1.dat not open endl ; exit (-1) ; outdate.write( (2) ,sizeof(tt); (3) ; (1) (2) (3) 四、写出程序运行结果(每小题6 分, 3 小题,共 18 分)1. #include void main() int i,a=1,2,3,4,5,6,7,8,*p=a; for (i=1;i5;i+) pi=ai-1+ai+1; couta3endl; 2. class mystr char string81;int len;
12、public: mystr(char *s)strcpy(string,s); void getvalue(char *s,int &n) strcpy(s,string); n=len; friend mystr operator+(mystr a,mystr b) mystr c( ); strcpy(c.string,a.string); strcat(c.string,b.string); c.len=strlen(c.string); return c; ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
13、 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 5 void main() char st81; int l; mystr a(Hello ),b(everybody!),c( ); c=a+b; c.getvalue(st,l); cout stendlLen=lendl; 3#include class base public: virtual void show() coutclass base show() is called.n; ; class derived:public base public: void show() coutshow
14、(); void main() base demo1; derived demo2; display(&demo1); display(&demo2); 五、指出程序、函数(类中函数)的功能(每小题6 分, 2 小题,共12 分) ;1. #include #include void change(char *a ) int i=0; for(i=0; ai!= 0 ;i+) if(ai=a&ai=z) ai= ai 32 ; void main() char p80; cout n; cin.getline(p,80) ; /读一行字符,中间可以有空格change(p); coutpendl
15、; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 6 2.#include class complex public: complex(double r=0.0,double i=0.0) real=r,imag=i; complex operator +(complex c2); complex operator - (complex c2); void display(); private: double real; do
16、uble imag; ; complex complex:operator + (complex c2) return complex(real + c2.real,imag + c2.imag); complex complex:operator - (complex c2) return complex(real - c2.real,imag - c2.imag); void complex:display() cout(real,imag)endl; 六、程序改错。请根据程序段或函数模块的功能改写个别地方的错误(每小题6 分,共6分) 。函数 find功能是:在指针p 所指数组中,查找值
17、为x 的元素,找到后,返回该元素的下标,否则返回-1 ,改正程序中语句错误,能够正确运行。#include #include const int N=10; int find(int *p,int n,int x) /1 int I ; / 2 *(p+n)=x; /3 while(*p+i!=x) /4 i+; /5 if(i!=n) /6 return 1 /7 else /8 return -1; /9 void main() int i,pos,x; int *p=new int N; for(i=0;iN;i+) *(p+i)=rand()%50; for(i=0;iN;i+) co
18、ut*(p+i)t; coutx; pos=find(p,N,x); if(pos!=-1)coutindex= pos ,value= *(p+pos)endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 7 else coutNo find!endl; 七、编程题(每小题6分,共12分) 1声明一个哺乳动物Mammal类,再由此派生出狗Dog 类,声明一个Dog 类的对象,观察基类与派生类的构造函数与析构函数的调用顺序
19、。2 声明一个Shape 抽象类,在此基础上派生出Rectangle和 Circle类, 二者都有 GetArea( )函数计算对象的面积,GetPerim( )函数计算对象的周长。#include #include class shape public: virtual void getarea()=0; ; void show(shape *p) p-getarea(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 8
20、面向对象程序设计8 试题答案及评分标准(供参考 ) 一、单项选择题(每小题 1 分,共 12 分) 1D 2D 3B 4C 5A 6C 7B 8A 9C 10B 11A 12D 二、填空题 (每空 1 分,共 18 分)1.3 2.d 3.51 4. 132 5. a=-10&a=10 6. 0 7. 3 8. 类体内类体外9. 仍由析构函数编译器自动提供缺省析构函数10基类派生类11. 一个派生类同时继承自多个基类的情形一个 派生 类继 承自 一个 基类 的情形12.iomanip.h 13. 私有派生类的成员函数三、程序填充题,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内客填
21、写到程序后面的标号处。(每小题 6 分,共 18 分) 评分标准:每空2 分1(1) a=new intMaxLen (2) return ai; (3) s+=r.GetValue(i) 2. (1) A(int aa=0, int bb=0)a=aa; b=bb; (2) p1=new A (3) p2= new A(4,5) 3(1) ! file1 (2)(char *) &tt (3) file1.close ; 四、写出程序运行结果(每小题6 分, 3 小题,共18 分1运行结果: 13 2.运行结果: Hello everybody! Len=16 3.运行结果: class b
22、ase show() is called. class derived show() is called. 五、指出程序或函数的功能(每小题6 分, 2 小题,共 12 分) ;1. 函数 change 的功能是,将字符串中的小写字母转成大写字母。2.定义一个复数类,重载+、-法,对复数运算成立。六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误(6 分)第 2、4、7 语句错2 行语句改为int i=0; 4 行语句改为while(*(p+i)!=x); 7 行语句改为return i 。七、编程题 (每小题 6 分,共 12 分) 评分标准:按编程完整程度酌情给分。1声明一个哺乳
23、动物Mammal类,再由此派生出狗Dog 类,声明一个Dog 类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。#include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 2 class Mammal public: Mammal() coutcall Mammalendl; Mammal() coutDelete base classendl; ; class Dog :public Mammal public:
24、 Dog() coutcall Dogn; Dog() coutDelete Dog classn; ; void main() Dog b; 2 声明一个Shape 抽象类,在此基础上派生出Rectangle和 Circle类, 二者都有 GetArea( )函数计算对象的面积,GetPerim( )函数计算对象的周长。#include #include class shape public: virtual void getarea()=0; class rectangle:public shape int a,b,c; double s,p; public: rectangle(int
25、a1,int b1,int c1) a=a1;b=b1;c=c1; void getarea() p=(a+b+c)/2.0; s=sqrt(p*(p-a)*(p-b)*(p-c); cout面积sendl; ; class circle :public shape float r,s; public: circle(float r1) r=r1; void getarea() s=r*r*3.1415926; cout 面积sgetarea(); void main() shape *p; rectangle a(3,4,5); circle b(10); p=&a; show(p); p=&b; show(p); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -