ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:32.25KB ,
资源ID:27831928      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27831928.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(面向对象程序设计课程作业及答案.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

面向对象程序设计课程作业及答案.docx

1、面向对象程序设计课程作业及答案面向对象程序设计课程作业及答案中央电大理工部计算机教研室作业1:是非题1.头文件中一般存放着变量和常量的定义、函数的原型以及类的定义。 1.错2.程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。 4.对填空题下面是一个求数组元素之和的程序。主程序中定义并初始化了一个数组,然后计算该数组 各元素的和,并输出结果。函数 sum计算数组元素之和。填充程序中不完整的部分。 A int sum(int ,int);void main()int ia5 = 2,3,6,8,10;B ;sumOfArray = sum(ia,5);

2、cout Sum of array: sumOfArray endl; int sum(int array,int len)int iSum = 0;for(int i = 0; C ; D ) ;return iSum;答案:A #include B int sumOfArray;C i lenD i+E iSum += arrayi;阅读理解题写出下列程序的运行结果:/ file1.cppstatic int i = 20; int x;static int g(i nt p)return i + p;void f(int v)x=g(v);/ file2.cpp#include exte

3、rn int x;void f(int);void main()int i=5;f(i);cout x;回答以下问题:1. 程序的运行结果是什么样的?2. 为什么文件 file2.cpp 中要包含头文件 ?3.在函数 main() 中是否可以直接调用函数 g() ?为什么?4.如果把文件 file1.cpp 中的两个函数定义的位置换一下,程序是否正确?为什么? 5. 文件 file1.cpp 和 file2.cpp 中的变量 i 的作用域分别是怎样的?在程序中直接标出 两个变量各自的作用域。答案:1. 程序的运行结果: 25因为程序中需要利用 cout对象进行输出,而 cout是在C+标准I/

4、O库iostream 中定义 的类 ostream 的一个对象。2 在函数 main() 中不可以直接调用函数 g() ,因为 g() 是静态函数,只在它所在的文件内 可见。3如果把文件filel.cpp 中的两个函数定义的位置换一下,程序不正确,因为 C+规定所有使用的变量和函数需要先声明,后使用。在函数 f中用到了函数g,所以函数f不能出 现在函数g的定义或声明之前。文件 file1.cpp 中的变量 i 的作用域从它的定义开始到文件结束。 File2.cpp 中的变量 i 的作用域从它的定义开始到 main 函数结束。编程题 写一个函数,完成在链表末尾增加一个节点的操作。函数的原型为:N

5、ode * AddNode(Node * & head, int newData); 其中,链表节点的定义如下:struct Node int data; / 存放数 据Node * next; / 指 向链 表中的下一个节点;函数参数: 函数的第一个参数 head 指向链表的第一个节点,如果链表为空,则 head 的值为 NULL,第二个参数newData为要插入的新节点中存放的数据。函数返回值: 当成功地插入新的节点时,函数返回指向新节点的指针,否则,如果不能申请到内存 空间,则返回 NULL。Node * AddNode(Node *& head, int newData) / 在这里写

6、出函数的实现答案:Node * AddNode(Node * &head, int newData) / 申请新的节点空间Node * newNode = new Node;if (newNode = NULL)return NULL;/ 填充新节点的内容newNode-data = newData; newNode-next = NULL;/ 插入到链表的结尾if (head = NULL)head = newNode;else/ 寻找链表的最后一个节点Node *tail = head; while(tail-next != NULL) tail = tail-next;/ 将新节点插入到

7、最后 tail-next = newNode;return newNode;作业 2:是非题1. 在不同作用域中的变量可以同名。对2. 派生类的成员函数可以直接访问基类的所有成员。 2. 错 填空题#include A ;void main()int a6=2,4,8,6,9,14;int x1= B ; / 调用 f1 函数求出 a 中前 4 各元素之和。int x2=f1(a,6);coutx1 x2endl;int f1(int a, int n)int i,s=0;for(i=0;in;i+) s+=ai;return s;答案:A int f1(int a, int n);B f1(

8、a,4)改错题1. 下面的函数将浮点型指针参数 para 所指向的值赋给一个局部指针变量 pFloat 所指向 的空间,然后输出 *pFloat 的值。#include void func(float * para)float * pFloat;pFloat = para;cout pFloat;错误为: 改正方法 为: 答案 错误为: 没有给指针申请空间,就直接赋值 改正的方 法为: 先为 pFloat 申请空间,再赋值。2. 下列程序片段对二维数组的每个元素赋值 unsigned short SomeArray54;for (int i = 1; i=5; i+)for (int j =

