joseph环c语言课程设计,Joseph环课程设计.doc

本文档详细介绍了使用C语言在Microsoft Visual C++ 6.0环境下实现约瑟夫环问题的过程。程序设计包括需求分析、概要设计和详细设计,采用单向循环链表数据结构,并提供了用户友好的交互界面。用户可以输入人数、初始值m以及各成员密码,程序将输出出列顺序。此外,文档还包含了程序流程图和模块调用图,便于理解程序逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Joseph环课程设计

目 录

1.需求分析说明

1.Joseph环的总体功能要求

2. 各功能模块的功能描述

3. 需要测试的数据

2.概要设计说明

1. 程序流程图

2. 模块调用图

3.详细设计说明

1. 主函数模块

2. 节点数据结构体定义模块

3.单向循环链表创建模块

4.结点删除模块

5.输入子模块

4.调试分析

5.用户使用说明

6.课程设计总结

7.测试结果

8.参考书目

一、需求分析说明

1. Joseph环的总体功能要求:

Joseph环的总体目标:在Microsoft Visual C++ 6.0 的开发环境下,利用所学C语言和数据结构的相关知识,编写约瑟夫环(Joseph)问题的程序,要求如下:

编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。

(1)界面友好,易与操作。

(2)要求使用单向循环链表模拟过程

(3)输入报数上限值m和人数上限,密码,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序7

各成员密码:3 1 7 2 4 7 4

初始值m:20

2、总成员数n:7

各成员密码:3 1 7 2 4 7 4

初始值m:6

二、概要设计说明

1. 程序流程图

2. 模块调用图:

抽象数据类型的定义为:

ADT LinkList

{

数据对象:D={ ai | ai ∈termset,i=1,2,……n,n>=0},

termset中每个元素包含编号,密码,和一个指向下一节点的指针

数据关系:R1={ | ai-1, ai ∈D , i=2,……n}

}

基本操作:

status CreateList_Circle(member **,int);创建循环链表

status DeleteNode(member **);删除链表结点

此抽象数据类型中的一些常量如下:

typedef int status;

#define OVERFLOW -2

#define OK 1

#define ERROR 0

三、详细设计说明

1、主函数模块

调用各功能模块,实现单向链表循环、输入、输出等功能。

2.节点数据结构体定义模块

joseph环的组成成员由密码(password)和序号(No)组成,循环链表的存储结构如下:

typedef struct LNode

{

int password; //密码

int No; //序号

struct LNode *next; //下一成员指针

}member; //成员结构体

任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。status CreateList_Circle(member **p_head,int n)

{

int i;

member *tail,*p;

*p_head=(member *)malloc(sizeof(member));

if (!(*p_head)) return OVERFLOW;

(*p_head)->No=1; //储存成员一序号

printf ("请输入成员1的密码:\n");

scanf ("%d",&(*p_head)->password); //储存成员一密码

while((*p_head)->password<=0)

{

printf("请输入正值:");

scanf ("%d",&(*p_head)->password);

}

tail=*p_head;

tail->next=NULL;

for (i=2;i

{

p=(member *)malloc(sizeof(member));

if (!p) return OVERFLOW;

p->No=i; //储存成员序号

printf ("请输入成员%d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值