肖洒

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

邵阳学院课程设计(论文)任务书
年级专业11级电子信息工程学生姓名肖洒学号1141301056 题目名称汉诺威塔设计时间16~17周课程名称数据结构课程设计课程编号131301302 设计地点实验楼机房一、课程设计(论文)目的
学生在教师指导下运用《数据结构》课程的知识来研究、解决一些具有一定综合性的专业课题。

通过课程设计,巩固课程所学的知识,提高学生综合运用所学知识分析、解决实际问题、查阅文献资料、及进行技术设计的初步能力。

二、已知技术参数和条件
本学期已经学习了《C语言程序设计》、《数据结构》课程中的所有内容,已经具有了课程设计的理论知识。

三、任务和要求
1、任务
本设计要求是对输入的一串电文字符实现赫夫曼编码,再对赫夫曼编码生成的代码译码,输出电文字符串。

2、要求
(1)用c语言实现程序设计;
(2)画出流程图,采用适宜的数据结构,界面友好(良好的人机互交),程序要有注释。

注:1.此表由指导教师填写,经系、教研室审批,指导教师、学生签字后生效;
2.此表1式3份,学生、指导教师、教研室各1份。

四、参考资料和现有基础条件(包括实验室、主要仪器设备等)
参考资料:教材和实验教材、图书馆有很多相关参考书
现有基础条件:本系有足够的计算机供学生上机用,每人一台计算机。

五、进度安排
2012.12.5前:指导教师拟定课程设计课题
2012.12.6~2012.12.7:学生选题,指导教师下发任务书,学生搜集相关参考资料2012.12.8~2012.12.16:学生按课题小组编程
2012.12.17~2012.12.23:学生独立撰写课程设计报告
2012.12.24~2012.12.28:指导教师批阅课程设计报告,评定学生成绩
六、教研室审批意见
教研室主任(签字):年月日七|、主管教学主任意见
主管主任(签字):年月日八、备注
指导教师(签字):学生(签字):
课程设计(论文)
题目名称汉诺威塔
课程名称数据结构课程设计
学生姓名肖洒
学号1141301056
系、专业信息工程系、电子信息工程
指导教师李仲生
2012年12 月15 日
目录
第一章前言•••••••••••••••••••••••••••••••••••••••••••••••• 1 第二章系统功能分析•••••••••••••••••••••••••••••••••••••••• 2 2.1 汉诺威塔问题••••••••••••••••••••••••••••••••• 2 2.2 解析汉诺威塔问题••••••••••••••••••••••••••••• 2 第三章总体设计•••••••••••••••••••••••••••••••••••••••••••• 4 第四章详细设计•••••••••••••••••••••••••••••••••••••••••••• 5 第五章程序流程图•••••••••••••••••••••••••••••••••••••••••• 6 第六章程序实际运行界面•••••••••••••••••••••••••••••••••••• 8 结束语••••••••••••••••••••••••••••••••••••••••••••••••••••• 11 附录••••••••••••••••••••••••••••••••••••••••••••••••••••••• 11
第一章前言
汉诺威塔是一款集娱乐与运算的智力游戏,它不仅能使人在休闲的时候放松心情,而且还能在玩的过程中不断的提高你的思维能力。

本设计着手于怎么运算出n层汉诺威塔的解决方案,然而经过不断的调试以及自己的在做的过程中也不断的去尝试着怎么自己能过汉诺威塔多少层,经过几个星期的努力,以及不断的调试,我发现我能把7层的汉诺威塔玩过已经是很不错了。

如想玩下去的,只要你能记得那些步骤,那么这汉诺威塔也不是什么难的了。

汉诺塔(又称河内塔)问题是印度的一个古老的传说。

开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。

解答结果请自己运行计算,程序见尾部。

面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。

后来,这个传说就演变为汉诺塔游戏。

第二章系统功能分析
2.1汉诺威塔问题
n阶汉诺威塔问题:
有三根杆子A,B,C。

A杆上有n个碟子,每次移动一块碟子,小的只能叠在大的上面,把所有碟子从A杆全部移到C杆上,经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动金片:如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C。

