C语言程序设计实训报告(共18页).doc
《C语言程序设计实训报告(共18页).doc》由会员分享,可在线阅读,更多相关《C语言程序设计实训报告(共18页).doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上青岛大学软件技术学院C语言程序设计实训报告姓 名 专 业 班 级 指导教师 2011 年 7月14日专心-专注-专业目 录一实训目的和要求1. 实训目的本实训是软件技术专业重要的实践性环节之一,是在学生学习完C语言程序设计课程后进行的一次全面的综合练习。本实训的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力2. 实训要求 1. 分析实训题目的要求 2. 写出详细设计说明 3. 编写程序代码,调试程序使其
2、能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交实训报告二试训任务内容 1问题定义汉诺塔问题 (Towers of Hanoi)2问题分析假设有三根木桩A、B和C。在木桩A上放置了N个圆盘,由上到下编号为1,2,N,编号越大的圆盘直径越大。而我们必须将圆盘由木桩A通过木桩B全部搬到木桩C 。在移动过程中,必须按照下述移动规则:1直径较小的圆盘永远置于直径较大的圆盘上;2圆盘可任意地由任何一个木桩移到其他的木桩上;3每一次仅能移动一个圆盘。 三总体设计1.设计思想如果盘子为1,则将这个盘子从塔座A移动到塔座C;如果不为1,则采用递归思想。将塔座A的前n-1个盘子借助C盘(即
3、目的盘)移到塔座B,移后,此时C为空座,那我们就可以将塔座A的第n个盘子移到塔座C了。接下来就将塔座B的n-1个盘子借助A移到塔座C,从而完成盘子的移动。2.实现方法通过函数的递归调用来实现。如图例图3是当N=3时的递归调用树状图,可以使我们更清楚的了解递归的调用过程。3.主要模块Main函数实现函数的调用,move函数实现输出,hanoi函数调用move函数实现移动和最终输出。 功能模块主要有以下几个: 输入界面(由用户输入演示盘子的个数) ;基本界面(包括3个柱子和若干放置在A上的盘子) ;演示模块(即递归的过程) ;主函数(对以上模块进行调用)。4.模块关系程序从Main函数开始,到ma
4、in函数结束。Main函数通过调用hanoi函数来实现盘子的移动,然后由move函数输出在屏幕上。如图4.1汉诺塔程序基本界面输入界面演示模块主函数4.1模块关系图5.详细设计a) 输入界面涉及C的字体显示方式,返回值为盘子的个数,无参数 。b) 基本界面涉及C的图形功能,无返回值,参数为盘子的个数 。c)使用for循环函数,对阶数判断并执行循环。d) 演示模块需要先写出汉诺塔的递归算法代码,在递归过程中完成演示,无返回值,参数为盘子个数,3个柱子代号 为完成演示,需设计出两个全局变量 :int count410=0;/*counti0表示每个柱子13号(0号不用)上当前的盘子个数,count
5、ij的表示第j个盘子是几号盘子,自底向上数,初始时A柱上盘子自底向上依次编号为1n*/ 。主函数模块流程图如图1所示。其中outputt函数为自定义的输出函数。 开始 System(“cls”)Strlen(s)!=1|s0Y N n=s0-48 i=0i=n-1NYxn-1-i=2*i+1Y i+i=n i9xi=0;yi=0;zi=0 i+Output(a,b,1); Return0图 1主函数模块流程图 如图2,为移动函数模块流程图。Move为自定义的移动函数。开始c= =1NY i=0a!=x&b!=xNi9 Y Ymove(a,x,c-1);breaki+a!=y&b!=yNmove
6、(a,z,c-1);For和if函数对数组赋值和判断Ymove(a,y,c-1);Ifelse函数判定,move实现移动 Count+结束图2移动模块流程图 如图3,为输出函数模块图流程图。 开始 i9NY数组赋值 i+ System(“cls”); System(“cls”)Count=10&count100Printf(“=”) N YPrintf(“=”)Printf(“=”)Printf(“nnnnn”)结束Printf(“nn按回车键继续 ”)For函数运算,printf输出 图3输出模块流程图四. 软件使用说明1.运行程序,窗口提示“此为汉诺塔演示程序n请输入汉诺塔阶数(1-9)”
7、如图4。图4提示窗口2.如输入盘子数后,按 Enter键,使盘子移动,如图5。图5移动盘子3.连续按Enter 键,使阶层移动直到演示完该汉诺塔游戏,如图6所示。图6游戏完成五.实训心得与体会通过此次C实训,让我加深了对C语言的了解,而不只是单单的在课本中学到的那些理论。通过自己动手亲自编写,平时乏味的课程,变的生动有趣。 这次实训有很大的收获,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。如果是一个程序写完一处错误也没用,会有种成就感,于是兴趣就来了,自然学的东西也就多了,能把理论变成实际的技能,让我对C语言有了浓厚的兴趣和更深层的认识。C语言是一个有序的学习,学了最基本
8、的替换,然后扩展到循环,嵌套,条理很清楚,不是 一个零散的知识,实际上所有的课程都如此。同时我也存在不少问题, 比如自己写的小程序出了问题,不会解决了就叫老师帮忙,虽然解决了困难,但是会养成一种依赖的心理,碰到问题了第一个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取做到老师不在身边的时候也可以完成一些简单的程序编写与错误排除。 另外,自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。通过实训,逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 报告 18
限制150内