猴子选大王课程教学设计报告
用c++编写程序猴子选大王

用C++编写程序猴子选大王(总7页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--湖南人文科技学院计算机系课程设计说明书课程名称: 数据结构课程代码:题目: 猴子选大王年级/专业/班: 06级计算机科学与技术专业一班学生姓名:学号:06408109 06408102 06408107 06408122 06408103指导教师: 刘刚常开题时间: 2008 年 6 月 16 日完成时间: 2008 年 6 月 29 日目录摘要..................................................................................................................... 错误!未定义书签。
一、引言............................................................................................................. 错误!未定义书签。
二、设计目的与任务......................................................................................... 错误!未定义书签。
三、设计方案....................................................................................................... 错误!未定义书签。
1、总体设计......................................................................................................... 错误!未定义书签。
猴子选大王上机报告

重庆交通大学信息科学与工程学院综合性设计性实验报告专业:课程名称:《C语言程序设计》题目:数组和链表的操作班级:设计者:学号:指导教师:完成时间:2014年6月16日重庆交通大学信息科学与工程学院综合性设计性实验任务书重庆交通大学信息学院综合性设计性实验评分表数组和链表的操作——猴子选大王程序设计报告一、系统的功能需求及分析功能:一群猴子共有m只,编号为1,2,……m,围坐一圈,从第1号猴子开始依次报数,数到n的猴子退出,然后从退出的下一只猴子继续从1开始报数,依次循环,直到圈内剩下一只猴子为止,该编号的猴子就是所选出的大王。
分析:用数组实现:先对数组进行初始化,然后将报到要删除的那个数字的猴子编号赋值为-1,每赋值一次,猴子数减一,再重新报数。
当猴子数只有一只的时候,输出猴子编号不为-1的那个编号。
用链表实现:先建立一个无头节点的单向循环的链表,然后将报到要删除的那个数字的猴子编号删除,以此循环,直到一个节点的下一个指向自己,最后输出猴子编号。
二、设计说明(一) 用数组实现1、数组的初始化for(i=0;i<m;i++)a[i]=i+1;2、算法流程图及说明(二) 用链表实现1、节点的定义struct monkey{int a;struct monkey *next;}*p,*q,*p1,*q1,*p2;2、链表的建立for (int i=0;i<m;i++){p=(struct monkey *)malloc(sizeof(struct monkey));p->a=i+1;p->next=NULL;if (i==0){head=p;q=head;}else{q->next=p;q=q->next;}}q->next=head;p2=head;p1=head;3、算法流程图及说明三、主要代码(一) 用数组实现#include<stdio.h>void main(){int a[10000];int m,n,x,b,i;printf("请输入猴子的只数:");scanf("%d",&m);printf("请输入要删除的猴子编号:");scanf("%d",&n);for(i=0;i<m;i++)a[i]=i+1;b=m;x=0;for(i=0;b!=1;i++){if(a[i%m+1]!=-1){x++;}if(x==n && a[i%m+1]!=-1){a[i%m+1]=-1;b--;x=0;}}for(i=1;i<=m;i++)if(a[i]!=-1)printf("猴子大王编号为:%d\n",i);}(二) 用链表实现#include <stdio.h>#include <stdlib.h>struct monkey{int a;struct monkey *next;}*p,*q,*p1,*q1,*p2;void main(){struct monkey *head;int m,n;printf("请输入猴子的只数:");scanf("%d",&m);printf("请输入想删除猴子的编号:");scanf("%d",&n);for (int i=0;i<m;i++){p=(struct monkey *)malloc(sizeof(struct monkey));p->a=i+1;p->next=NULL;if (i==0){head=p;q=head;}else{q->next=p;q=q->next;}}q->next=head;p2=head;p1=head;for (i=1;;i++){if (i==n-1){q1=p1->next;p1->next=q1->next;free(q1);i=0;}p1=p1->next;if (p1->next==p1) break;}printf("猴子大王的编号为%d\n",p1->a);}四、系统功能测试功能:一群猴子共有m只,编号为1,2,……m,围坐一圈,从第1号猴子开始依次报数,数到n的猴子退出,然后从退出的下一只猴子继续从1开始报数,依次循环,直到圈内剩下一只猴子为止,该编号的猴子就是所选出的大王。
猴子选大王

一、猴子选大王课题描述一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1到m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
猴子选大王系统设计1、猴子选大王总体设计结构图2、系统数据的数据结构设计猴子的存放采用链式存储结构,利用循环链表来实现建立的,其表示方法是递归定义的.(1)、变量说明程序中使用的存储结构:ListNode结构体Struct ListNode{Int data; //数据域Struct ListNode *nextPtr; //指向后继结点的指针域};Int monkeys,count //分别为猴子的个数和猴子的报数HeadPtr,tailPtr,currentPtr //分别为链表的头结点,尾结点和结点HeadPtr1,headPtr2 //分别为选大王的单循环链表和由淘汰的猴子所构成的链表(2)、函数说明DestroyList (LISTNODEPTR headPtr) //用destroylist函数来释放选大王链表的各个结点CreateList (int n) //创建循环链表,容纳n个猴子Printf(“input the amount of monkeys:”) //用printf函数来提示输入的内容Scanf(“%d”,&monkeys) //用scanf函数来输入猴子的个数Printf(“input the count number:”) //用printf函数来提示报数的数Scanf(“%d”,&count) //用scanf函数来输入每次数到的猴子就出局(3)、while循环说明while(currentPtr1!=currentPtr1->nextPtr){/*往后数一个猴子*/prePtr1=currentPtr1;currentPtr1=currentPtr1->nextPtr;count++;/*若数到n,则淘汰currentPtr指向的猴子*/if(count%n==0){/*从headPtr1指向链表中拆下currentPtr指向的结点*/prePtr1->nextPtr=currentPtr1->nextPtr;currentPtr1->nextPtr=NULL;/*将currentPtr1指向的结点插入到headPtr2指向链表中*/if(headPtr2==NULL){/*若headPtr2指向的为空链表*/headPtr2=currentPtr1;tailPtr2=currentPtr1;}else{ /*将拆下来的结点组装到headPtr2指向的链表上*/ tailPtr2->nextPtr=currentPtr1;tailPtr2=tailPtr2->nextPtr;}currentPtr1=prePtr1; /*currentPtr1指向上一个结点,为下一次数数做准备*/}}二、猴子选大王重点及关键技术分析程序通过循环链表较好的实现了猴子选大王的功能,但是还是有许多值得思考的地方。
猴子选大王课程设计说明书

数学与计算机学院课程设计说明书课程名称: 数据结构课程设计课程代码: 6014389题目: 猴子选大王年级/专业/班: 2010级软件工程2班学生姓名: 蒋童学号:开始时间: 2011 年11 月9 日完成时间: 2011 年12 月30 日课程设计成绩:指导教师签名:年月日数据结构课程设计任务书学院名称:数学与计算机学院课程代码:__ 6014389______ 专业:软件工程年级:2班一、设计题目猴子选大王二、主要内容一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
三、具体要求及应提交的材料要求:使用数组和循环链表等两种以上的存储方式来做输入数据:输入m,n m,n 为整数,n<m输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能用C/C++语言编程实现上述内容,对每个问题写出一个算法实现,并按数学与计算机学院对课程设计说明书规范化要求,写出课程设计说明书,并提交下列材料:1)课程设计说明书打印稿一份2)课程设计说明书电子稿一份;3)源程序电子文档一份。
四、主要技术路线提示可采用数组、链表数据结构实现。
在此基础上用C/C++实现其操作。
五、进度安排按教学计划规定,数据结构课程设计为2周,其进度及时间大致分配如下:六、推荐参考资料[1] 严蔚敏,吴伟民.数据结构.清华大学出版社出版。
[2] 严蔚敏,吴伟民. 数据结构题集(C语言版) .清华大学出版社.2003年5月。
[3] 唐策善,李龙澎.数据结构(作C语言描述) .高等教育出版社.2001年9月[4] 朱战立.数据结构(C++语言描述)(第二版本).高等出版社出版.2004年4月[5] 胡学钢.数据结构(C语言版) .高等教育出版社.2004年8月[6] 徐孝凯等著.数据结构(C语言描述).清华大学出版社.2004指导教师签名日期年月日系主任审核日期年月日目录摘要................................. 错误!未定义书签。
猴子选大王

