猴子选大王课程设计说明书
用c++编写程序猴子选大王

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

i am the king of monkeies
问题描述
一群猴子都有编号,编号是1,2,„„m,这群猴
子按照顺序围坐成一圈,从第一个开始数,每数到第
n个,该猴子就要离开此圈,这样依次数下来,直到 圈中只剩下最后一只猴子,则该猴子为大王。
我们选择用一个循环链表来完成
该设计,设计一个猴子的结构体,
直至剩下最 后一个链表
单链表的删除
为了删除第i个猴子Mi,必须找到猴子的存储地址。 该存储地址是在其直接前趋结点Mi-1的next域中,因 此,必须首先找到Mi-1的存储位置p,然后令p– 图解 >next指向Mi的直接后继结点,即把Mi从中赶出。
算法设计与实现
1. 对每一个猴子进行编号 2. 3. 每数到n便删除该猴子,当循环单链表只剩一个时, 主函数 r=q=(listnode *)malloc(sizeof(listnode)); int main() 输出该编号 for(i=1;i<=n-1;i++) for(i=1;i<n;i++){ { { p=(listnode*)malloc(sizeof(listnode)); linklist r; for(j=1;j<=k-1;j++) p=p->next; q->data=i; int n,k; q=p->next; q->next=p; linklist initring(int n,linklist r); p->next=q->next; q=p; linklist deletedeath(int n,int k,linklist r); if(i % 10==0) } free(q); void outring(int n,linklist r); } p->data=n; printf("请输入猴子总数m:"); printf("\n"); p->next=r; scanf("%d",&n); r=p;return r; } r=p; printf("请输入n:"); void outring(int n,linklist r) scanf("%d",&k); { int i; r=initring(n,r); listnode *p; r=deletedeath(n,k,r); p=r; printf("猴子大王:"); outring(n,r); printf("%4d\n",p->data);
monkey

课程设计说明书
2.1.4 2.1.4.创建单向基本链表基本算法
创建循环单链表函数 采用头插法创建单向循环链表 Status CreateList(elemtype m) { List head, p; head = (List)malloc(sizeof(struct Node)); //*为头指针申请两个空间*// head->next = head; //*一共有 m 个猴子,所以建立含有 m 个结点的单向循环链表*// for (i = 1; i < m; ++i) { p = (List)malloc(sizeof(struct Node)); / /*为结点申请两个空间*// p->next = head->next; head->next = p; }//*利用 for 循环实现链表的创建*// p = head; //*将指针 p 指向表头*//
No.8
沈阳大学
课程设计说明书
2.1.6 2.1.6 主函数方案设计
No.9
在主函数中首先设计程序的登陆界面信息,用户可以根据界面的提示,完成猴子选大 王的基本操作过程,为了使操作更加人性化,使输入猴子的数目 m 和决定要淘汰的猴子 编号 n,通过键盘输入,若输入错误是(m<n),界面将用英文提示输入错误请重新输入, ,若输入正确,程序将显示运行后的结果,显示最后猴子大王的编号,并显示被淘汰猴子 的编号,程序运行完毕。 在主函数中,在用户输入结束后,分别调用创建链表函数 CreateList(elemtype m)和猴 子选大王参数 LinkedList(elemtype num_monkey, elemtype number),经过一些列的运 算,最后得出猴子大王的编号,及其被淘汰的猴子的编号,以上即为函数的基本功能的 实现过程。
猴子选大王数据结构课程设计报告内附详细注释

1.需求分析问题定义:一堆猴子都有编号,编号是1,2,3…n,这群猴子(n个)按照1-n的顺序围坐一圈,从第1个开始数,每数到第m个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
m,n键盘输入,且m<n,输出为大王的猴子的号数。
问题分析:根据任务描述可知,编号是1,2,3…n的一群猴子按照1-n的顺序围坐一圈,因此可以用指针指向数组的方法给数组赋值,输入n值和m值,为保证m<n,用一个while( )#include<stdio.h>#include<stdlib.h> //使用calloc()函数void FindKing_pointer(int,int,int*);//移动指针法找大王void Initialize(int,int*);//初始化数组整形和指针型int main(){int m,n,*ptr;printf("输入猴子数与出局时报的数\n");scanf("%d %d",&n,&m);while(n<m){printf("输入数据有误,请重新输入!\n"); printf("输入猴子数与出局时报的数\n"); scanf("%d %d",&n,&m);}ptr=(int *)calloc(n,sizeof(int));Initialize(n,ptr);FindKing_pointer(m,n,ptr);free(ptr);return 0;if(ptr2==ptr+n)ptr2=ptr;/*指针所指元素不为0时计数器加1.*/if(*ptr2!=0)i++;/*计数器数到m时将指针所指元素设为0*/ if(i==m){*ptr2=i=0;count--; //用于终止循环}}/*最后不为0的元素的值即为大王的编号*/for(ptr2=ptr;;ptr2++){if(*ptr2!=0){printf("第%d个猴子是大王\n",*ptr2);break;}}}/*思想是猴子围坐一圈,有N个猴子,开始数数,数到第M个猴子,该猴子就出列,然后再从该猴子的下一个猴子开始数到第M个猴子,直到只剩下一个猴子时。
猴子选大王上机报告

重庆交通大学信息科学与工程学院综合性设计性实验报告专业:课程名称:《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指向上一个结点,为下一次数数做准备*/}}二、猴子选大王重点及关键技术分析程序通过循环链表较好的实现了猴子选大王的功能,但是还是有许多值得思考的地方。
猴子选大王课程设计报告

