青岛大学软件技术学院
C语言程序设计实训报告
姓    名              
专    业                
班    级        
指导教师                
2011  年 7月14日


一.实训目的和要求
1.实训目的
本实训是软件技术专业重要的实践性环节之一,是在学生学习完《C语言程序设计》课程后进行的一次全面的综合练习。本实训的目的和任务:
1. 巩固和加深学生对C语言课程的基本知识的理解和掌握
2. 掌握C语言编程和程序调试的基本技能
3. 利用C语言进行基本的软件设计
4. 掌握书写程序设计说明文档的能力
5. 提高运用C语言解决实际问题的能力
2.实训要求
1. 分析实训题目的要求
2. 写出详细设计说明
3. 编写程序代码,调试程序使其能正确运行
4. 设计完成的软件要便于操作和使用
5. 设计完成后提交实训报告
二.试训任务内容
1.问题定义
汉诺塔问题 Towers of Hanoi
2.问题分析
假设有三根木桩ABC。在木桩A上放置了N个圆盘,由上到下编号为12,,…,N,编号越大的圆盘直径越大。而我们必须将圆盘由木桩A通过木桩B全部搬到木桩C 。在移动过程中,必须按照下述移动规则:
1.直径较小的圆盘永远置于直径较大的圆盘上;
2.圆盘可任意地由任何一个木桩移到其他的木桩上;
3.每一次仅能移动一个圆盘。
三.总体设计   
1.设计思想
如果盘子为1,c语言大学教程将这个盘子从塔座A移动到塔座C
 如果不为1,则采用递归思想。
将塔座A的前n-1个盘子借助C盘(即目的盘)移到塔座B,移后,此时C为空座,那我们就可以将塔座A的第n个盘子移到塔座C了。接下来就将塔座B的n-1个盘子借助A移到塔座C,从而完成盘子的移动。
2.实现方法
通过函数的递归调用来实现。如图例
图3是当N=3时的递归调用树状图,可以使我们更清楚的了解递归的调用过程。
3.主要模块
Main函数实现函数的调用,move函数实现输出,hanoi函数调用move函数实现移动和最终输出。
功能模块主要有以下几个:
输入界面(由用户输入演示盘子的个数) ;
基本界面(包括3个柱子和若干放置在A上的盘子) ;
演示模块(即递归的过程) ;
主函数(对以上模块进行调用