求用c语言编写约瑟夫环的程序

最好再有:1) 需求分析 以无二义性的陈述说明程序设计的任务,程序要做什么?明确规定: ①输入的形式和输入值的范围; ②输出的形式; ③程序所能达到的功能; ④列出初步的测试计划。 2) 概要设计 说明本程序中用到的所有数据类型的定义及含义、主程序的流程以及各程序模块的功能要求及各自之间的层次(调用)关系。 3) 详细设计 实现概要设计中定义的所有数据类型,对每个操作需写出伪码算法;对主程序和其他模块也都要写出伪码算法;画出函数的调用关系图。 最终实现的源程序要按照良好风格的程序书写规则来编写,要求结构清晰,重点函数、重点变量以及重点功能部分要加上清晰的程序注释。 4) 调试分析 测试数据,测试输出的结果(包括正确的输入及其输出结果和含有错误的输入及其输出结果)。 每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?)。 进行时间和空间复杂度分析,算法的改进设想。 5) 用户使用说明 说明如何使用最终发布的程序,详细列出每一步的操作步骤。 6) 测试结果 列出完备的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中的初步测试计划。 7) 附录 程序文件名清单。

第1个回答  2020-03-20
#include<stdio.h>
struct
list//建立一个结构体,包括每个人的编号,密码和下一级的指针
{
int
id;
int
code;
struct
list
*next;
};
typedef
struct
list
list;//把结构体用list表示
list*
input(int
n)//链表的初始化
{
list
*p,*q,*l;
int
i,m;
p=new
list;
l=new
list;
l->next=NULL;
p=l;
p->id=1;//第一个人的初始化
scanf("%d",&m);
p->code=m;
for(i=2;i<=n;i++)//第二个人到第num个人的初始化
{
q=new
list;
q->id=i;
scanf("%d",&m);
q->code=m;
q->next=NULL;
p->next=q;
p=q;
}
p->next=l;//使表尾指向表头,成循环链表
return
p;
}
int
main()
{
int
num,m1,i;
list
*q,*p;
while(scanf("%d",&num)!=EOF)
{
printf("第一次的密码为:");
scanf("%d",&m1);
p=input(num);
//printf("%4d\n",head->id);
printf("出队的顺序为:");
while(p->next!=p)
{
for(i=1;i<=m1;i++)
{
q=p;
p=p->next;
//printf("--\n",p->id);
}
m1=p->code;
printf("%4d",p->id);
q->next=p->next;
delete
p;
p=q;
}
printf("%4d",p->id);
delete
p;
printf("\n");
}
}
相似回答
大家正在搜