9、1; j=4; j+)SomeArrayij = i+j;错误为: 改正方法 为 : 答案 错误为:访问数组元素的下标不对改正的方 法为:将两个 for 循环的循环初始值改为 0,循环结束条件分别改为 i5 和 j=a & stri=z) num+;/ 返回数字字符个数return num; 作业 3:是非题1. 函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。 3. 错2. 如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么, 这个函数自动继承基类中虚函数的特性。 5. 对 填空题#include A ;int f2(int* a, int n)

10、 B ; for(i=1;in;i+) if(maxai) max=ai;return max;void main()int bMM=3,12,6,20,9,7,34,50,25,66; C ; / 求出 b4 至 b8 之间的最大值并赋给 x1 D ; / 求出 b0 至 b5 之间的最大值并赋给 x2 coutx1 x2endl;答案:A const int MM=10;B int i,max=a0;C int x1=f2(b+4, 5);D int x2=f2(b, 6);阅读理解 题二、valarray是C+的标准模板 库中的一个类模板,类模板的每个实 例类实现了某个具体的数据 类型的

11、数组,如 valarray 是一个整型的数组类。该类 的使用和一般的数组非 常 类似,可 以通过 运算符来访问数组中的每 个元素。C+的标准模板库中还有一个模板函数 abs(),其函数原型为:templatevalarray abs(const valarray & x);该函数的作用是将作为参数的数组 x 的每个元素的值取绝对值,并返回得到的新的数组。如原 来的数组为:4 -1 -3 0 -34 将这个数组作为参数传递给函数 abs 后,函数返回的数组就变成:4 1 3 0 34 要求:阅读下列程序,回答后面的问题。*#include #include II 该头文件中定义了模板类 vala

12、rray 和模板函数 abs()#define ARRAY_SIZEtypedef valarray10INTVALARRAY;void main() INTVALARRAY val_array(ARRAY_SIZE);II定义一长度为ARRAY_SIZE勺数组对象/ 赋初始值for (int i = 0; i ARRAY_SIZE; i+) val_arrayi = -i;cout Size of val_array = val_array.size() n;cout The values of val_array before calling abs():n; for (i = 0; i

