1、 课程设计的目的
(1) 熟练编写程序,解决实际问题;
(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
2、 需求分析
*问题描述:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。
*要求:利用不带表头结点的单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
*测试数据:
m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,
*输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。
*输出形式:建立一个输出函数,将正确的输出序列
3、课程设计报告内容
概要设计
(1)在分析题目要求的基础上,我首先设计了一个结构体,定义如下
struct JosephNode{
int num;
int key;
JosephNode*next;
};
(2)基本操作:
JosephNode*Creat_Node(int numbers);
voidDelist(JosephNode *tail,int m);
2、本程序分为2个模块
3、 调试分析
4、 用户手册
1. 本程序的运行环境为DOS操作系统,执行文件为约瑟夫.exe。
2. 进入演示程序后,即显示文本方式的用户界面。
3.输入初始密码值和总人数后相继输入每个人所持密码值,即可得到输出序列。
4、小结
一、这次课程设计的心得体会通过实践我的收获如下:
1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。
2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。
3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。
二、根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点:
1、认真上好专业实验课,多在实践中锻炼自己。
2、写程序的过程中要考虑周到,严密。
3、在做设计的时候要有信心,有耐心,切勿浮躁。
4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。
5、在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。
5、程序清单:
/*约瑟夫环*/
#include<iostream>
using namespace std;
struct JosephNode{
int num;
int key;
JosephNode *next;
};
JosephNode *Creat_Node(int numbers)//创建约瑟夫环
{
int i,KEY;
JosephNode*head,*tail,*p,*q;
head=tail=NULL;
for(i=1;i<=numbers;i++)
{
p=new JosephNode;
p->num=i;
cout<<"请输入第"<<i<<"个人的密码: ";
cin>>KEY;
p->key=KEY;
if(head==NULL)
{
head=p;
q=p;
}
else
{
q->next=p;
q=p;
}
}
p->next=head;
tail=p;
return tail;
}
void Delist(JosephNode *tail,int m)//出列并输出约瑟夫数
{
JosephNode *p,*q;
int i;
p=NULL;
cout<<"输出顺序为:" ;
while(tail->next!=tail)
{
p=tail->next;
for(i=1;i<m;i++)
{
p=p->next;
tail=tail->next;
}
cout<<(tail->next)->num<<"";
m=(tail->next)->key;
q=p;
tail->next=p->next;
p=p->next;
delete q;
}
cout<<tail->num<<endl;
delete p;
}
int main()
{
JosephNode *tail;
int m,numbers;
cout<<"--------约瑟夫环----------"<<endl;
cout<<"|请输入初始密码值和总人数|"<<endl;
cout<<"--------------------------"<<endl;
cout<<endl;
cin>>m>>numbers;
tail=Creat_Node(numbers);
Delist(tail,m);
return 0;
}
6、参考文献
[1] 严蔚敏,吴伟民 编著. 数据结构(C语言版)——北京: 清华大学出版社,2007.
[2] 严蔚敏,吴伟民 米 宁 编著. 数据结构题集(C语言版)——北京: 清华大学出版社,2007.