《数据结构课程设计》报告专业: 计算机班级: 063学号: 14姓名: XXX指导老师: XXX时间: 2008.6.24-2008.7.4成绩:目录题目一编程实现将两个有序的线性进行合并,要求同样的数据元素只出现一次。
(3)题目二猴子选大王。
(6)题目三最少换车数。
(9)题目四航空订票系统。
(14)摘要(题目一):编程实现将两个有序的线性进行合并,要求同样的数据元素只出现一次。
(必做)解题思路由于两个线性表中的元素呈有序排列,在进行合并的时候,依次比较,哪个线性表的元素值小,就先将这个元素复制到新的线性表中,若两个元素相等,则复制一个即可,这样一直到其中的一个线性表结束,然后将剩余的线性表复制到新的线性表中即可。
1。
引言线性表是一个相当活的数据结构,它的长度可根据需要增长或缩短。
即对线性表不仅可以防问,还可以进行插入和删除以及合并2。
需求分析由于两个线性表中的元素呈有序排列,在进行合并的时候,依次比较,哪个线性表的元素值小,就先将这个元素复制到新的线性表中,若两个元素相等,则复制一个即可,这样一直到其中的一个线性表结束,然后将剩余的线性表复制到新的线性表中即可。
3.数据结构设计#include<stdio.h>为包含的库函数4.算法设计void Intilist(int la[10],int M)// 初始化线性表int move ( int a[100],int m) // 对该线性表排序int delem(int la[100],int m) //如果其中有相同的元素,则删除相同的元素5.算法的实现#include<stdio.h>void Intilist(int la[10],int M);int move (int la[100],int M);int delem(int la[100],int M);int M,N;5.2 初始化线性表void Intilist (int L[100],int m){int i;printf ("Please input numbers:\n");for (i=0;i<m;i++)scanf ("%d",&L[i]);printf ("\n");return;5.3 对该线性表排序int move ( int a[100],int m){int i,j,t;for (j=1;j<m;j++)for (i=0;i<m-j;i++)if (a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}m=delem(a,m);printf ("the sorted numbers:\n");for (i=0;i<m;i++)printf ("%d ",a[i]);printf ("\n");return m;}5.4如果其中有相同的元素,则删除相同的元素int delem(int la[100],int m){int i,j;for(i=0;i<m;i++)if(la[i]==la[i+1]){for(j=i;j<m;j++)la[j]=la[j+1];m--;i--;}return m;}5.5 主函数int main (){int la[100], lb[100];int lc[201];int i,j,k;printf("Please input length of la:\n");scanf("%d",&M);Intilist(la,M);M=move (la,M);printf("Please input length of lb:\n"); scanf("%d",&N);Intilist(lb,N);N=move(lb,N);i=j=0;k=0;while ((i<M)&&(j<N))if(la[i]<lb[j]){lc[k]=la[i];k++;i++;}else if (la[i]>lb[j]){lc[k]=lb[j];k++;j++;}else if(la[i]=lb[j]) {lc[k]=la[i];i++;k++;j++;}for(;j<N;j++){lc[k]=lb[j];k++;}for(;i<M;i++){lc[k]=la[i];k++;}for (i=0;i<k;i++)printf ("%d ",lc[i]);printf("\n");return 0;}6.程序运行的结果7.有关技术的讨论通过数组来模拟线性表的插入删除以及排序。
猴王出世教学设计及设计意图8篇