13、ARRAY_SIZE; i+)cout val_arrayi ;cout n;INTVALARRAY abs_array = abs(val_array);cout The result of val_array after calling abs():n; for (i = 0; i ARRAY_SIZE; i+)cout abs_arrayi ;cout n;/*/问题1:写出程序的输出结果问题2:关于程序中的语句:INTVALARRAY val_array(ARRAY_SIZE);下列说法哪些是正确的,哪些是错误的?在下表相应的位置写上“对”或“错”题号ABCDE对/错(A) 该语句定义

14、了一个对象 val_array ,这个对象是类 valarray 的实例(B) 该语句说明了一个函数原型,函数的名字为 val_array ,参数为ARRAY_SIZE函数 的返回值类型为INTVALARRAY(C)板类valarray 一定有一个只带一个参数的构造函数(D)模板类valarray 一定有一个只带两个参数的构造函数(E) ARRAY_SIZE各作为参数传递给 val_array 的构造函数,初始化 val_array 对象问 题3:(本小题共12分)下面是模板函数 abs()的实现。这个实现中有错误,指出错误并写出正确的实现。注意:函数头是正确的,不要改变,所有的错误出现在函数

15、体中。templatevalarray abs(c onst valarray& x)for(int i=0; ix.size(); i+) if(xi0) xi*=-1;return x;这个函数实现中有以下错误:(1) (2) (3) 正确的函数实现应为:templatevalarray abs(c onst valarray& x)问题4:(本小题3分)从上面的程序中,你可以推断出, valarray 模板类中至少重载了哪个或哪些C+的运算符?答:重载了 运算符答案:问题1程序的输出结果为:Size of val_array = 10The values of val_array bef

16、ore calli ng abs():0 -1 -2 -3 -4 -5 -6 -7 -8 -9The result of val_array after calli ng abs():0123456789问题2.题号ABCDE对/错对错对错对问题3答案:该函数实现有以下错误:(1)函数的参数x为const参数,不能在函数体中被改变(2) 在函数中应该创建一个临时对象,这个对象的内容由参数 x的内容运算而来(3)函数返回的应是临时对象,而不是参数正确的函数实现为:template valarray abs(c onst valarray& x)INTVALARRAY ret_array(x);

17、/利用拷贝构造函数构造临时对象for (int i = 0; i x.size(); i+)if (ret_arrayi 0)ret_arrayi *= -1; / 取绝对值return ret_array; /返回临时对象或者templatevalarray abs1(c onst valarray& x)INTVALARRAY ret_array(x.size(); / 构造一个与 x 长度相同的对象for (int i = 0; i x.size(); i+)if (xi maxChar) maxChar = stri;return maxChar; 第二种: char MaxChara

18、cter(char *str)if (str = NULL)return 0x0;char maxChar = 0x0;for(int i=0; i maxChar) maxChar = stri;return maxChar; 第三种:char MaxCharacter(char *str)if (str = NULL | str0 = 0x0) return 0x0;char maxChar = str0; for(int i=1; stri!= 0x0; i+) if (stri maxChar) maxChar = stri;return maxChar;第四种:char MaxCha

19、racter(char *str)if (str = NULL | str0 = 0x0) return 0x0;char maxChar = str0;int i=1;while(stri != 0x0)if (stri maxChar) maxChar = stri;i+;return maxChar;作业 4:是非题1. 函数重载既要求两函数参数对应的类型不同又要求参数个数不同。错2. 在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数,才能具 有多态的特征。错 填空题#includeclass AA private:int a;int b;public:AA(int a

20、a, int bb=10) A ; / 将 aa 的值赋给 a B ; /将bb的值赋给b C ; D ;int AA:f1() return a+b;int AA:f2() return a*b;void main()AA x(2,3), y(8);coutx.f1() y.f2()endl;答案:A a=aa;B b=bb;C int f1();D int f2();阅读理解 题三、下面的文件queue.h是一个队列类模板 Queue的完整实现。在这个文件中首先定义了 一个队列 元素类模板Queueitem,然后在这 个类的基础上 定义了队列类模板Queue。在Queue中 使用链 表存放

21、队列的各个 元素, front 指针指向 链表的第一个节点元素, back 指针指向 链表 的 最后一 个节点元素,成员 函数 add() 将一个新节点 元素加入到队列结尾, remove() 从队列开 头 删除一 个节点元素。为方 便起见, 程序中加 上了行 号。 阅读程序 , 根据程序后面的 问题作出 相 应解答 。/* / /template class Queue;定义模板类 QueueItem */*templateclass QueueItempublic:QueueItem(const Type & elem):item(elem) QueueItem() private:Typ

22、e item;QueueItem * nextItem;friend class Queue;template class Queue public:Queue():front( NULL), (A) Queue();Type remove(); void add(const Type &); bool is_empty() const return (B) ; private:QueueItem *front; QueueItem *back;/ 模板类 Queue 的函数成员 remove() 的实现/ 从队列头取出一个节点,并返回该节点的值 templateType Queue:remo

23、ve()QueueItem *pFront; / 指向头节点的临时指针 Type retVal; / 返回值 (C) ;retVal = front-item; front = front-nextItem; delete pFront;return retVal;/ 模板类 Queue 的函数成员 add() 的实现templatevoid Queue:add(const Type & newItem)QueueItem *pNew = new QueueItem; pNew-item = newItem; (D) ;if (front = NULL) front = back = pNew

24、;else back-nextItem = pNew; (E) ; templateQueue:Queue()QueueItem *p = front, *q; while(p != NULL) q = p-nextItem; delete p; p = q; 问题 1:(每个填空 3 分,共 15分) 程序中有几处填空,将它们完成。(A) (B) (C) (D) (E) 问题2:(本小题3分)题中程序第1, 2行为什么要说明一下类模板 Queue?如果没有这 两行语句,程序还正确吗?问题 3:(本小题 4分)程序第 22, 23行各有一个 const ,它们各自表示什么含义:问题4:(本小题3分)程序中模板类 Queue的析构函数主要做了什么事情?为什么要这 么做?问题 5:(本小题 5 分,每答对一个给 1 分)下面的程序使用了queue.h 文件中定义的类模板,说明程序中哪些定义队列对象的语句是不正确的,#include “queue.h ” void main() Queue q1;哪些是正确的。/1Queue q2;/

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1