数据结构课程设计报告约瑟夫环Word文档下载推荐.docx
- 文档编号:20865642
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:20
- 大小:624.40KB
数据结构课程设计报告约瑟夫环Word文档下载推荐.docx
《数据结构课程设计报告约瑟夫环Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告约瑟夫环Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。
报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。
试设计一个程序求出出列顺序。
1.2课程设计要求
1.参考相应的资料,独立完成课程设计任务书。
2.交规范课程设计报告和软件代码。
2课程设计原理
2.1课设题目粗略分析
根据课设题目要求,拟将整体程序分为四大模块。
此四个模块相互独立,没有嵌套调用的情况,以下是四个模块的大体分析:
1.main()函数是主要的控制函数,main()函数主要负责存储用户输入的基本数据以及调用其他子函数模块,在main()函数中还存在一个比较小的函数模块exit(0),该函数模块负责终止程序运行,另外还有两个子函数模块,分别是random()函数模块与solid()函数模块,这两个函数模块分别各自负责自己所要处理的数据以及输出功能;
2.在程序运行之后,在程序主界面出现之后,当用户自己输入了自己想要实现的功能模块所在的数字选项后,立即进入主函数模块之中,当用户输入了所有的必要数据之后,按照用户选定的数字选项所要实现的功能调用相应的子函数;
3.如果用户选择的是系统随机产生密码的选项,则main()函数就调用random()子函数模块,在random()函数模块中,将会随机产生各个参与者的密码,并且同时建立链表来存储、处理这些数据,在完成了所有的操作之后,random()函数就将输出结果,反之,如果用户选择的是用户自己输入密码的选项,则main()函数就调用solid()函数模块,在solid()函数模块中,将会提醒用户自己一个个的输入每个参与者的密码,与此同时建立链表来存储、处理这些数据,在完成了所有的操作之后,solid()函数就将输出结果。
2.2原理图介绍
2.2.1功能模块图
图2.1功能模块图
2.2.2流程图分析
1.如图2.2,random()函数的执行过程如下;
N
Y
图2.2random()函数流程图
2.如图2.3,solid()函数的执行过程如下;
图2.3solid()函数流程图
3.如图2.4,main()函数的执行过程如下。
图2.4main()函数流程图
3数据结构分析
3.1存储结构numcodenext
图3.1数据存储结构
3.2算法描述
1.用户输入数据;
while(scanf("
%d"
&
p)!
=EOF)
{
if(p==1)
random();
elseif(p==2)
solid();
else
exit(0);
printf("
*************************欢迎进入约瑟夫环问题求解系统*************************\n\n"
);
printf("
1.按照系统随机给出的密码进行2.按照自己输入的密码进行3.退出该系统\n\n"
********************请输入您要实现的功能模块所在的数字选项!
********************\n\n"
}
2.random()函数随机产生各个参与者的密码,用户在此函数中输入第一个要报的数,此函数之后会排好各个参与者的出列顺序;
or(i=1;
i<
=n;
i++)
{key=rand()%100;
printf("
第%d个人的密码:
%d\n"
i,key);
s=p;
p=(list*)malloc(sizeof(list));
//创建新的结点.
s->
next=p;
p->
num=i;
code=key;
}
p->
next=head->
next;
p=head;
head=head->
free(p);
//释放头结点.
do{
\n第%d号成员的密码为:
p->
num,p->
code);
//输出链表.
p=p->
}while(p!
=head);
\n\n输入第一个报的数:
\n"
scanf("
key);
3.solid()函数提示用户输入各个参与者的密码及第一个要报的数,并且排好各个参与者的出列顺序。
for(i=1;
{scanf("
请输入密码:
"
}
4调试与分析
4.1调试过程
在调试程序是主要遇到一下几类问题:
1.调试过程中,曾出现过缺少分号、括号之类的错误,还出现过运算顺序颠倒,致使运算出现了错误,在经过仔细的检查并且向人请教,终于得出了正确结果.这次的课程设计的代码比较冗长,所以等有了解题思路后,把代码都写上后难免会有很多错误。
当第一次把整个程序写好后运行,出现了很多错误。
不过经过一点点的改正,错误也慢慢地变少。
这也说明做事要认真,尤其做计算机这方面工作的时候,因为计算机不容许一点点的错误,有了一点小错误和有一个大错误在计算机看来都是一样的,都不会得到结果。
有些小错误,比如说少了个分号,变量忘了定义,数据溢出等都是些小错误,但也不能松懈。
因为要注意的地方很多,经过多次尝试,问题也就自然而然的解决了,而且以后遇到这方面的问题都会觉得比较得心应手。
2.在随机设置每个结点的key时也曾是个问题,因为我做的随机函数一直都用不好,要不是每次随到的都是一样的,要么就是每次随到的数都很大,后来通过学长的耐心讲解才得以解决。
在调试的过程中,类的优势很明显,能很简单的把问题解决,而不需要使用的其他的一些比较复杂的方法。
4.2程序执行过程
*************************欢迎进入约瑟夫环问题求解系统*************************系统使用说明:
1.进入程序主界面后,会出现三个选项,按1则是随系统随机产生的密码进行该问题求解,按2则是随用户自己输入的密码进行该问题求解,按3则是退出系统;
2.选定了进行方式后,输入该问题所涉及的总人数,如果用户按了1,则随机产生密码,用户则只再需要输入第一个人要报的数即可,如果用户按了2,则是用户自己手动输入密码,输入完了所有人的密码后,之后再输入第一个人要报的数;
3.随着程序的运行,结果就会随之出来,随后进入下一次该问题求解进程,直到用户自己选择退出该程序,该程序才会结束。
参考文献
[1]严蔚敏,吴伟民.数据结构[M].北京:
清华大学出版社,2007.
[2]张长海,陈娟.C程序设计[M].北京:
高等教育出版社,2004.
[3]谭浩强.C程序设计[M].北京:
清华大学出版社,2005.
[4]《数据结构》(用面向对象方法与C++描述),殷人昆等,清华大学出版社。
[5]《算法与数据结构习题精解和实验指导》,宁正元等,清华大学出版社。
[6]张乃孝,裘宗燕.数据结构C++与面向对象的途径.北京:
高等教育出版社,1998
[7]周云静.数据结构习题解析与上机指导.北京:
冶金工业出版社,2004
[8]陈慧南.数据结构—C++语言描述.北京:
人民邮电出版社,2005
[9]严蔚敏,吴伟民.数据结构.北京:
清华大学出版社,1997
附录(关键部分程序清单)
程序代码
#include<
stdio.h>
stdlib.h>
structlist
{
intnum,code;
structlist*next;
};
intmain()
voidrandom();
voidsolid();
intp;
while(scanf("
return0;
voidrandom()
{
inti,j,m=1;
intkey;
//密码.
intn;
//人数.
list*p,*s,*head;
head=(list*)malloc(sizeof(list));
//为头结点分配空间.
输入人的总个数:
n);
\n出列顺序为:
do
{j=1;
p=head;
while(j<
key){
s=p;
p=p->
j++;
}//报数过程.
i=p->
num;
key=p->
code;
%d:
第%d号成员出列\n"
m,i);
m++;
s->
next=p->
head=p->
//重新定义head,下次循环的开始结点.
free(p);
//释放已出列的结点.
n--;
//人数减一.
}while(n>
0);
voidsolid()
inti,j,m=1;
课程设计总结:
为期二周的课程设计快结束了,通过这次数据结构课程设计,我感受最深的就是对于循环链表的使用,可以说对循环链表有了比以前更进一步的认识,以前只是一知半解的,如果只给个题目自己根本不能把程序完整地编写出来,所以这次课程设计最大的收获就在于对循环链表有了一定的理解,包括其中的一系列操作,如建立一个循环链表,删除链表中的一个结点,增加一个结点等。
在这次课程设计过程中需要我们一边设计一边探索,这这个过程当中我发现自己在数据结构方面知识掌握不够深入,对一些基本概念不能很好的理解,对一些数据结构不能够熟练的进行上机实现,这是自己比较薄弱的。
学好基础知识是理论付诸实践的前提,这样理论和实践才能充分地结合起来。
在以后的学习中,我还要努力改正,充分利用上机实验的机会提高自己。
在程序的输入的时候,因为自己对键盘的不熟练,代码又很多很繁琐,常常会产生放弃的念头,从中我也感受到只有坚持到底,胜利才会出现。
在调试程序的时候我也有所体会,虽然约瑟夫环问题不是很难,但调试的时候还是会出现很多错误,因此我们不能认为容易就不认真对待。
在以后的学习中,要能不断发现问题,提出问题,解决问题,从不足之处出发,在不断学习中提高自己。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 约瑟夫