数据结构课程设计报告约瑟夫环Word文档下载推荐.docx

上传人:b****6 文档编号:20865642 上传时间:2023-01-26 格式:DOCX 页数:20 大小:624.40KB
下载 相关 举报
数据结构课程设计报告约瑟夫环Word文档下载推荐.docx_第1页
第1页 / 共20页
数据结构课程设计报告约瑟夫环Word文档下载推荐.docx_第2页
第2页 / 共20页
数据结构课程设计报告约瑟夫环Word文档下载推荐.docx_第3页
第3页 / 共20页
数据结构课程设计报告约瑟夫环Word文档下载推荐.docx_第4页
第4页 / 共20页
数据结构课程设计报告约瑟夫环Word文档下载推荐.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告约瑟夫环Word文档下载推荐.docx

《数据结构课程设计报告约瑟夫环Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告约瑟夫环Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告约瑟夫环Word文档下载推荐.docx

开始任选一个正整数作为报数上限值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;

课程设计总结:

为期二周的课程设计快结束了,通过这次数据结构课程设计,我感受最深的就是对于循环链表的使用,可以说对循环链表有了比以前更进一步的认识,以前只是一知半解的,如果只给个题目自己根本不能把程序完整地编写出来,所以这次课程设计最大的收获就在于对循环链表有了一定的理解,包括其中的一系列操作,如建立一个循环链表,删除链表中的一个结点,增加一个结点等。

在这次课程设计过程中需要我们一边设计一边探索,这这个过程当中我发现自己在数据结构方面知识掌握不够深入,对一些基本概念不能很好的理解,对一些数据结构不能够熟练的进行上机实现,这是自己比较薄弱的。

学好基础知识是理论付诸实践的前提,这样理论和实践才能充分地结合起来。

在以后的学习中,我还要努力改正,充分利用上机实验的机会提高自己。

在程序的输入的时候,因为自己对键盘的不熟练,代码又很多很繁琐,常常会产生放弃的念头,从中我也感受到只有坚持到底,胜利才会出现。

在调试程序的时候我也有所体会,虽然约瑟夫环问题不是很难,但调试的时候还是会出现很多错误,因此我们不能认为容易就不认真对待。

在以后的学习中,要能不断发现问题,提出问题,解决问题,从不足之处出发,在不断学习中提高自己。

指导教师评语:

指导教师(签字):

      年月日

课程设计成绩

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1