面向对象程序设计网上教学活动文本.doc_第1页
面向对象程序设计网上教学活动文本.doc_第2页
面向对象程序设计网上教学活动文本.doc_第3页
面向对象程序设计网上教学活动文本.doc_第4页
面向对象程序设计网上教学活动文本.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计网上教学活动文本(2004.10.20)唐龙:同学们现在开始答疑,请大家提问。 问:怎样学好这门课程? 唐龙:最简单一句话说是:在初步理解主要基本概念的基础上多上机实践。 问:在C+进行程序开发时,遇到大批量的数据需要处理时,是用函数还是结构链,是不是还有其它的办法? 唐龙:这不能一概而论,要看所处理的是什么数据,有什么处理要求,先要选择采用合理的数据结构和算法,才可能开发出适用的程序。 问:我们怎样才能考好这门课程?它的考试题型有哪些? 徐孝凯:1.认真听好老师的面授辅导课;2.认真按照实验教材的要求做好每个实验;3.认真做好形成性作业;4.到期末复习阶段,按照实验教材的附录中所给的综合练习题反复做好练习。5.参考以前考过的试卷,题型基本不变。 问:面向对象程序设计的重点内容? 唐龙:本课程着重对C+语言的基本概念和语法规则理解,掌握其使用方法,进而初步学会运用于实际编程。最重要的基本概念,例如,类与对象,继承,重载等一定要清楚理解,并学会在简单的编程应用。 徐孝凯:往届试卷,供同学们复习时参考中央广播电视大学计算机科学与技术专业面向对象程序设计试题(3)2003年8月题 号一二三四五六七总 分得 分一、单项选择(每小题1分,共12分) 1设x和y均为bool量,则x | y为假的条件是( )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假 2. 假定一个二维数组的定义语句为“int a34=3,4,2,8,6;”,则元素a12的值为( )。 A. 2 B. 4 C. 6 D. 8 3. 以下错误的描述是( )。 函数调用可以 A. 出现在一个表达式中 B. 出现在执行语句中 C. 作为一个函数的实参 D. 作为一个函数的形参 4. 关于局部变量,下面说法正确的是( )。 A. 定义该变量的程序文件中的函数都可以访问 B. 定义该变量的函数中的定义处以下的任何语句都可以访问 C. 定义该变量的复合语句中的定义处以下的任何语句都可以访问 D. 定义该变量的函数中的定义处以上的任何语句都可以访问 5. 假定p是具有int*类型的指针变量,则给p赋值的正确语句为( )。 A. p=new int; B. p=new int*; C. p=new int*; D. p=new int10; 6. 软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的( )。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 7. 若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( )放在函数原型或函数头的前面。 A. in B. inline C. inLine D. InLiner 8. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为( )。 A. length+1 B. first+length C. (first+length-1)%MS D. (first+length)%MS 9. 假定一个类的构造函数为 “A(int aa, int bb) a=aa; b=aa*bb;”,则执行 “A x(4,5);”语句后,x.a和x.b的值分别为( )。 A. 4和5 B. 5和4 C. 4和20 D. 20和5 10. 假定AB为一个类,则执行“AB *p=new AB(1,2);”语句时共调用该类构造函数的次数为( )。 A. 0 B. 1 C. 2 D. 3 11. 一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明( )。 A. 需加上类域的限定 B. 不需加上类域的限定 C. 类域的限定可加可不加 D. 不需要任何限定 12. 关于插入运算符的重载,下列说法不正确的是( )。 A. 运算符函数的返回值类型是ostream & 。 B. 重载的运算符必须定义为类的成员函数。 C. 运算符函数的第一个参数的类型是ostream & 。 D. 运算符函数有两个参数。二、填空(每空1分,共14分) 1. 当执行cout语句输出endl数据项时,将使C+显示输出屏幕上的光标从当前位置移动到_的开始位置。 2. 假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为_和_。 3. 执行switch语句时,在进行作为条件的表达式求值后,将从某个匹配的标号位置起向下执行,当碰到下一个标号位置时_执行。 4. strlen(”apple”)的值为_,strcmp(”a”,”A”)的值为_。 5. C+程序运行时的内存空间可以分成全局数据区,堆区,栈区和_区。 6假定a是一个一维指针数组,则a+i所指对象的地址比a大_字节。 7. 已知语句“coutp;”的输出是“Hello!”,则语句“cout*p;”输出的是_。 8. 如果一个派生类只有一个唯一的基类,则这样的继承关系称为_。 9假定AA是一个类,“AA* abc()const;”是该类中一个成员函数的原型,在该函数体中_向*this或其成员赋值。 10假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为_。 11假定用户为类AB定义了一个构造函数AB(int aa) a=aa;,该构造函数实现对数据成员_的初始化。 12. 作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有_个操作数。三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面(每小题6分,共24分) 1. 下面程序计算出的值。 #include void main() double x,p1=1,p2=1,s=0; int i,j=1; coutx; for(i=1;i=10;i+) p1*=_(1)_; p2*=_(2)_; s+=j*p1/p2; /j的值为(-1)i+1 j=_(3)_; coutsendl; (1) (2) (3) 2. 假定有定义为“struct NODEint data; NODE* next;”,下面算法是依次显示输出以L为表头指针的链表中各结点的值。void ff(NODE* L) for(_(1)_; p!=NULL; _(2)_) cout_(3)_ ; coutnext=_(2)_; p=t; _(3)_;(1) (2) (3) 4. 已知一个利用数组实现栈的类定义如下:const int ARRAY_SIZE=10;class Stack public:void Init() top=-1; /初始化栈为空 void Push(int newElem); /向栈中压入一个元素int Pop(); /从栈顶弹出一个元素bool Empty() /判栈空 if(top=-1) return true;else return false;int Depth() return top+1; /返回栈的深度void Print(); /按照后进先出原则依次输出栈中每个元素,直到栈空为止private:int elemARRAY_SIZE; /用于保存堆栈元素的数组int top; /指明栈顶元素位置的指针; 该类的Pop和Print函数的实现分别如下:_(1)_ if(top=-1) cout栈空!endl;exit(1); /中止运行return _(2)_;void Stack:Print() while(!Empty() cout_(3)_ ; coutendl; (1) (2) (3)四、写出程序运行结果(每小题8分,共16分) 1. #include int a8=36,25,20,43,12,70,66,35; void main() int s0,s1,s2; s0=s1=s2=0; for(int i=0; i8; i+) switch(ai%3) case 0: s0+=ai;break; case 1: s1+=ai;break; case 2: s2+=ai;break; couts0 s1 s2endl; 2#include #include class CD char* a; int b; public: void Init(char* aa, int bb) a=new charstrlen(aa)+1; strcpy(a,aa); b=bb; char* Geta() return a; int Getb() return b; void Output() couta bendl; ;void main() CD dx,dy; char a20; dx.Init(abcdef,30); strcpy(a,dx.Geta(); strcat(a,xyz); dy.Init(a,dx.Getb()+20); dx.Output(); dy.Output();五、指出程序或函数的功能(每小题6分,共12分) 1. #include #include #include void main() int i=10,a; while(i0) a=rand()%90+10; int j, k=int(sqrt(a)+1e-5); /sqrt(x)为求x的平方根函数 for(j=2; jk) couta ; i-; 2. void Input(IntNode*& f) int n; coutn; while(n0); if(n=0) f=NULL; return; f=new IntNode; IntNode* p=f; cout”从键盘输入”nnext=new IntNode; cinp-data; p-next =NULL; p=f; f=f-next; delete p; 假定IntNode的类型定义为: struct IntNode int data; /结点值域 IntNode* next; /结点指针域 ;六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误(6分)。 假定要求下面程序的输出结果为“11/15”,其主函数中存在着三行语句错误,请指出错误语句行的行号并改正错误行。 #include class Franction /定义分数类 int nume; /定义分子 int deno; /定义分母 public: /把*this化简为最简分数,具体定义在另外文件中实现void FranSimp(); /返回两个分数*this和x之和,具体定义在另外文件中实现Franction FranAdd(const Franction& x); /置分数的分子和分母分别0和1 void InitFranction() nume=0; deno=1; /置分数的分子和分母分别n和d void InitFranction(int n, int d) nume=n; deno=d; /输出一个分数void FranOutput() coutnume/denoendl; ;void main() /1行 /2行 Franction a,b,c; /3行 a.InitFranction(6,15); /4行 b.InitFranction(1); /5行 c.InitFranction(); /6行 c=FranAdd(a,b); /7行 coutc.nume/c.denoendl; /8行 /9行错误行的行号为_、_和_。分别改正为_、_和_。七、编程(每小题8分,共16分) 1. 计算1+3+32+.+310的值并输出,假定分别用i,p,s作为循环变量、累乘变量和累加变量的标识符。 2. 根据下面类中Uion 函数的原型和注释写出它的类外定义。class Array int *a; /指向动态分配的整型数组空间int n; /记录数组长度public:Array(int aa, int nn); /构造函数,利用aa数组长度nn初始化n, /利用aa数组初始化a所指向的数组空间Array(Array& aa); /拷贝构造函数Array& Give(Array& aa); /实现aa赋值给*this的功能并返回*thisArray Uion(Array& aa); /实现*this和aa中的数组合并的功能,把合并 /结果(其长度为两数组长度之和)存入临时对象并返回int Lenth() return n; /返回数组长度void Print() /输出数组for(int i=0; in; i+)coutai ; coutnext /2分(3) p-data /2分3(1) q-next /2分(2) p /2分(3) return p /2分4.(a) int Stack:Pop() /2分(b) elemtop- /2分(c) Pop() /2分四、写出程序运行结果(每小题8分,共16分)1. 114 138 55 /每个数据占3分,全对给8分2.abcdef 30 /4分,每个数据2分abcdefxyz 50 /4分,每个数据2分五、指出程序或函数的功能(每小题6分,共12分)1随机产生出10个10至100(或99)之间的素数并显示出来。2首先从键盘上输入一个整数给n,然后依次输入n个整数建立以表头指针为f的链表。评分标准:根据叙述情况酌情给分。六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误(6分)。错误行的行号为5 7 8 分别改正为b.InitFranction(1,3); c=a.FranAdd(b); c.FranOutput()评分标准:共6个数据,每个数据1分。七、编程(每小题8分,共16分)评分标准:根据编程情况酌情给分。 1. #include void main() int i; /用i作为循环变量 int p=1; /用p作为累乘变量 int s=1; /用s作为累加循环变量 for(i=1;i=10;i+) p*=3; s+=p; coutsendl; 2.Array Array:Uion(Array& aa) int k=n+aa.n; int* w=new intk; int i; for(i=0; in; i+) wi=ai; for(i=0; iaa.n; i+) wi+n=aa.ai; Array r(w,k); return r;中央广播电视大学计算机科学与技术专业面向对象程序设计试题(4)2003年8月题 号一二三四五六七总 分得 分一、单项选择(每小题1分,共13分) 1. 字符串”a+b=12n”的长度为( )。 A. 6 B. 7 C. 8 D. 9 2. 假定一个二维数组的定义语句为“int a34=3,4,2,8,6;”,则元素a21的值为( )。 A. 0 B. 4 C. 8 D. 6 3. 以下正确的描述是( )。 A. 函数的定义可以嵌套,函数的调用不可以嵌套 B. 函数的定义不可以嵌套,函数的调用可以嵌套 C. 函数的定义和函数的调用均可以嵌套 D. 函数的定义和函数的调用均不可以嵌套 4. 设有定义“double array10;”,则表达式sizeof(array)/sizeof(array0)的结果为( )。 A. array数组首地址 B. array数组中元素个数 C. array数组中每个元素所占的字节数 D. array数组占的总字节数 5. 要使p指向动态空间中的包含30个整数单元的数组使用的定义语句为( )。 A. int *p=new int30; B. int *p=new int(30); C. int *p=new 30; D. *p=new int30; 6. 软件产品与其他软件产品组合成一个整体的难易程度叫做软件的( )。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 7. 在多文件结构的程序中,通常把类的定义单独存放于( )中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件 8. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队首的后一个位置为( )。 A. first+1 B. (first+1)%MS C. (first-1)%MS D. (first+length)%MS 9. 假定一个类的构造函数为“A(int aa=1, int bb=0) a=aa; b=bb;”,则执行“A x(4);”语句后,x.a和x.b的值分别为( )。 A. 1和0 B. 1和4 C. 4和1 D. 4和0 10. 假定AB为一个类,则执行“AB a(2), b3, *p4;”语句时共调用该类构造函数的次数为( )。 A. 3 B. 4 C. 5 D. 9 11. 在成员函数中进行双目运算符重载时,其参数表中应带有( )个参数。 A. 0 B. 1 C. 2 D. 3 12. 在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是( )。 A. 该运算符是一个单目运算符。 B. 该运算符函数有一个隐含的参数this。 C. 该运算符函数是类的成员函数。 D. 该运算符函数是类的友元函数。 13. 派生类的对象对其基类中( )可直接访问。 A. 公有继承的公有成员 B. 公有继承的私有成员 C. 公有继承的保护成员 D. 私有继承的公有成员二、填空(每空1分,共17分) 1. 多行注释的开始标记符和结束标记符分别为_和_。 2. 假定x=5,y=6,则表达式x+*+y的值为_。 3. 假定x是一个逻辑量,则x & true的值为_。 4. 含随机函数的表达式rand()%20的值在_至_区间内。 5. 若需要把一个字符串”aaa”赋值到字符数组a中,则需要执行_字符串函数的调用来实现。 6. 程序的编译是以_为单位进行的。 7. 一个数组的数组名实际上是指向该数组的_元素的指针,并且在任何时候都不允许_它。 8. 指针变量pv和pc定义为“void *pv =”Hello, word!”; char *pc;”,要将pv值赋给pc,则正确的赋值语句是_。 9. C+支持两种多态性:_时的多态性和_时的多态性。 10在一个用数组实现的队列类中,除了保存队列元素的叔祖成员外,还包含有两个数据成员,一个指明队首元素位置,另一个指明队列_。 11一个类的_函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。 12. 假定用户为类AB定义了一个构造函数“AB(int aa, char *bb=NULL):a(aa),b(bb)”,则该类中至少包含有_个数据成员。 13. 重载插入运算符时,其运算符函数的返回值类型应当是_。三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面(每小题6分,共18分) 1. 打印出2至99之间的所有素数(即不能被任何数整除的数)。 #include #include void main() int i,n; for(n=2; _(1)_; n+) int temp=int(sqrt(n); /求出n的平方根并取整 for(i=2; _(2)_; i+) if(n%i=0) _(3)_; if(itemp) coutn ; coutn; (1) (2) (3) 2. 下面是对按从小到大排列的有序数组an中进行二分查找x的算法,若查找成功返回该元素下标,否则返回-1。 int BinarySearch(int a,int n,int x) int low=0, high=n-1; /定义并初始化区间下界和上界变量 int mid; /定义保存中点元素下标的变量 while(low=high) mid=_(1)_; if(x=amid) _(2)_; else if(xamid) high=mid-1; else _(3)_; return -1; (1) (2) (3) 3class A int a,b; public: A(int aa=0, int bb=0) _(1)_ /分别用aa和bb对应初始化a和b ;main() _(2)_ ; /定义类A的对象x并用5初始化,同时定义y并用x初始化 _(3)_ ; /定义p指针,使之指向对象x(1) (2) (3) 四、写出程序运行结果(每小题6分,共18分) 1. #include const int N=5; void main() int i,p=1,s=0; for(i=1;iN; i+) p=p*i; s=s+p; coutsetw(5)isetw(5)p; coutsetw(5)sendl; 2. #include void main() char s35=1234,abcd,+-*/; char *p3; for(int i=0;i=0;i-) coutpi ; coutendl; 3. #include class Date public: void SetDate(int y,int m,int d) Year=y; Month=m; Day=d; void PrintDate() coutYear/Month/Dayendl; Date()SetDate(2000,1,1); Date(int y,int m,int d)SetDate(y,m,d); protected: int Year,Month,Day;class Time public: void SetTime(int h,int m,int s) Houre=h; Minutes=m; Seconds=s; void PrintTime() coutHoure:Minutes:Secondsendl; Time()SetTime(0,0,0); Time(int h,int m,int s)SetTime(h,m,s); protected: int Houre, Minutes, Seconds;class Date_Time: public Date, public Time public: Date_Time( ):Date(),Time(); Date_Time(int y,int mo,int d,int h,int mi,int s): Date(y,mo,d), Time(h,mi,s) void PrintDate_Time()PrintDate();PrintTime();void main( ) Date_Time dt_a, dt_b(2002,10,1,6,0,0); dt_a.PrintDate_Time(); dt_b.SetTime(23,59,59); dt_b.PrintDate_Time(); dt_a.SetDate(2002,12,31); dt_a.PrintDate_Time();五、指出程序或函数的功能(每小题6分,共12分) 1. #include double f1(int n) double sign=1,s=1; for(int i=2;ia; coutf1(a)endl; 2. void Output(IntNode *f) if(!f) return; while(f) coutdatanext; coutendl; 假定IntNode的类型定义为: struct IntNode int data; /结点值域 IntNode* next; /结点指针域 ;六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误(6分)下面是一个类的定义,存在着3处语法错误(有的为单个字符),请指出错误行的行号并改正。class CE /1行 private: /2行 int a,b; /3行 int getmin() return (ab? a:b); /4行 public /5行 int c; /6行 void SetValue(int x1,int x2, int x3) /7行 a=x1; b=x2; c=x3; /8行 ; /9行 int GetMin(); /10行; /11行int GetMin() /12行int d=getmin(); /13行return (dc? d:c); /14行 /16行错误行的行号为_、_和_。分别改正为_、_和_。七、编程(每小题8分,共16分) 1. 求满足不等式22+42+.+n21000的最大n值,假定分别用i和s作为取偶数值和累加值的变量,并限定使用do循环编程。 2. 根据下面类中Uion函数的原型和注释写出它的类外定义。class Strings char *s; /指向动态分配的字符串数组空间 int n; /记录字符串长度public: Strings(char*str); /构造函数,利用str字符串长度初始化n, /利用str字符串初始化s所指的字符串空间 Strings(Stri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论