1. 设计1 约瑟夫环问题
一、需求分析。
1、程序中,先输入人数 n,再输入输入 n 个正整数,作为这 n 个人的密码,接下来初始密码 m。2.
2、本程序只适用于一个案例。
3、测试数据 m=5 n=2 n 个人的密码依次 = 1 4 6 4 8。 出列为:2 1 3 5 4。
二、概要设计。
1、函数功能在main函数中实现。
void main(void)
int pn, sn,i;
linklist l;
printf("请输入总人数pn,和出示密码sn:")
scanf("%d%d",&pn,&sn);
int a[n];
a[0]=sn;//将a[0]保存为初始密码。
printf("请输入%d个人各自所持的密码:",pn);
for(i=1;iscanf("%d",&a[i]);
/创建链表。
creatlinklist(&l, pn);
/报数删人,输出结果。
printf("result:");
deldata(&l,pn,a);
2、程序包括两部分。
1)结点类型。
2)main函数实现约瑟夫环。
三、详细设计。
1、结点类型
typedef struct node
int data;//将这一圈人按从1~pn贴上序号。
struct node *next;
node,*linklist;
linklist head;
2、程序源**
#include<>
#include<>
#define n 100
typedef struct node
int data;//将这一圈人按从1~pn贴上序号。
struct node *next;
node,*linklist;
void creatlinklist(linklist *l,int pn)
node *p, *q;
int i;
*l) =linklist)malloc(sizeof(node));
p = l);
p->data = 1;
for (i=2;i<=pn;i++)
q=(linklist)malloc(sizeof(node));
q->data=i;
p->next=q;
p=q;p->next =(l);
void deldata(linklist *l,int pn,int a)
node *p, *q;
int k;
int j=1;
int i=0;//取每次将要删除的人的密码,用于下次报数的上限。
p=(*l);
for (;pn>=1;pn--)
k=1;while(k!=a[i])
p=p->next;
k++;printf("第%d个出列的人的序号是%d,其密码是%d.", j, p->data,a[j]);
j++;i=p->data;
p->data=p->next->data;
q=p->next;
p->next = p->next->next;
free(q);
void main(void)
int pn, sn,i;
linklist l;
printf("请输入总人数pn,和出示密码sn:")
scanf("%d%d",&pn,&sn);
int a[n];
a[0]=sn;//将a[0]保存为初始密码。
printf("请输入%d个人各自所持的密码:",pn);
for(i=1;iscanf("%d",&a[i]);
/创建链表。
creatlinklist(&l, pn);
/报数删人,输出结果。
printf("result:");
deldata(&l,pn,a);
四、运行结果及分析。
1)调试分析。
1.进入程序后按提示输入程序初始数据回车后即可得到结果,输出结果表示依次出列人的序号,程序结束。
2.若输入过程中输入有误,程序直接结束。
2)测试结果。
输入值不符合条件是:
五、总结。1.本程序比较简单,只有一个main函数,功能在main函数中实现,程序有待优化。
2.调试过程中,由于指针使用不当多次出现错误,对指针的设计还需要熟练掌握。
附:主要源**。
#include<>
#include<>
#define n 100
typedef struct node
int data;//将这一圈人按从1~pn贴上序号。
struct node *next;
node,*linklist;
void creatlinklist(linklist *l,int pn)
node *p, *q;
int i;
*l) =linklist)malloc(sizeof(node));
p = l);
p->data = 1;
for (i=2;i<=pn;i++)
q=(linklist)malloc(sizeof(node));
q->data=i;
p->next=q;
p=q;p->next =(l);
void deldata(linklist *l,int pn,int a)
node *p, *q;
int k;
int j=1;
int i=0;//取每次将要删除的人的密码,用于下次报数的上限。
p=(*l);
for (;pn>=1;pn--)
k=1;while(k!=a[i])
p=p->next;
k++;printf("第%d个出列的人的序号是%d,其密码是%d.", j, p->data,a[j]);
j++;i=p->data;
p->data=p->next->data;
q=p->next;
p->next = p->next->next;
free(q);
void main(void)
int pn, sn,i;
linklist l;
printf("请输入总人数pn,和出示密码sn:")
scanf("%d%d",&pn,&sn);
int a[n];
a[0]=sn;//将a[0]保存为初始密码。
printf("请输入%d个人各自所持的密码:",pn);
for(i=1;iscanf("%d",&a[i]);
/创建链表。
creatlinklist(&l, pn);
/报数删人,输出结果。
printf("result:");
deldata(&l,pn,a);
设计2 迷宫问题 (每个设计另起一页,注:提交时要将括号里面的内容删掉)
一、需求分析。
二、概要设计。
三、详细设计(含主要算法的流程图)
四、运行结果及分析。
五、总结。附:主要源**。
《课程设计说明书》模版
1.设计1 约瑟夫环问题 一 需求分析。1 利用单向循环链表存储结构模拟此过程,按照出列的顺序印出个人的编号,只适用于一个案例。具体目标包括 1 实现单循环链表的初始化 2 理解约瑟夫环的定义,用循环找到每次报数人的序号 3 从单循环链表中删除节点,并判断链表空与非空的临界条件。2 构造一个含有n个...
课程设计说明书
材料化学。涂装工艺。班级 材料化学081 姓名。学号。指导教师。时间 二 一一年七月八日 19 09 56 目录。表面工程课程设计任务书 1 1 概况 2 1.1 设计任务书及目标 2 1.2 设计任务书 2 1.3 设计单位概况 2 1.4 设计原则 4 1.5 设计范围 4 1.6 设计技术标准...
课程设计说明书
一 题目 离合器接合叉零件加工工艺规程 及车 25外圆及端面夹具设计 二 时间 自年月日至年月日止。三 要求 1 编制离合器接合叉加工工艺规程一套。2 绘制离合器接合叉零件图一张。3 绘制夹具结构装配图一张。4 绘制夹具体图一张。5.编写设计说明书一份。目录。序言1 第一章零件分析2 1.零件的作用...