
猴子选大王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.所有程序需调试通过。
) 展开
设计题目:猴子选大王
使用班级: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.所有程序需调试通过。
) 展开
3个回答
展开全部
#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);
}
#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);
}
展开全部
#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;
}
#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;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询