您好,欢迎访问三七文档
本科学生综合性实验报告软件工程技能实践I学号0154131姓名王志远专业软件工程班级软件155班实验项目名称约瑟夫环指导教师赵晓平开课学期2017至2018学年第三学期一、实验设计方案实验名称:约瑟夫环实验时间:2018.07.04—2018.07.11实验场地:机房项目组成员:王志远软件环境:MicrosoftVisualC++1、实验任务与目的(简单介绍实验内容,说明实验任务和目的)(1)加强对无头节点循环列表的运用;(2)加深对循环逻辑的理解;(3)在创建程序实现约瑟夫环时,加强对程序的使用;问题描述:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。——————————————————————————————————————2、实验思路(详细描述解决问题的整体思路、涉及的算法思想及数据结构等)首先,我建立了一个结构体Node,structNode{intnum;intmima;Node*next;};然后我建立了类josephclassjoseph{public:voidshuru(int);//输入函数voidshuchu(int);//输出函数private:Node*head;//头指针Node*p;Node*q;intn;//人数};voidjoseph::shuru(intlen){n=len;cout请输入第1个人的密码:;//第一个人p=newNode;cinp-mima;p-num=1;head=p;//保存头结点地址q=p;//q保存p的地址for(inti=2;i=n;i++){//后面几个人p=newNode;cout请输入第i个人的密码:;cinp-mima;p-num=i;q-next=p;q=p;}q-next=head;//将最后一人的后继指向第一个人}p在输入函数中用于创建链表,表示当前人,q表示前一个人,并将前一个人的后继指向当前人,最后将尾结点的后继指向头结点。voidjoseph::shuchu(intm){Node*p;while(n){for(inti=1;im;i++)q=q-next;//报数完毕q表示出列人的前驱coutq-next-num;m=q-next-mima;p=q-next;q-next=q-next-next;deletep;//释放出列人的空间n--;}}q在输出函数中,表示出列人前驱,起始是所有人的最后一个,依次向前报数,用m保存出列人密码,作为下次报数次数。二、实验结果与分析1、程序结构(程序结构图,主要函数的功能描述,算法实现的细节等)#includeiostreamusingnamespacestd;structNode{intnum;//编号intmima;//密码Node*next;//后继指针};classjoseph{public:voidshuru(int);//输入函数voidshuchu(int);//输出函数private:Node*head;//头指针Node*p;Node*q;intn;//人数};voidjoseph::shuru(intlen){n=len;cout请输入第1个人的密码:;//第一个人p=newNode;cinp-mima;p-num=1;head=p;//保存头结点地址q=p;//q保存p的地址for(inti=2;i=n;i++){//后面几个人p=newNode;cout请输入第i个人的密码:;cinp-mima;p-num=i;q-next=p;q=p;}q-next=head;//将最后一人的后继指向第一个人}voidjoseph::shuchu(intm){Node*p;while(n){for(inti=1;im;i++)q=q-next;//报数完毕q表示出列人的前驱coutq-next-num;m=q-next-mima;p=q-next;q-next=q-next-next;deletep;//释放出列人的空间n--;}}intmain(){josephA;intn,m;cout请输入人数:;cinn;A.shuru(n);cout请输入初始m的值:;cinm;cout出列顺序是:;A.shuchu(m);coutendl;}——————————————————————————————————————2、测试设计与数据(设计充足合理的测试用例,说明测试策略)假设n人作为约瑟夫环的节点,多次改变n值进行程序测试——————————————————————————————————————3、实验现象及结果(应用文字和程序运行的截图说明测试现象,并解释结果)运行程序——————————————————————————————————————4、实验分析与探讨(对测试现象和观察结果进行分析,探讨算法,提出见解)设计一个约瑟夫(Joseph)类,其中包含n,m整型变量和首结点指针h,构造函数用于建立有n个结点的不带头结点的循环单链表h,DisPlay()成员函数用于输出约瑟夫序列,在每个结点出列时释放。——————————————————————————————————————5、实验总结(成败得失,实验关键,算法改进,程序改善,自我评价)一开始写代码的时候,由于适应了C语言的编写习惯,导致代码整体风格偏向C语言,且没有分函数来执行程序,导致main函数里有许多东西,看起来太臃肿,条理不够清晰,后来在程序被老师验收后,我进行了修改,重新整理了代码,并完成了实验报告。经过这次练习,我发现我有很多没有注意的地方,可以看出我编写程序的习惯不太好,其次我发现我对于书本上的知识吸收不完全,导致看了书之后依然不会运用。我要在以后的学习中注意以下几点:认真上好专业课,多在实践中锻炼自己。写程序要考虑周到,严密。在做设计的时候要有信心,有耐心,不浮躁。认真学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。在课余时间多写程序,熟练掌握在调试程序过程中常见的错误,一边节约调试程序的时间。指导老师评语:得分:签名:年月日
本文标题:约瑟夫环
链接地址:https://www.777doc.com/doc-5411155 .html