面向对象程序设计实验.docx
1.iaochenguniversity计算机学院实验报告【20142015学年第1学期【一、基本信息】【实验课程】面向对象程序设计【设课形式】独立E非独立口【课程学分】3【实验项目】类和对象【项目类型】基础E综合设计研究创新其它【项目学时】4【学生姓名】高伟建【学号】2013204547【系别专业】计算机科学与技术【实验班组】2013级1班组台【同组学生】【实验室名】A307【实验日期】2014.11.18【报告日期】2014.11.18【二、实验教师对报告的最终评价及处理意见】实验成绩:(涂改无效)指导教师签名:年月日注:要将实验项目、实验课程的成绩评定及课程考核办法明确告知学生,并报实验管理中心备案【三、实验预习】实验目的和要求:1、掌握声明类的方法,类和类的成员的概念以及定义对象的方法。2、初步掌握用类和对象编制基于对象的程序。3、学习检查和调试基于对象的程序。4、掌握类的构造函数和析构函数的概念和使用方法。5、掌握对象数组、对象的指针及其使用方法。实验内容和原理或涉及的知识点(综合性实验):1、用类实现顺序栈。2、用类实现循环队列栈。3、实现一个带有头结点的单链表,该链表可以插入整型元素。实验条件(实验设备、软件、材料等):1、装有Windows操作系统的微型计算机;2、Ec1.ipse集成开发环境和CDT插件;3、MinGW编译环境。实验设计方案(实验方法、步骤、操作过程、设计型实验、实验数据记录表格):1、熟悉C+程序中源文件的组织方式。2、首先分析类的属性和行为,然后通过封装实现类。3、实现栈时,考虑栈容量的自动增长问题。实验预习成绩(涂改无效)合格不合格口【四、实验过程、数据和实验结果记录】实验方法、步骤、操作过程的记录描述或程序代码。实验过程中输入/输出数据、程序运行结果的记录。(可加附页)2.1Stackxpp:#inc1.ude<iostream>#inc1.ude,Stack.h"usingnamespacestd;boo1.Stack:isEmpty()(if(top+1)=base)returntrue;e1.sereturnfa1.se;boo1.Stack:isFu1.1.()if(top-base)>=STACKSIZE)returntrue;e1.sereturnfa1.se;)boo1.Stack:Pop(EIemType&m)if(!isEmpty()(m=*(a+top);top-;returntrue;1e1.sereturnfa1.se;boo1.Stack:Push(E1.emTypem)if(isFu1.1.()(COUt«,'xE>>NAu,'«end1.;returnfa1.se;Ie1.se(top+;*(a+top)=m;returntrue;boo1.Stack:GetTop(EIemType&m)(if(!isEmpty()(m=*(a+top);returntrue;)returnfa1.se;)boo1.Stack:Print_Stack()if(isEmpty()(cout«"zE>>E>>,'«end1.;returnfa1.se;1for(inti=base;i<=top;i+)cout«*(a+i)«",;cout«end1.;returntrue;)Stack.h:#ifndefSTACK_H_INC1.UDED#defineSTACK_H_INC1.UDED#defineSTACKSIZEIOOO#defineE1.emTypeintc1.assStack(pub1.ic:E1.emType*a;inttop;intbase;pub1.ic:Stack():top(-1.),base(0)a二newE1.emTypeSTACKSIZE;)-Stack()(de1.etea;Iboo1.isEmpty();boo1.isFu1.1.();boo1.Pop(EIemType&m);boo1.Push(E1.emTypem);boo1.GetTop(EIemType&m);boo1.Print_Stack();1;#endif/STACK_HJNC1.UDEDMain.cpp#inc1.ude<iostream>#inc1.ude,Stack.h"usingnamespacestd;intmain()(Stackstack_test;ints;cout«"请输入你要操作的序号"<<end1.;cout«"0退出,1判断栈是否为空,2判断栈是否满,3得到栈顶元素”VVend1;cout«"4插入一个栈顶元素,5删除一个栈顶元素,6输出栈里的所有元素”<vend1.;whi1.e(true)(cin»s;switch(s)(case0:return0;break;case 1:if(stack-test.isEmpty()cout«”此栈目前是个空栈,请往里面插入元素”<<end1.;e1.secout«”此栈不为空”end1.;break;case 2:if(stack-test.isFu1.1.()cout«"此栈目前已满"<<end1.;e1.secout«"此栈还没满"<<end1.;break;case 3:E1.emTypetop;if(stack-test.GetTop(top)cout«"此栈的栈顶元素为:"<<top«end1.;e1.secout«”得到栈顶元素失败"v<end1.;break;case 4:cout«”请输入你需要插入的栈顶元素的值:E1.emTypem;cin»m;if(stack_test.Push(m)COUt«"插入栈顶元素成功"v<end1.;e1.secout«"插入栈顶元素失败"v<end1.;break;case 5:E1.emTypen;if(stack-test.Pop(n)COUt«"此栈的栈顶元素为:你已将其删除”end1.;e1.secout«"删除栈顶元素失败"end1.;break;case 6:if(!stack_test.Print_Stack()cout«"输出失败"v<end1.;break;defau1.t:cout«”你输出的操作数不在范围内,请重新输入"v<end1.;break;2.2Qucuc.cpp:#inc1.ude<iostream>#inc1.ude"Queue.huusingnamespacestd;boo1.Queue:isEmpty()(returnfront_=rear_;)boo1.Queue:isFu1.1.()intt;t=(rear.+1)%QUEUESIZE;returnt=front_;boo1.Queue:GetHeadAndEnd(E1.emType&head,EIemType&end_)(if(!isEmpty()head=*(a+front_);end_=*(a+rear_-1);returntrue;returnfa1.se;1boo1.Queue:EnQueue(E1.emTypem)(if(isFu1.1.()(*(a+rear_)=m;rear_+;rear_%=QUEUESIZE;returntrue;)returnfa1.se;)boo1.Queue:DcQueue(E1.emType&m)(if(!isEmpty()(m=*(a+front_);front_+;front_%=QUEUESIZE;returntrue;)returnfa1.se;)boo1.Queue:Print()(if(!isEmpty()(for(inti=front_;(i-1)!=rear_;i+)i%=QUEUESIZE;cout«*(a+i)«"1cout«end1.;returntrue;cout«"HKTCaH1.©y'«end1.;returnfa1.se;)Queue.h:#ifndefQUEUEHJNC1.UDED#defineQUEUE_H_INC1.UDED#defineQUEUESIZEIOOO#defineE1.emTypeintc1.assQueue(pub1.ic:intfront前面intrear_;后面E1.emType*a;pub1.ic:Queue():front_(0),rear_(0)a=newE1.emTypeQUEUESIZE;I-Queue()de1.etea;Iboo1.isEmpty();boo1.isFu1.1.();boo1.GetHeadAndEndCE1.emType&head,EIemType&end_);boo1.EnQueue(EIemTypem);boo1.DeQueue(EIemType&m);boo1.Print(););#endif/QUEUE_HNC1.UDEDMain.cpp#inc1.ude<iostream>#inc1.ude"Queue.huusingnamespacestd;intmain()(Queuequeue_test;ints;cout«"请输入你要操作的序号"<<end1.;cout«"0退出1判断队列是否为空2判断队列是否满3得到队头和队尾元素”«end1.;COUt«"4插入一个队尾元素5删除一个队头元素6输出队列里的所有元素"<<end1.;whi1.e(true)(cin»s;switch(s)caseO:returnO;break;case 1:if(queue_test.isEmptyO)COUt«”此队列目前是个空队列,请往里面插入元素”<<end1.;e1.secout«"此队列不为空"v<end1.;break;case 2:if(queue-test.isFu1.1.()cout«"此队列目前已满"<<end1.;e1.secout«"此队列还没满"v<end1.;break;case 3:EIemTypehead,end_;if(queue_test.GetHeadAndEnd(head,end_)(cout«"此队列的队头元素为“<vhead«end1.;cout«"此队列的队尾元素为“<vend_«end1.;)e1.secout«"操作失败"v<end1.;break;case 4:cout«”请输入你需要插入的队尾元素的值:E1.emTypem;cin»m;if(queue-test.EnQueue(m)cout«"插入队尾元素成功"<<end1.;e1.secout«"插入队尾元素失败"v<end1.;break;case 5:E1.emTypen;if(queuc-test.DeQueue(n)COUt<v"此队列的队头元素为:"v<n<v",你已将其删除"VVend1.;e1.secout«"删除队头元素失败"v<end1.;break;case 6:if(!queue-test.Print()cout«"输出失败"v<end1.;break;defau1.t:cout«"你输出的操作数不在范围内,请重新输入"v<end1.;break;)2.31.ist.cpp#inc1.ude<iostream>#inc1.ude"1.ist.h"usingnamespacestd;boo1.1.ist:Append(intindex,E1.emTypem)(if(index<O)(returnfa1.se;)1.Node*p=Head;inti=O;whi1.e(p&&i<index)+i;p=p->next;if(NU1.1.=p)returnfa1.se;11.Node*q=new1.Node();q->data=m;q->next=p->next;p->next=q;returntrue;)boo1.1.ist:Prepend(intindex,E1.emTypem)(if(index<1)returnfa1.se;1.Node*p=Head;inti=O;whi1.e(p&&i<index-1)(+i;p=p->next;1if(NU1.1.=p)returnfa1.se;11.Node*q=new1.Node();q->data=m;q->next=p->next;p->next=q;returntrue;)boo1.1.ist:Remove(E1.emType&m,intindex)(if(index<1)returnfa1.se;1.Node*p=Head;inti=O;whi1.e(NU1.1.!=p&&i<index-1)(+i;p=p->next;Iif(p=NU1.1.HNU1.1.=p->next)(returnfa1.se;I1.Node*q=p->next;p->next=q->next;m=q->data;de1.eteq;returntrue;1boo1.1.ist:Find(EIemType&m,intindex)(1.Node*q;q=Head->next;if(index<=O)(cout«"输出的index不合法"<<end1.;returnfa1.se;Ifor(inti=1;q!=NU1.1.&&i<=index;i+)(q=q->next;Im=q->data;returntrue;1void1.ist:Print()(1.Node*p=Head->next;whi1.e(p)(cout«p->data«"p=p->next;cout«end1.;1.ist.h:#ifndef1.IST_HNC1.UDED#define1.IST.HJNC1.UDED#defineE1.emTypeintc1.ass1.Nodea(pub1.ic:1.Node*next;E1.emTypedata;pub1.ic:1.NodeOidata(O),next(NU1.1.);c1.ass1.ist(1.Node*Head;pub1.ic:1.ist()Head=new1.Node();)-1.ist()1.Node*p=Head;1.Node*q;whi1.e(!p)(q=p;p=p->next;de1.eteq;)boo1.Append(intindex,E1.emTypem);boo1.Prepend(intindex,E1.emTypem);boo1.Remove(EIemType&m,intindex);boo1.Find(E1.emType&m,intindex);voidPrint();;#endif/1.1.STj4NC1.UDEDMain.cpp:#inc1.ude<iostream>#inc1.ude"1.ist.h"usingnamespacestd;intmain()(1.ist1.ist_test;ints;intindex;E1.emTypem;cout«"请输入你要操作的序号"<<end1.;cout<v"0退出1在index前插入元素2在index后插入元素"<<end1.;cout«,'3删除index元素4查找index元素5输出所以元素"<<end1.;whi1.e(true)(cout«"请输入你要操作的序号"<<end1.;cin»s;switch(s)case0:return0;break;case 1:index=O;cout«”请输入插入元素的位置及数值”<<end1.;cin»index»m;1.ist_test.Append(index,m);break;case 2:index=O;cout«”请输入插入元素的位置及数值”<<end1.;cin»index»m;1.ist_test.Prepend(index,m);break;case 3:index=O;cout«"请输入删除元素的位置"v<end1.;cin»index;1.ist_test.Remove(index,m);cout«"你已删除"<<m«"元素"<<end1.;break;case 4:index=O;E1.emTypem;cout«"请输入查找元素的位置"v<end1.;cin»index;1.ist_test.Find(index,m);COUt<v"你查找的元素为"«m«end1.;break;case 5:1.ist_test.Print();break;defau1.t:cout«”你输出的操作数不在范围内,请重新输入"v<end1.;break;Ireturn0;F:编写程序shiyan2.3binDebugexpriment_two_1.ist.exe要de要in你天出除入素W×edendn .1Si找号S查号序1 4序的2年邛变X后插入元素5输出所以元素艘狗拼音输入法半二记录成绩(涂改无效)合格不合格口【五、实验结果分析】根据理论知识对所得到的实验数据或结果进行解释、分析。对实验结果所作的一般性的判断、归纳、概括,实验的心得体会、建议等。1,、熟练应用C+等语法.C和C+语言要掌握牢固。2、对于栈、队列、线性表等数据结构要熟练的掌握。3、正确理解类和对象的含义4、通过此次试验明白了自己的不足;知识的缺乏。