




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象程序设计课程作业及答案中央电大理工部计算机教研室作业1:是非题1 .头文件中一般存放着变量和常量的定义、函数的原型以及类的定义。1.错2 .程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。4.对填空题下面是一个求数组元素之和的程序。主程序中定义并初始化了一个数组,然后计算该数组各元素的和,并输出结果。函数sum计算数组元素之和。填充程序中不完整的部分。Aintsum(int口,int;voidmain(intia5=2,3,6,8,10;B;sumOfArray=sum(ia,5;coutSumofarray:sumOfArrayendl;
2、intsum(intarray口,intlenintiSum=0;for(inti=0;C;DE;returniSum;答案:A#includeBintsumOfArray;CilenDi+EiSum+=arrayi;阅读理解题写出下列程序的运行结果:/filel.cppstaticinti=20;intx;staticintg(intpreturni+p;voidf(intvX=g(v;file2.cpp#includeexternintx;voidf(int;voidmain(inti=5;f(i;coutdata=newData;newNode-next=NULL;/插入到链表的结尾if
3、(head=NULLhead=newNode;else/寻找链表的最后一个节点Node*tail=head;while(tail-next!=NULLtail=tail-next;/将新节点插入到最后tail-next=newNode;returnnewNode;作业2:是非题1 .在不同作用域中的变量可以同名。对2 .派生类的成员函数可以直接访问基类的所有成员。2.错填空题#includeA;voidmain(inta6=2,4,8,6,9,14;intx1=B;/调用f1函数求出a中前4各元素之和。intx2=f1(a,6;coutintf1(inta,intninti,s=0;for(i
4、=0;ireturns;答案:Aintf1(inta,intn;Bf1(a,4改错题1 .下面的函数将浮点型指针参数para所指向的值赋给一个局部指针变量pFloat所指向的空间,然后输出*pFloat的值。#includevoidfunc(float*parafloat*pFloat;pFloat=para;coutpFloat;错误为:改正方法为:答案错误为:没有给指针申请空间,就直接赋值改正的方法为:先为pFloat申请空间,再赋值。2 .下列程序片段对二维数组的每个元素赋值unsignedshortSomeArray54;for(inti=1;i=5;i+for(intj=1;j=4;
5、j+SomeArrayij=i+j;错误为:改正方法为:答案错误为:访问数组元素的下标不对改正的方法为:将两个for循环的循环初始值改为0,循环结束条件分别改为i5和j=a&stri=znum+;/返回数字字符个数returnnum;作业3:是非题3.错1 .函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。2 .如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。5.对填空题#includeA;intf2(int*a,intnB;for(i=1;iif(maxreturnmax;voidmain(intbMM尸3
6、,12,6,20,9,7,34,50,25,66;C;/求出b4至b8之间的最大值并赋给x1D;/求出b0至b5之间的最大值并赋给x2cout答案:AconstintMM=10;Binti,max=a0;Cintx1=f2(b+4,5;Dintx2=f2(b,6;阅读理解题二、valarray是C+珀勺标准模板库中的一个类模板,类模板的每个实例类实现了某个具体的数据类型的数组,如valarray是一个整型的数组类。该类的使用和一般的数组非常类似,可以通过运算符来访问数组中的每个元素。C+的标准模板库中还有一个模板函数abs(,其函数原型为:templatevalarrayabs(constva
7、larray&x;该函数的作用是将作为参数的数组x的每个元素的值取绝对值,并返回得到的新的数组。如原来的数组为:4-1-30-34将这个数组作为参数传递给函数abs后,函数返回的数组就变成:413034要求:阅读下列程序,回答后面的问题。/*/#include#include/该头文件中定义了模板类valarray和模板函数abs(#defineARRAY_SIZE10typedefvalarrayINTVALARRAY;voidmain(INTVALARRAYval_array(ARRAY_SIZE;/定义一长度为ARRAY_SIZE勺数组对象/赋初始值for(inti=0;iARRAY_S
8、IZE;i+val_arrayi=-i;coutSizeofval_array=val_array.size(n;coutThevaluesofval_arraybeforecallingabs(:n;for(i=0;iARRAY_SIZE;i+coutval_arrayi;coutn;INTVALARRAYabs_array=abs(val_array;coutTheresultofval_arrayaftercallingabs(:n;for(i=0;iARRAY_SIZE;i+coutabs_arrayi;coutn;/*/问题1:写出程序的输出结果问题2:关于程序中的语句:INTVAL
9、ARRAYval_array(ARRAY_SIZE;下列说法哪些是正确的,哪些是错误的?在下表相应的位置写上“对”或“错”题号ABCDE又打错(A)该语句定义了一个对象val_array,这个对象是类valarray的实例(B)该语句说明了一个函数原型,函数的名字为val_array,参数为ARRAY_SIZE函数的返回值类型为INTVALARRAY(C)板类valarray一定有一个只带一个参数的构造函数(D)模板类valarray一定有一个只带两个参数的构造函数(E)ARRAY_SIZ日各作为参数传递给val_array的构造函数,初始化val_array对象问题3:(本小题共12分)下面
10、是模板函数abs(的实现。这个实现中有错误,指出错误并写出正确的实现。注意:函数头是正确的,不要改变,所有的错误出现在函数体中。templatevalarrayabs(constvalarray&xfor(inti=0;ixi*=-1;returnx;这个函数实现中有以下错误:(1)(2)(3)正确的函数实现应为:templatevalarrayabs(constvalarray&x问题4:(本小题3分)从上面的程序中,你可以推断出,valarray模板类中至少重载了哪个或哪些C+的运算符?答:重载了运算符答案:问题1:程序的输出结果为:Sizeofval_array=10Thevalueso
11、fval_arraybeforecallingabs(:0-1-2-3-4-5-6-7-8-9Theresultofval_arrayaftercallingabs(:0123456789问题2.题号ABCDE寸/错对错对错对问题3.答案:该函数实现有以下错误:(1)函数的参数x为const参数,不能在函数体中被改变(2)在函数中应该创建一个临时对象,这个对象的内容由参数x的内容运算而来(3)函数返回的应是临时对象,而不是参数正确的函数实现为:templatevalarrayabs(constvalarray&xINTVALARRAYret_array(x;利用拷贝构造函数构造临时对象for(
12、inti=0;ix.size(;i+if(ret_arrayi0ret_arrayi*=-1;/取绝对值returnret_array;/返回临时对象或者templatevalarrayabs1(constvalarray&xINTVALARRAYret_array(x.size(;构造一个与x长度相同的对象for(inti=0;ix.size(;i+if(ximaxCharmaxChar=stri;returnmaxChar;第二种:charMaxCharacter(char*strif(str=NULLreturn0x0;charmaxChar=0x0;for(inti=0;imaxCha
13、rmaxChar=stri;returnmaxChar;第三种:charMaxCharacter(char*strif(str=NULL|str0=0x0return0x0;charmaxChar=str0;for(inti=1;stri!=0x0;i+(if(strimaxCharmaxChar=stri;)returnmaxChar;)第四种:charMaxCharacter(char*str(if(str=NULL|str0=0x0return0x0;charmaxChar=str0;inti=1;while(stri!=0x0if(strimaxCharmaxChar=stri;i+;
14、returnmaxChar;作业4:是非题1.函数重载既要求两函数参数对应的类型不同又要求参数个数不同。错2.在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数,才能具有多态的特征。错填空题#includeclassAAprivate:inta;intb;public:AA(intaa,intbb=10A;/将aa的值赋给aB;/将bb的值赋给bC;D;;intAA:f1(returna+b;intAA:f2(returna*b;voidmain(AAx(2,3,y(8;coutitem;front=front-nextItem;deletepFront;returnretVa
15、l;/模板类Queue的函数成员add(的实现templatevoidQueue二add(constType&newitemQueueitem*pNew=newQueueitem;pNew-item=newitem;(D;if(front=NULLfront=back=pNew;elseback-nextitem=pNew;(E;templateQueue:Queue(Queueitem*p=front,*q;while(p!=NULLq=p-nextItem;deletep;p=q;问题1:(每个填空3分,共15分程序中有几处填空,将它们完成。(A)(B)(C)(D)(E)问题2:(本小题3
16、分)题中程序第1,2行为什么要说明一下类模板Queue?如果没有这两行语句,程序还正确吗?问题3:(本小题4分)程序第22,23行各有一个const,它们各自表示什么含义:问题4:(本小题3分)程序中模板类Queue的析构函数主要做了什么事情?为什么要这么做?问题5:(本小题5分,每答对一个给1分)下面的程序使用了queue.h文件中定义的类模板,说明程序中哪些定义队列对象的语句是不正确的,哪些是正确的。#include“queue.hvoidmain(Queueq1;/1Queueq2;/2Queueq3(100;/3Queueq4100;/4Queue*q5=newQueue;/5.del
17、eteq5;语句号12345又寸/错答案:问题1:答案为:(A) back(NULL(B) front=NULL或back=NULL(C) pFront=front(D) pNew-nextItem=NULLEE)back=pNew问题2:答:不正确。因为在类QueueItem模板类的定义中用到了模板类Queue,而此时Queue还没有定义,所以要先声明一下,告诉编译程序Queue是一个模板类,它将在程序的其他地方定义。如果没有这个说明,编译程序就不知道标识符Queue代表什么样的含义了。问题3:答:第22行的const修饰的是函数的参数,表示在这个函数体中不能改它所修饰的参数所对应的实际参数
18、的值。第23行的const修饰的是模板类Queue的成员函数is_empty(,它表示在函数is_empty(的函数体中不能改变任何数据成员的值。问题4:答:析构函数中主要是释放链表中存放的各个节点的空间。因为Queue对象在其生存期间可能加入了很多节点,从堆中申请了一些内存空间,这些空间应该随着对象的消亡而释放掉,所以需要在析构函数中来释放这些空间。问题5:语句号12345错又7错错对对编程题三、定义一个日期类Date,该类对象存放一个日期,可以提供的操作有:intGetYear(;/取年份intGetMonth(;/取月份intGetDay(;取日子值voidSetDate(intyear
19、,intmonth,intday;/设置日期值下面是测试你所定义的日期类的程序:#include#includedate.hvoidmain(Dated1(1999,1,14;/用所给日期定义一个日期变量Dated2;/定义一个具有缺省值的日期,缺省值为1980年1月1日Dated3(d1;/用已有日期x构造一个新对象d2.SetDate(1999,3,13;coutDate:;coutd1.GetYear(.d1.GetMonth(.d1.GetDay(endl;coutDate:;coutd2.GetYear(.d2.GetMonth(.d2.GetDay(endl;coutDate:;coutd3.GetYear(.d3.GetMonth(.d3.GetDay(endl;要求:(1)写出日期类的完整定义,其中,三个Get函数写成内联函数形式,SetDate写成非内联函数形式。所有数据成员都定义为私有成员。注意构造函数的三种形式。(2)写出程序的运行结果(3)修改程序,在日期类中定义日期的输出函数,这样,主程序就可以简化为:voidmain(Dated1(1999,1,14;/用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同协议书规定的内容
- 电子显微镜采购协议
- 股权质押抵押品管理协议
- 购房贷款佣金协议
- 分类信息中介合同
- 四年级第一学期班级安全管理计划
- 小学社会责任与公民意识培训计划
- 厕所清洁服务合同范本(含绿化维护与除菌)
- 民宿租赁经营管理合同示例
- 工业园区厂房物业委托管理与资产增值合同
- 三基三严测试题(附参考答案)
- 军队食堂管理员岗位职责
- 25学年四年级数学下期末复习每日一练
- 2024年江苏省无锡市中考历史真题(原卷版)
- 金矿合作协议书
- 人教版三年级数学下册100道口算题大全(全册)
- 2025年中国电瓷器材市场调查研究报告
- 2025年中国茴香市场现状分析及前景预测报告
- 电商直播对消费者购买行为影响的实证研究
- 历年高考数列试题及答案
- 《ISO 37001-2025反贿赂管理体系要求及使用指南》专业解读和应用培训指导材料之8:10改进(雷泽佳编制-2025A0)
评论
0/150
提交评论