欢迎来到天天文库
浏览记录
ID:47518118
大小:85.14 KB
页数:15页
时间:2020-01-12
《数据结构课程设计-农夫过河-实验源码-实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、需求分析描述1、针对实现整个过程需要多步,不同步骤中各个事物所处位置不同的情况,可定义一个结构体来实现对四个对象狼、羊、白菜和农夫的表示。对于起始岸和目的岸,可以用0或者1来表示,以实现在程序设计中的简便性。2、题目要求给出四种事物的过河步骤,没有对先后顺序进行约束,这就需要给各个事物依次进行编号,然后依次试探,若试探成功,进行下一步试探。这就需要使用循环或者递归算法,避免随机盲目运算且保证每种情况均试探到。3、题目要求求出农夫带一只羊,一条狼和一颗白菜过河的办法,所以依次成功返回运算结果后,需要继续运算,直至求出结果,即给出农夫的过河方案。4、输出界
2、面要求具有每一步中农夫所带对象及每步之后各岸的物体,需要定义不同的数组来分别存储上述内容,并使界面所示方案清晰简洁。二、系统架构设计1.设计中首先涉及的就是数据类型的定义,首先,定义一个结构体用来存放农夫、狼、羊、白菜的信息。具体定义为:structCondition{intfarmer;intwolf;intsheep;intcabbage;};定义了一个结构体数组Conditionconditions[100],定义状态数组用来记录他们过河的状态0:起始岸;1:目的岸;程序中定义的charaction100数组用来存放各个物件以及人过河或返回的说明语句
3、。2.程序中定义的子函数有:2.1将狼带到目的岸以及带回起始岸的函数takeWolfOver()和takeWolfBack();takeWolfOver()函数中将conditions[i+1].wolf=1,白菜、羊的状态不变,同时要有action[i]="takewolfover."将狼带到目的岸语句;takeWolfBack()函数中将conditions[i+1].wolf=0,白菜、羊的状态不变,同时要有action[i]="takewolfback."将狼带回起始岸语句。2.2将羊带到目的岸以及带回起始岸的函数takeSheepOver()和t
4、akeSheepBack();takeSheepOver()函数中将conditions[i+1].sheep=1,白菜、狼的状态不变,同时要有action[i]="takesheepover."将羊带到目的岸语句;takeSheepBack()函数中将conditions[i+1].sheep=0,白菜、狼的状态不变,同时要有action[i]="takesheepback."将羊带回起始岸语句。2.3将白菜带到目的岸以及带回起始岸的函数takeCabbageOver和takeCabbageBack();takeCabbageOver()函数中将cond
5、itions[i+1].cabbage=1,羊、狼的状态不变,同时要有action[i]="takecabbageover."将白菜带到目的岸语句。takeCabbageBack();函数中将conditions[i+1].cabbage=0,羊、狼的状态不变,同时要action[i]="takecabbageback."将白菜带回起始岸语句。2.4getOverBarely()函数是用来完成一个人单独过河的操作,调用该函数时action[i]="getoverbarely."赋值人单独回到目的岸,狼、羊、白菜的状态保持不变。2.5getBackBarel
6、y()函数是用来完成一个人单独回到起始岸的操作,调用该函数时action[i]="getbackbarely."赋值人单独回起始岸,狼、羊、白菜的状态保持不变。2.6输出过河的每一个步骤以及完成每一步之后人、狼、羊、白菜的状态这一动作是由showResult()函数来完成的,2.7tryOneStep是本次设计的核心程序,上面提到的所有子程序之间都是相互独立的,但是在tryOneStep函数中都要调用上面的子函数。3.程序流程图:3.1主函数的流程图如下:开始初始化调用tryOneStep()函数结束图1.主函数的流程3.2tryOneStep函数工作的流
7、程图如下:开始输入两个变量Y是否出错返回主函数N输出结果Y是否全部过河NY是否有非法状态结束返回主函数NY返回主函数是否有重复状态J=i+1农夫状态是否为0NY农夫状态置为0,递归调用Y狼的状态是否为1做相关处理,递归调用自身NY羊的状态是否为1做相关处理,递归调用自身NY白菜的状态是否为1做相关处理,递归调用自身回到开始农夫状态置为1,递归调用做相关处理,递归调用自身Y狼的状态是否为0NY羊的状态是否为0做相关处理,递归调用自身NY白菜的状态是否为做相关处理,递归调用自身回到开始图2.tryOneStep()函数的流程三、系统实现过程编写好各个子程序后,
8、在main()函数中首先将人,狼,羊,白菜的初始状态都置为0,接下
此文档下载收益归作者所有