四、参考文献
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. 学生能够理解故事《猴子选大王》的主要情节,掌握故事中出现的生词和关键句型。
2. 学生能够运用一般现在时和一般过去时描述故事中猴子的行为和动作。
3. 学生了解并掌握故事中所传达的公平、公正和团队合作的重要性。
技能目标:1. 学生能够通过听力训练,提高对英语语音、语调的辨识能力。
2. 学生能够通过角色扮演,锻炼口语表达和沟通能力。
3. 学生能够运用创意思维,编写属于自己的猴子选大王故事。
情感态度价值观目标:1. 学生通过学习故事,培养公平竞争、尊重他人的价值观。
2. 学生在小组合作中,学会倾听、关心和帮助同伴,培养团队协作精神。
3. 学生在课堂活动中,树立自信、勇敢表达自己观点的态度。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能够复述故事《猴子选大王》的主要情节,正确使用故事中的生词和关键句型进行描述。
2. 学生能够在角色扮演活动中,运用一般现在时和一般过去时表达猴子的行为和动作。
3. 学生能够通过小组合作,编写并表演一个关于猴子选大王的故事,展现公平、公正和团队合作的重要性。
4. 学生在课程学习中,积极参与课堂活动,展示良好的倾听、沟通和协作能力,体现出自信、尊重和关心他人的态度。
二、教学内容本节课以《猴子选大王》故事为主线,结合英语课程标准和学生实际情况,组织以下教学内容:1. 故事导入:通过图片、视频等教学资源,引导学生了解故事背景,激发学生的学习兴趣。
2. 故事学习:详细讲解故事《猴子选大王》的情节,重点讲解生词、关键句型和语法知识点。
- 生词:选举、候选、公平、公正、竞争、团队等。
- 句型:一般现在时、一般过去时的陈述句、疑问句和否定句。
- 语法:比较级、最高级的运用。
3. 角色扮演:学生分组进行角色扮演,运用所学知识进行对话练习,锻炼口语表达能力。
4. 小组合作:以小组为单位,编写一个关于猴子选大王的故事,要求运用所学生词、句型和语法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学与计算机学院
课程设计说明书课程名称: 数据结构课程设计
课程代码: 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
指导教师签名日期年月日
系主任审核日期年月日
目录
摘要................................. 错误!未定义书签。
引言.................................. 错误!未定义书签。
1 需求分析.............................. 错误!未定义书签。
1.1任务与分析..................................... 错误!未定义书签。
1.2测试数据....................................... 错误!未定义书签。
2 概要设计.............................. 错误!未定义书签。
2.1 ADT描述....................................... 错误!未定义书签。
2.2程序模块结构................................... 错误!未定义书签。
2.21 结构体定义................................... 错误!未定义书签。
2.3 各功能模块.................................... 错误!未定义书签。
3 详细设计............................. 错误!未定义书签。