




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/《面对对象程序设计》课程作业及答案作业1:是非题1.头文件中一般存放着变量和常量的定义、函数的原型以及类的定义。1.错2.程序的编译是以文件为单位的,因此将程序分到多个文件中可以削减每次对程序修改所带来的编译工作量。4.对填空题下面是一个求数组元素之和的程序。主程序中定义并初始化了一个数组,然后计算该数组各元素的和,并输出结果。函数sum计算数组元素之和。填充程序中不完整的部分。________A__________intsum(int[],int);voidmain(){ intia[5]={2,3,6,8,10}; B; sumOfArray=sum(ia,5); cout<<"Sumofarray:"<<sumOfArray<<endl;}intsum(intarray[],intlen){ intiSum=0; for(inti=0;C;D) E; returniSum;}答案:A #include<iostream.h>B intsumOfArray;C i<lenD i++E iSum+=array[i];阅读理解题写出下列程序的运行结果://file1.cppstaticinti=20;intx;staticintg(intp){ returni+p;}voidf(intv){ x=g(v);}//file2.cpp#include<iostream.h>externintx;voidf(int);voidmain(){ inti=5;f(i); cout<<x;}回答以下问题:1.程序的运行结果是什么样的?2.为什么文件file2.cpp中要包含头文件<iostream.h>?3.在函数main()中是否可以干脆调用函数g()?为什么?4.假如把文件file1.cpp中的两个函数定义的位置换一下,程序是否正确?为什么?5.文件file1.cpp和file2.cpp中的变量i的作用域分别是怎样的?在程序中干脆标出两个变量各自的作用域。答案:1.程序的运行结果:25因为程序中须要利用cout对象进行输出,而cout是在C++标准I/O库iostream中定义的类ostream的一个对象。2在函数main()中不行以干脆调用函数g(),因为g()是静态函数,只在它所在的文件内可见。3假如把文件file1.cpp中的两个函数定义的位置换一下,程序不正确,因为C++规定全部运用的变量和函数须要先声明,后运用。在函数f中用到了函数g,所以函数f不能出现在函数g的定义或声明之前。文件file1.cpp中的变量i的作用域从它的定义起先到文件结束。File2.cpp中的变量i的作用域从它的定义起先到main函数结束。编程题写一个函数,完成在链表末尾增加一个节点的操作。函数的原型为: Node*AddNode(Node*&head,intnewData);其中,链表节点的定义如下:structNode{ intdata; //存放数据 Node*next; //指向链表中的下一个节点};函数参数:函数的第一个参数head指向链表的第一个节点,假如链表为空,则head的值为NULL。其次个参数newData为要插入的新节点中存放的数据。函数返回值:当成功地插入新的节点时,函数返回指向新节点的指针,否则,假如不能申请到内存空间,则返回NULL。 Node*AddNode(Node*&head,intnewData){ //在这里写出函数的实现}答案:Node*AddNode(Node*&head,intnewData){ //申请新的节点空间 Node*newNode=newNode; if(newNode==NULL) returnNULL; //填充新节点的内容 newNode->data=newData; newNode->next=NULL; //插入到链表的结尾 if(head==NULL) head=newNode; else { //找寻链表的最终一个节点 Node*tail=head; while(tail->next!=NULL) tail=tail->next; //将新节点插入到最终 tail->next=newNode; } returnnewNode;}作业2:是非题1.在不同作用域中的变量可以同名。对2.派生类的成员函数可以干脆访问基类的全部成员。2.错填空题#include<iostream.h>___________A_____________;voidmain(){ inta[6]={2,4,8,6,9,14}; intx1=____B______;//调用f1函数求出a中前4各元素之和。 intx2=f1(a,6); cout<<x1<<''<<x2<<endl;}intf1(inta[],intn){ inti,s=0; for(i=0;i<n;i++)s+=a[i]; returns;}答案:Aintf1(inta[],intn);Bf1(a,4)改错题1.下面的函数将浮点型指针参数para所指向的值赋给一个局部指针变量pFloat所指向的空间,然后输出*pFloat的值。#include<iostream.h>voidfunc(float*para){ float*pFloat; pFloat=para;cout<<pFloat;}错误为:______________________________________________________改正方法为:________________________________________________________________________________________________________________答案错误为:没有给指针申请空间,就干脆赋值改正的方法为:先为pFloat申请空间,再赋值。2.下列程序片段对二维数组的每个元素赋值unsignedshortSomeArray[5][4];for(inti=1;i<=5;i++) for(intj=1;j<=4;j++) SomeArray[i][j]=i+j; 错误为:______________________________________________________ 改正方法为:________________________________________________________________________________________________________________答案错误为:访问数组元素的下标不对改正的方法为:将两个for循环的循环初始值改为0,循环结束条件分别改为i<5和j<4。编程题写一个函数,找出给定字符串中小写字母字符的个数。函数的原型为: intCalcAlpha(char*str);函数参数:str为所要处理的字符串;函数返回值:所给字符串中小写字母字符的个数 intCalcAlpha(char*str) { //在这里写上程序的实现 }答案:intCalcAlpha(char*str){ //推断字符指针是否为空 if(str==NULL)return0; //记录小写字母字符个数的变量 intnum=0; //依次检查各个字符,假如是小写字母,则总数加1 for(inti=0;str[i]!=0x0;i++) if(str[i])>='a'&&str[i]<='z') num++; //返回数字字符个数 returnnum;}作业3:是非题1.函数的参数和返回值类型可以是简洁数据类型,也可以是指针、引用、数组和类。3.错2.假如派生类的成员函数的原型和基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。5.对填空题#include<iostream.h>________A___________;intf2(int*a,intn){ ______B___________; for(i=1;i<n;i++) if(max<a[i])max=a[i]; returnmax;}voidmain(){ intb[MM]={3,12,6,20,9,7,34,50,25,66}; _______C__________;//求出b[4]至b[8]之间的最大值并赋给x1 _______D___________;//求出b[0]至b[5]之间的最大值并赋给x2 cout<<x1<<''<<x2<<endl;}答案:AconstintMM=10;Binti,max=a[0];Cintx1=f2(b+4,5);Dintx2=f2(b,6);阅读理解题二、valarray是C++的标准模板库中的一个类模板,类模板的每个实例类实现了某个具体的数据类型的数组,如valarray<int>是一个整型的数组类。该类的运用和一般的数组特殊类似,可以通过’[]’运算符来访问数组中的每个元素。C++的标准模板库中还有一个模板函数abs(),其函数原型为: template<classT>valarray<T>abs(constvalarray<T>&x);该函数的作用是将作为参数的数组x的每个元素的值取确定值,并返回得到的新的数组。如原来的数组为: 4-1-30-34将这个数组作为参数传递给函数abs后,函数返回的数组就变成: 413034要求:阅读下列程序,回答后面的问题。/********************************************************************/#include<iostream.h>#include<valarray.h>//该头文件中定义了模板类valarray和模板函数abs()#defineARRAY_SIZE10typedefvalarray<int>INTVALARRAY;voidmain(){INTVALARRAYval_array(ARRAY_SIZE); //定义一长度为ARRAY_SIZE的数组对象//赋初始值for(inti=0;i<ARRAY_SIZE;i++)val_array[i]=-i;cout<<"Sizeofval_array="<<val_array.size()<<"\n";cout<<"Thevaluesofval_arraybeforecallingabs():\n";for(i=0;i<ARRAY_SIZE;i++)cout<<val_array[i]<<"";cout<<"\n";INTVALARRAYabs_array=abs(val_array);cout<<"Theresultofval_arrayaftercallingabs():\n";for(i=0;i<ARRAY_SIZE;i++)cout<<abs_array[i]<<"";cout<<"\n";}/*********************************************************************/问题1:写出程序的输出结果问题2:关于程序中的语句: INTVALARRAYval_array(ARRAY_SIZE);下列说法哪些是正确的,哪些是错误的?在下表相应的位置写上“对”或“错”题号ABCDE对/错(A)该语句定义了一个对象val_array,这个对象是类valarray<int>的实例(B)该语句说明白一个函数原型,函数的名字为val_array,参数为ARRAY_SIZE,函数的返回值类型为INTVALARRAY(C)板类valarray确定有一个只带一个参数的构造函数(D)模板类valarray确定有一个只带两个参数的构造函数(E)ARRAY_SIZE将作为参数传递给val_array的构造函数,初始化val_array对象问题3:(本小题共12分)下面是模板函数abs()的实现。这个实现中有错误,指出错误并写出正确的实现。留意:函数头是正确的,不要变更,全部的错误出现在函数体中。template<classT>valarray<T>abs(constvalarray<T>&x){ for(inti=0;i<x.size();i++)if(x[i]<0) x[i]*=-1; returnx;}这个函数实现中有以下错误:(1)_____________________________________________________________________(2)_____________________________________________________________________(3)_____________________________________________________________________正确的函数实现应为:template<classT>valarray<T>abs(constvalarray<T>&x){}问题4:(本小题3分)从上面的程序中,你可以推断出,valarray模板类中至少重载了哪个或哪些C++的运算符?答:重载了________________________________运算符答案:问题1:程序的输出结果为:Sizeofval_array=10Thevaluesofval_arraybeforecallingabs():0-1-2-3-4-5-6-7-8-9Theresultofval_arrayaftercallingabs():0123456789问题2.题号ABCDE对/错对错对错对问题3.答案:该函数实现有以下错误:(1)函数的参数x为const参数,不能在函数体中被变更(2)在函数中应当创建一个临时对象,这个对象的内容由参数x的内容运算而来(3)函数返回的应是临时对象,而不是参数正确的函数实现为:template<classT>valarray<T>abs(constvalarray<T>&x){ INTVALARRAYret_array(x); //利用拷贝构造函数构造临时对象 for(inti=0;i<x.size();i++) { if(ret_array[i]<0) ret_array[i]*=-1; //取确定值 } returnret_array; //返回临时对象}或者template<classT>valarray<T>abs1(constvalarray<T>&x){ INTVALARRAYret_array(x.size()); //构造一个和x长度相同的对象 for(inti=0;i<x.size();i++) { if(x[i]<0) ret_array[i]=x[i]*(-1); //取确定值 else ret_array[i]=x[i]; } returnret_array; //返回临时对象}问题4.答案:重载了取数组下标的运算符’[]’编程题2.(本每小题15分)写一个函数,找出给定字符串中具有最大ASCII码的字符。如字符串“world”中字符‘w’具有最大的ASCII码。函数的原型为: charMaxCharacter(char*str);函数参数:str指向所要处理的字符串;函数返回值:假如str不空,则返回具有最大ASCII码的字符,否则返回空字符0x0或’\0’。charMaxCharacter(char*str){}答案:程序可以有多种写法,下面是其中的四种第一种:charMaxCharacter(char*str){ if(str==NULL) return0x0; charmaxChar=0x0; for(inti=0;str[i]!=0x0;i++) { if(str[i]>maxChar) maxChar=str[i]; } returnmaxChar;}其次种:charMaxCharacter(char*str){ if(str==NULL) return0x0; charmaxChar=0x0; for(inti=0;i<strlen(str);i++) { if(str[i]>maxChar) maxChar=str[i]; } returnmaxChar;}第三种:charMaxCharacter(char*str){ if(str==NULL||str[0]==0x0) return0x0; charmaxChar=str[0]; for(inti=1;str[i]!=0x0;i++) { if(str[i]>maxChar) maxChar=str[i]; } returnmaxChar;}第四种:charMaxCharacter(char*str){ if(str==NULL||str[0]==0x0) return0x0; charmaxChar=str[0]; inti=1; while(str[i]!=0x0) { if(str[i]>maxChar) maxChar=str[i]; i++; } returnmaxChar;}作业4:是非题1.函数重载既要求两函数参数对应的类型不同又要求参数个数不同。错2.在基类中被说明为虚函数的类的成员函数必需在每个派生类中说明为虚函数,才能具有多态的特征。错填空题#include<iostream.h>classAA{private: inta; intb;public: AA(intaa,intbb=10) { _____A_____;//将aa的值赋给a _____B_____;//将bb的值赋给b } ______C________; ______D________;};intAA::f1(){ returna+b;}intAA::f2(){ returna*b;}voidmain(){ AAx(2,3),y(8); cout<<x.f1()<<''<<y.f2()<<endl;}答案:Aa=aa;Bb=bb;Cintf1();Dintf2();阅读理解题三、下面的文件queue.h是一个队列类模板Queue的完整实现。在这个文件中首先定义了一个队列元素类模板QueueItem,然后在这个类的基础上定义了队列类模板Queue。在Queue中运用链表存放队列的各个元素,front指针指向链表的第一个节点元素,back指针指向链表的最终一个节点元素,成员函数add()将一个新节点元素加入到队列结尾,remove()从队列开头删除一个节点元素。为便利起见,程序中加上了行号。阅读程序,依据程序后面的问题作出相应解答。/*//*********************文件queue.h***********************//*/template<classType>classQueue;/*****************定义模板类QueueItem************/template<classType>classQueueItem{public:QueueItem(constType&elem):item(elem){}QueueItem(){}private:Typeitem;QueueItem*nextItem;friendclassQueue<Type>;};/*****************定义模板类Queue************/template<classType>classQueue{public:Queue():front(NULL),____(A)_____{}~Queue();Typeremove();voidadd(constType&);boolis_empty()const{return____(B)______;}private:QueueItem<Type>*front;QueueItem<Type>*back;};//模板类Queue的函数成员remove()的实现//从队列头取出一个节点,并返回该节点的值template<classType>TypeQueue<Type>::remove(){QueueItem<Type>*pFront; //指向头节点的临时指针TyperetVal; //返回值______(C)_________;retVal=front->item;front=front->nextItem;deletepFront;returnretVal;}//模板类Queue的函数成员add()的实现template<classType>voidQueue<Type>::add(constType&newItem){QueueItem<Type>*pNew=newQueueItem<Type>;pNew->item=newItem;______(D)____________;if(front==NULL)front=back=pNew;else{back->nextItem=pNew;_____(E)__________;}}template<classType>Queue<Type>::~Queue(){QueueItem<Type>*p=front,*q;while(p!=NULL){q=p->nextItem;deletep;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” voidmain() { Queueq1; // 1 Queue<int>q2; // 2 Queue<int>q3(100); // 3 Queue<int>q4[100]; // 4 Queue<int>*q5=newQueue<int>; // 5 // deleteq5; }语句号12345对/错答案:问题1:答案为:(A)back(NULL)(B)front==NULL或back==NULL(C)pFront=front(D)pNew->nextItem=NULL(E)back=pNew问题2:答:不正确。因为在类QueueItem模板类的定义中用到了模板类Queue,而此时Queue还没有定义,所以要先声明一下,告知编译程序Queue是一个模板类,它将在程序的其他地方定义。假如没有这个说明,编译程序就不知道标识符Queue代表什么样的含义了。问题3:答:第22行的const修饰的是函数的参数,表示在这个函数体中不能改它所修饰的参数所对应的实际参数的值。 第23行的const修饰的是模板类Queue的成员函数is_empty(),它表示在函数is_empty()的函数体中不能变更任何数据成员的值。问题4:答:析构函数中主要是释放链表中存放的各个节点的空间。因为Queue对象在其生存期间可能加入了很多节点,从堆中申请了一些内存空间,这些空间应当随着对象的消亡而释放掉,所以须要在析构函数中来释放这些空间。问题5:语句号12345错对/错错对对编程题三、定义一个日期类Date,该类对象存放一个日期,可以供应的操作有:intGetYear(); //取年份intGetMonth(); //取月份intGetDay(); //取日子值voidSetDate(intyear,intmonth,intday); //设置日期值下面是测试你所定义的日期类的程序:#include<iostream.h>#include“date.h”void main(){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民间工具捐赠协议书
- 学校专业共建协议书
- 员工车辆安全协议书
- 空调火灾免责协议书
- 无故辞退调解协议书
- 加盟和解协议书模板
- 租地建房办学协议书
- 技术期权入股协议书
- 浸水事件赔偿协议书
- 教师签约协议书范文
- 危险性较大的分部分项工程专项施工方案严重缺陷清单(试行)
- 2025年辽宁省建筑安全员《B证》考试题库
- 2023-2024学年华东师大版八年级数学上册期末复习综合练习题
- 慢性肾病5期护理查房
- 常务副总经理职责
- 2024年云南省中考物理真题含解析
- 后勤岗位招聘面试题及回答建议
- 完整初一历史上学期记忆时间轴
- 《农村普惠金融发展研究的国内外文献综述》4500字
- 渔光互补光伏发电项目反事故及预防措施
- 农业昆虫学-形考测试四-国开(ZJ)-参考资料
评论
0/150
提交评论