猴王出世教学设计及设计意图8篇(最新版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如工作总结、报告大全、演讲致辞、条据书信、心得体会、党团资料、读后感、作文大全、教学资料、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor.I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, this shop provides you with various types of classic sample essays, such as work summary, report encyclopedia, speeches, articles and letters, experience and experience, party and group information, after reading, composition encyclopedia, teaching materials, other sample essays, etc. I want to know the difference Please pay attention to the format and writing of the sample essay!猴王出世教学设计及设计意图8篇教学设计在起草的过程中,大家都清楚有哪些务必要注意的事项吗,需要重视逻辑严谨。
猴子选大王课程设计报告

四、参考文献
1.H M Peitel,P J Deitei.C How to progrom,second Edition.蒋才鹏等译,C程序设计教程,北京:机械工业出版社,2000
2.Herbert Schild著,王曦若,李沛译,ANSIC标准详解,北京:学院出版社,1994
3、程序的设计思想:
(1)问题分析:“猴子选大王”问题是约瑟夫环问题的一个特例。由于本题目的数据元素个数不可知,所以可使用链表来动态的分配内存空间。而该问题又是一个不断的循环问题所以用循环链表来实现。
(2)总体设计:首先生成一个空链表,并给n个结点分配空间,让单链表的表尾指针指向头结点则生成一个带有n个结点的循环单链表。给每只猴子建立顺序的编号。机型筛选,最后剩下1个猴子时停止运行,得到的结点即为猴子选出大王的编号。
7号猴子报:2
8号猴子报:3 8号猴被淘汰
4号猴子报:1
7号猴子报:2
4号猴子报:3 4号猴被淘汰
7号猴子报:1
胜出:7号猴子Press any key to continue
程序初始状态如下图:
下一组数据:m = 21,n = 2;
运行结果如下:
得到了预期结果
6:程序源代码
#include<stdio.h>
北京化工大学北方学院
课程设计报告
课程名称数据结构课程设计
设计题目猴子选大王
专业、班级软件工程0902班
学号090203
姓名
指导教师周建敏
设计时间2012年9月17日—2012年10月14日
2012年10月10日
一、引言(简要说明设计题目的目的、意义、内容、主要任务等)
大班主题神通广大的美猴王教案

大班主题神通广大的美猴王教案大班主题神通广大的美猴王教案大班主题神通广大的美猴王教案1环境创设1.将幼儿喜爱的《西游记》人物形象悬挂于教室中。
2.将幼儿“我喜欢的《西游记》故事”“我喜欢的《西游记》人物”的绘画作品布置成主题墙。
3.在活动时布置西游记中几种不同的场景。
4.将《西游记》人物图片张贴在美工区,为幼儿塑造形象提供帮助。
生活活动1.在一日生活中的过渡环节等时间播放《西游记》动画片及歌曲,引导幼儿充分感受。
2.在餐点环节中指导幼儿细嚼慢咽,了解细嚼慢咽对身体的好处。
家园共育1.请家长帮助幼儿搜集《西游记》的图书及动画片,与幼儿共同欣赏。
2.请家长在家长欣赏幼儿演唱歌曲《捏泥人》《猪八戒吃西瓜》等,并给予肯定和鼓励。
3.家长知道幼儿在家中练习使用筷子。
教学活动1.次主题一:开展活动:“孙悟空大闹天宫”“捏面人”“师徒四人行”“猪八戒吃西瓜”“悟空分桃”等集体教学活动,让幼儿初步了解孙悟空的性格特征,并对西游记中其他人物产生浓厚的兴趣,熟练演唱歌曲,用彩泥制作师徒四人的形象,较准确地表现其典型特征。
2.次主题二:开展活动:“真假美猴王”“猪八戒背媳妇”“美猴王小剧场”“奇妙的影子”“我们的演出海报”等集体教学活动,让幼儿理解真假美猴王的故事情节,根据乐曲的情绪特点及乐曲结构的变化进行创编动作,了解海报的`艺术特点。
3.次主题三:开展活动:“小猴请客”“三大白骨精”“好玩的金箍棒”“新编美猴王故事会”“《西游记》连环画”“宝物大比拼”等集体活动,让幼儿学习5的组成及加减运算,尝试和同伴合作为动画片配背景音乐,了解连环画的特点,能独立创编并清楚的讲述故事,感受现代化高科技为人们生活带来的便捷。
区域活动美工区:1.“七十二变美猴王”:学创造性地表现美猴王的典型外貌特征,以及不同的动作造型。
2.“小猴吃桃”:掌握画小猴的基本方法,体验一边念儿歌,一边作画的快乐。
3.“制作面具”:掌握用剪刀抠出面具的眼睛、鼻子、嘴巴等镂空部分的技能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程设计题目:猴子选大王学生姓名:吴兆专业:软件工程班级:1321813学号:201320181306指导教师:吴建东2015年1 月9 日东华理工大学目录一:需求分析1.问题描述2.基本要求3.需求分析二:概念设计三:详细设计四:调试分析和测试结果五:总结六:源代码一:需求分析1.问题描述一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m 的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
2.基本要求输入数据:输入m,n m,n 为整数,n<m。
输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能。
3.需求分析1.输入数据m,n。
2.计算出最终猴子大王的序号。
3.模拟出整个过程4.找到合适的数据结构处理这个问题。
5.找到正确的方法解决这个问题。
二:概念设计这个问题属于约瑟夫环问题,根据问题描述得知,该问题中m个猴子围坐在一群形成首尾相接的环,因此可用循环链表解决。
从第n个猴子开始出列相当于从链表中删除一个节点。
该程序主要有三个模块组成,建立循环链表,报数利用循环链表实现猴子的出列,最终剩下的猴子即猴王。
具体步骤如下:第一步首先创建循环链表。
第二步向链表中填入猴子的编号。
第三步找第一个开始报数的猴子。
第四步数到n让这个猴子出列。
第五步接着开始报数,重复第四步,直到剩下最后一个猴子,就是大王。
程序流程图如下:三:详细设计1.程序中使用的存储结构struct L{int num;struct L *next;};int n;int i=0;2.程序中使用的循环结构struct L *LisDelete(struct L *head,int m)//报数为m的退出.{struct L *p,*q;int j=0;p=head;i=i+1;if(p->next==head) return(p);while(j<m-2){p=p->next;j=j+1;}q=p->next;p->next=q->next;head=p->next;printf("%d 第%d个猴子离开.\n",i,q->num);free(q);LisDelete(head,m);}3.主函数void main(){struct L *head;struct L *p;int m,N;printf("********************************************************* \n");printf("猴子选大王:\n");printf(" 一堆猴子都有编号,编号1,2,3...m,这群猴子(m个)按照1-m\n");printf("的顺序围坐一圈,从第1开始数,每数到第n(n<m)个,该猴子就要\n");printf("离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该\n");printf("猴子为大王\n");printf("********************************************************* \n");printf(" 输入n(所有猴子的总数):");scanf("%d",&N);printf(" 输入m(离开的猴子所报的数):");scanf("%d",&m);printf("***********************************\n");if (m>N||m<=0||N<=0){ERROR();}else{if(m==1){printf("结果:第%d个猴子为大王.\n",N);}else{head=creat(N);printf(" 过程:\n");p=LisDelete(head,m);printf("***********************************\n");printf("结果:第%d个猴子为大王.\n",p->num);printf("***********************************\n");}}}四:调试分析和测试结果得到了预期的结果五:总结本次课程设计,参考了相关教科书和参考书对二分法查找与各种排序方法的描述,对相关功能所需结构体和函数有了初步构思之后,经过代码的输入、语法改错,调试执行等过程,完成了一个简单的功能系统。
通过一周时间,从初步思路形成到基本功能完成,对数据结构设计实践与应用部分基本了解了。
从本次课程设计我觉得我应该把所学基础知识与具体问题实践结合,基本知识要扎实,对待问题要各方面分析。
数据结构与算法设计是一种锻炼人清晰思路的科目,我们应该通过多次实践让自己的知识得到巩固。
六:源代码#include <stdio.h>#include <malloc.h>#define NULL 0#define LEN sizeof(struct L)struct L{int num;struct L *next;};int n;int i=0;struct L *creat(int N)//建立动态循环链表.{printf("将猴子顺序编号为:\n");struct L *head;struct L *p1,*p2;n=0;p1=p2=(struct L *)malloc(LEN);p1->num=1;printf("%d ",p1->num);head=NULL;while(p1->num<=N){n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct L *)malloc(LEN);p1->num=n+1;if(p1->num<=N)printf("%d ",p1->num);}p2->next=head;//尾指针指向头指针.printf("\n");printf("***********************************\n");printf("\n");return(head);}struct L *LisDelete(struct L *head,int m)//报数为m的退出.{struct L *p,*q;int j=0;p=head;i=i+1;if(p->next==head) return(p);while(j<m-2){p=p->next;j=j+1;}q=p->next;p->next=q->next;head=p->next;printf("%d 第%d个猴子离开.\n",i,q->num);free(q);LisDelete(head,m);}ERROR(){printf("m>N或者m<=0或者N<=0!!! ERROR!\n");}void main(){struct L *head;struct L *p;int m,N;printf("********************************************************* \n");printf("猴子选大王:\n");printf(" 一堆猴子都有编号,编号1,2,3...m,这群猴子(m个)按照1-m\n");printf("的顺序围坐一圈,从第1开始数,每数到第n(n<m)个,该猴子就要\n");printf("离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该\n");printf("猴子为大王\n");printf("********************************************************* \n");printf(" 输入n(所有猴子的总数):");scanf("%d",&N);printf(" 输入m(离开的猴子所报的数):");scanf("%d",&m);printf("***********************************\n");if (m>N||m<=0||N<=0){ERROR();}else{if(m==1){printf("结果:第%d个猴子为大王.\n",N);}else{head=creat(N);printf(" 过程:\n");p=LisDelete(head,m);printf("***********************************\n");printf("结果:第%d个猴子为大王.\n",p->num);printf("***********************************\n");}}}。