2.2解析汉诺威塔问题
为了避免运行需要很长的时间,程序限制了输入的整数大小为0-10,以下是程序执行的顺序:(为了篇幅,假设n的值是3)
main方法运行到hannuota(n,'A','B','C')时;该方法里的参数为hannuota(3,'A','B','C');
1、第一部分:把A柱中的n-1个圆盘借助C柱移动到B柱
此时执行hannuota方法,因为n=3>1,因此此时递归执行hantuona方法,此时方法参数为hannuota(2,'A','C','B'),(注意此时hannuota方法的参数改变了,C和B值互换);因为n=2>1,继续递归调用hannuota(1,'A','B','C');(此时hannuota方法的参数改变了,C和B值互换);因为n=1,所以执行move方法,打印出A-->C;返回n=2时程序未执行完的部分,即执行标志为<3>的move方法,因为此时n=1,打印出A-->B,继续执行标志为<4>的hannuota((n-1),two,one,three)部分,此时参数为hannuota(1,'C','A','B'); 此时n=1,打印出C-->B。

到此刻位置标志为<2>部分的hannuota((n-1),one,three,two)程序执行完毕。

2、第二部分:把A柱的第n个圆盘移动到C盘
此时直接执行标注为<3>部分的程序move(one,three); 此时打印出A-->C;
3、第三部分:把B柱上的n-1个圆盘借助A移动到C柱
此时执行标志为<4>部分的hannuota((n-1),two,one,three),此时参数为hannuota(2,'B','A','C');因为n=2>1,执行标志为<2>的代码,此时方法参数为hannuota(1,'B','C','A');因为此时n=1,执行标志为<1>的代码,打印出B-->A;此时,标志为<2>的程序执行完毕,one,two,three的值分别为one=B,two=A,three=C;继续执行标志<3>的程序move(one,three); 打印出B-->C; 继续执行至标志<4>的代码hannuota((n-1),two,one,three),参数为hannuota(1'A','B','C'),因此n=1,执行标志<1>的代码,打印出A-->C;
到此为止,程序执行完毕。

第三章总体设计
首先建立一个程序。

然后创建类Hanoi,将公有继承和私有继承分好类。

其次建立各类函数:
void Hanoi::move(int numDisk,string init,string desti,string templ)
void Hanoi::moveOne(int numDisk,string init,string desti)
void Hanoi::Solve ()
最后构建主函数,应用各种函数,使整个程序能运行。

第四章详细设计
经过不段的尝试以及改正,终于将程序设计出来,以下便是程序代码和详细解答:# include <stdio.h>
void hannuota(int n,char one,char two,char three);
void move(char x,char y);
int main(void) {
int n;
printf("please input a integer number:");
scanf("%d",&n);
if(n > 10 || n < 0) {
printf("请输入一个0~10范围内的整数!!");
return 0;
}
hannuota(n,'A','B','C');
return 0;
}
void hannuota(int n,char one,char two,char three) {
if(n == 1) {
move(one,three); }
else {
hannuota((n-1),one,three,two);
move(one,three);
hannuota((n-1),two,one,three); }}
void move(char x,char y) {
printf("%c ----> %c\n",x,y);
}
第五章程序流程图0\
图一
图二
第六章程序实际运行界面
初始界面
以八层汉诺威塔为例
八层汉诺威塔运行结果
结束语
经过多次的反复修改、上机验证,本次课程设计,使我对从汉诺威塔设计方案到设计的基本过程的设计方法、步骤、思路、有一定的了解与认识。

在课程设计过程中,我基本能按照规定的程序进行,先针对汉诺威塔设计收集、调查有关资料,其间,与同学之间对递归的算法讨论、修改,再讨论、再修改,最后定案。

最终用c++语言实现了可视化的汉诺威塔算法。

实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。

通过课程设计,让我找出自身状况与实际需要的差距,更好的结合实际来加强自身能力。

同时,在这次为期两周的课程设计的过程中,我要感谢同学给予我的一些建议和指导,也感谢李忠祥老师的指导和评审。

附录
参考文献
1.谭浩强.C语言程序设计(第二版)【M】.北京:清华大学出版社,2008.11
2.何光明,杨静宇.C语言程序设计与应用开发【M】.北京:清华大学出
版社,2006.5
3.黄同成,周红波,C语言设计基础教程.湖南:湖南人民出版社2011.12。

相关文档
最新文档