猴子选大王C语言程序设计课程设计

《C语言程序设计课程设计》任务书设计题目:猴子选大王使用班级:09师范/非师指导老师:陈美荣课程设计教学目的及基本要求:1.了解并掌握算法的设计方法,具备初步的独立分析和... 《C语言程序设计课程设计》任务书

设计题目:猴子选大王

使用班级:09师范/非师

指导老师:陈美荣

课程设计教学目的及基本要求:
1.了解并掌握算法的设计方法,具备初步的独立分析和设计能力;
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
实现的任务:
(1)每个猴子记录中包含编号、年龄等信息;
(2)创建猴子记录链表;
(3)根据输入的整数进行计数,依次淘汰猴子并输出;
(4)最后输出大王。
设计内容:
1. 使用链表实现猴子记录的存储,猴子记录应该包括编号、年龄等信息,是本程序的核心数据结构,结构定义如下:
typedef struct node
{
char num[5]; /*猴子编号*/
int age; /*年龄*/
int flag; /*淘汰标记*/
struct node *next;
}NODE,*Nodeptr;
2.程序应具有以下基本功能:
(1)创建猴子记录链表:从键盘输入一定数量(m个)的猴子记录,形成循环链表。
(2)根据输入的整数n,从第一个猴子开始报数(从1开始),报到n的淘汰,并输出淘汰者的信息;剩下的继续从1开始报数。
(3)输出最后剩下的猴子(大王)的信息。

设计要求:
1.核心数据结构用到的结构体要采用动态内存分配和链表结构。
2.使用循环链表实现猴子选大王的功能。
3.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。
4.对系统进行功能模块分析、画出总流程图和各模块流程图。
5.所有程序需调试通过。

展开
 我来答
mine231545
2011-04-02
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
#include<stdio.h>
#include<stdlib.h> //使用calloc()函数
void FindKing_pointer(int,int,int*);//移动指针法找大王
void FindKing_MoveArray(int,int,int*);//移动数组法找大王
void Initialize(int,int*);//初始化数组
int main()
{
int m,n,*ptr;
printf("输入猴子数与淘汰时报的数\n");
scanf("%d %d",&n,&m);
ptr=(int *)calloc(n,sizeof(int));
Initialize(n,ptr);
FindKing_pointer(m,n,ptr);
Initialize(n,ptr);
FindKing_MoveArray(m,n,ptr);
free(ptr);
return 0;
}

/*
在数组中依次填入1,2,3,4,…
*/
void Initialize(int n,int *ptr)
{
int i;
for(i=0;i<n;i++)
ptr[i]=i+1;
}

/*
循环一次指针向后移一位,所指元素不为0时计数器加1.
移动指针,当计数器数到m时将指针所指元素设为0.
*/
void FindKing_pointer(int m,int n,int *ptr)
{
int i,count,*ptr2;
count=n-1; //count=0时终止循环
ptr2=ptr; // 移动ptr2进行查找
for(i=0;count;ptr2++)
{
if(ptr2==ptr+n)
ptr2=ptr;
/*指针所指元素不为0时计数器加1.*/
if(*ptr2)
i++;
/*计数器数到m时将指针所指元素设为0*/
if(i==m)
{
*ptr2=i=0;
count--; //用于终止循环
}
}
/*最后不为0的元素的值即为大王的编号*/
for(ptr2=ptr;;ptr2++)
{
if(*ptr2)
{
printf("第%d个猴子是大王\n",*ptr2);
break;
}
}
}

/*
计数器i循环时自增,当i=m时用j标记当前数组元素下标
并该移动元素后的其它元素,同时i=0,数组长度n--,n=1时终止循环
最后数组首元素的值即为大王的编号
*/
void FindKing_MoveArray(int m,int n,int *ptr)
{
int i=0;
int j,k;
for(j=0;n-1;i++)
{
if(i+1==m)
{
j=(i+j)%n;
if(n-1-j)
for( k=j+1;k%n;k++) //移动j元素后的其它元素
ptr[k-1]=ptr[k];
n--;
i=-1;
}
}
printf("第%d个猴子是大王\n",*ptr);
}
xiaosuo623
2011-03-25 · 超过19用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:47万
展开全部
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
char num[5]; /*猴子编号*/
int age; /*年龄*/
int flag; /*淘汰标记*/
struct node *next;
}NODE,*Nodeptr;

NODE * createList(NODE * monList, int number)
{
int count = 0;
NODE *q;
while(count < number)
{
NODE * p = (NODE*)malloc(sizeof(NODE));
printf("请输入猴子的编号和年龄(以空格隔开):");
scanf("%s%d",p->num,&p->age);
p->flag = 1;

if(monList == NULL)
{
monList = p;
q = monList;
}
else
{
q->next = p;
q = q->next;
}

count++;
}
q->next = monList;

return monList;
}
void outList(NODE * monList,int num)
{
NODE *p = monList;
int start=1,number=1;
int max;

printf("请输入最大报数:");
scanf("%d",&max);

while(number<num)
{
if(p->flag == 1)
{
if(start == max)
{
p->flag = 0;
start = 0;
number++;
}
start++;
p = p->next;
}
else
p = p->next;
}
}
void display(NODE* monList)
{
NODE *p = monList;

while(1)
{
if(p->flag == 1)
{
printf("猴子王的编号为:%s, 年龄为:%d\n",p->num,p->age);
return;
}
p = p->next;
}
}
int main()
{
int iNum;
Nodeptr monList = NULL;

printf("请输入猴子的个数:");
scanf("%d",&iNum);

monList = createList(monList,iNum);

outList(monList,iNum);

display(monList);
return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
852938046
2011-03-25
知道答主
回答量:24
采纳率:0%
帮助的人:3.5万
展开全部
q
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式