数据结构课程设计 猴子吃桃问题.doc_第1页
数据结构课程设计 猴子吃桃问题.doc_第2页
数据结构课程设计 猴子吃桃问题.doc_第3页
数据结构课程设计 猴子吃桃问题.doc_第4页
数据结构课程设计 猴子吃桃问题.doc_第5页
免费预览已结束,剩余19页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

唐 山 学 院 数据结构 课 程 设 计 题 目 猴子吃桃问题 系 (部) 计算机科学与技术系 班 级 08信管本(1)班 姓 名 李金龙 学 号 4082014114 指导教师 刘印平 2010 年 1 月 4 日至 1 月 8 日 共 1 周 2010年 1 月 8 日数据结构 课程设计任务书一、设计题目、内容及要求本课题题目是猴子吃桃子问题。有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求:1)采用数组数据结构实现上述求解2)采用链数据结构实现上述求解3)采用递归实现上述求解4)如果采用4种方法者,适当加分功能要求:分别用数组数据结构、链数据结构、递归的方法求出第一天摘到桃子的数量。输出形式:有中文提示,桃子数量是整形界面要求:有合理的说明,及结果。存储结构:链式存储,数组存储。测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;要独立完成主要功能模块的编程并通过调试,能用合理的模拟数据运行。写出不少于5000字的设计报告,并另程序代码。二、要求的设计成果(课程设计说明书、设计实物、图纸等)1.软件(实现了规定功能的软件系统)2.课程设计报告(按学校规定要求)3.软件使用简要说明。三、进程安排周一 问题分析和任务定义周二 逻辑设计周三 详细设计周四 程序编码周五 程序调试与测试四、主要参考资料1谭浩强,c语言程序设计,清华大学出版社,2008年2.严蔚敏,数据结构,清华大学出版社,1997年指导教师(签名):教研室主任(签名):课程设计成绩评定表出勤情况出勤天数 缺勤天数成绩评定出勤情况及设计过程表现(20分)课设答辩(20分)设计成果(60分)总成绩(100分)提问(答辩)问题情况综合评定 指导教师签名: 年 月 日目录1引言11.1编写目的11.2背景11.3开发概述11.4采用方法特点12问题分析32.1问题描述32.2问题要求32.3任务定义33算法思想及分析43.1设计思想43.2功能模块44源程序及说明54.1声明类型,定义函数54.2源程序代码54.3数据结构说明114.3.1基本抽象数据类型114.3.2基本运算114.3.3具体问题的数据类型114.4程序流程图125测试数据及运行情况136总结18参考文献20唐 山 学 院 课 程 设 计1引言1.1编写目的全面系统地学习C语言面向对象程序设计的语法和编程方法。更加透彻地理解和掌握课本上的各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,掌握它们在程序中的使用方法。利用所学知识解决复杂数学问题,复杂问题用简单程序进行求解,得到答案。同时,在编写的过程中巩固所学知识,在查看课外资料的过程中开拓眼界,增长知识。在程序编辑的过程中,不但可以弥补自身知识的缺陷,还能对C+的性能和操作技巧有进一步的掌握。以猴子吃桃问题为起点,掌握程序编辑的技巧学习软件设计的基本内容和设计方法,以培养规范化软件设计的能力。掌握计算机的各种功能的使用方法、技巧,学会参考有关资料,提高进行程序设计的基本能力和增强日后的学习能力。1.3开发环境主要采用的开发工具是Visual C+ 6.0;在开发过程中利用数组数据结构,链式数据结构和递归进行分析和设计。主要的开发环境是奔腾四以上CPU,Windows XP系统,利用Visual C+ 6.0及相关软件1.4采用方法特点数组数据结构,链数据结构是数据结构中两种重要的数据算法。数组是有序数据的集合,在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。链式结构每个存储单元实际上包含两个内容:数据本身与指向存储下一个数据的存储单元地址的指针,可以使程序简单化。递归做为一种算法在程序设计语言中广泛应用. 指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象.递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰。线性表按链式存储时,每个数据元素 (结点)的存储包括数据区和指针区两个部分。数据区存放结点本身的数据,指针区存放其后继元素的地址 (没有后继元素时设置为空字符(Null).。只要知道该线性表的起始地址 (记录在头指针中),表中的各个元素就可通过其间的链接关系逐步找到。2问题分析2.1问题描述有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。1)采用数组数据结构实现上述求解2)采用链数据结构实现上述求解3)采用递归实现上述求解2.2问题要求功能要求:分别用数组数据结构、链数据结构、递归的方法求出第一天摘到桃子的数量。输出形式:有中文提示,桃子数量是整形界面要求:有合理的说明,及结果。存储结构:链式存储,数组存储。测试数据:要求使用:(1)全部合法数据;(2)整体非法数据;(3)局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果在上交的资料中写明。 2.3任务定义利用数组数据结构、链式数据结构和递归3种方法求解出猴子原来所摘的桃子数。3算法思想及分析3.1设计思想猴子分10天吃完了桃子,要想求出第1天的桃子数,就先要求出第2天的桃子数,.因此,有: A1=(A2+1)*2; A2=(A3+1)*2; . A9=(A10+1)*2; A10=1; 根据该算法进行程序编辑,计算结果。 建立顺序表,通过定义子函数将内容读如顺序表,对顺序表进行操作,实现用不同方法求解得到结果的目的。链表方法数组方法结果菜单输入错误返回3.2功能模块 递归方法4源程序及说明4.1声明类型,定义函数:进行函数声明,定义所有用到的函数。#include#include#define NULL 0void main()void print()void creat()4.2源程序代码#include#include#define NULL 0typedef struct linknode int data; struct linknode *next;/链表指针node;node *head; /头结点int day;void creat()/创建链表 node *p,*s; int peaches=1;/第十天时只剩下一个桃子 int day=10; head=(node*)malloc(sizeof(node); p=head;while(day0) s=(node*)malloc(sizeof(node);/分配存属空间 s-data=peaches;/用来存放结点数据 p-next=s; /把结点插入链表中 p=s; peaches=(peaches+1)*2;/第一天的桃子数是第二天桃子数加后的2倍; day-; p-next=NULL; p=head; head=head-next;/使头指针指向头结点 free(p); /释放指针Pint print()/输出从这十天每天的桃子数 node *p; p=head; int day=10;while(p&day0) printf(第%d天的桃子数:%d个n,day,p-data); p=p-next; day-;return 0 ;int array()static unsigned short arr11=0,0,0,0,0,0,0,0,0,0,1;for(int i=11;i=2;i-)arri-2=2*(arri-1+1);printf(第%d天还剩桃子%dn,i-1,arri-1);return 0;int digui() int n ; int fun(int); n = fun (1); printf(%dn,n); return 0; int fun(int day)if(day=10)return 1;elsereturn (fun(day+1)+1)*2;void main() int n;pp:do printf(t *n); printf(t *猴子吃桃问题的实现方法*n); printf(t *n);printf(t 1 数组实现 n); printf(t 2 递归实现 n); printf(t 3 链表实现 n); printf(t 4 退出程序 n); printf(t *n); printf(t请选择(1-4): bb); scanf(%d,&n); if(n4) printf(重新输入1或2或3n); goto pp;else switch(n) case 1: printf(使用数组的方法n); array();break; case 2: printf(使用递归的方法); digui();break; case 3: printf(使用链表的方法); creat(); print(); break; case 4: exit(0); while(n=1&n=4); 4.4数据结构说明4.4.1基本抽象数据类型ADT linknode 数据对象: D= datai|1i10, datai属ElemType类型 数据关系: R=| datai,datai+1,i=1,2104.4.2基本运算:Ai-1=(Ai+1)*24.4.3具体问题的数据类型:int day 定义数组的类型为整型4.5 程序流程图结束开始 n0n=4输入n的值执行相应操作n=n+1N的操作5测试数据及情况分析本系统共三种操作实现猴子吃桃问题,分拨而对应1,2,3,操作时键入任意一个即可得到由改算法算出的结果。程序正常运行后出现的第一个页面如图1所示,可根据需求选择1、2、3、4四个数字进行操做,得到结果。图1输入“1”,则程序正常运行,显示如图2所示界面,得到由数组数据结构求得的结果,此时可继续输入2、3两个数字中的任意一个,进行求解图2输入“2”,程序正常运行,显示如图3所示界面,得到由递归算法求得的结果,此时可输入数字3继续进行操作。图3输入“3”程序正常运行,显示如图4所示。图4计算完毕,输入“4”退出程序,显示效果如图5图5对系统进行测试,输入非1、2、3、4的数字,查看系统的运行结果,在此输入“5”,进行测试,得到结果如图6所示。图66总结经过这一个学期对数据结构的学习,我学到了不少东西,可能有一些学的不够理想,但这些知识为我的下一步学习打下了坚实的基础。做这样一个课程设计,一方面是为了检查我一个学期来学习的成果,另一方面也是为了让我进一步的掌握和运用它,同时也让我认清自己的不足之处和薄弱环节,加以弥补和加强。 在学知识的过程中,一定要多动手、动脑,将所学的知识熟练掌握,自如运用。通过这次课程设计,对我们大家的逻辑思维能力是一个很大的锻炼,加强了我们的系统思考问题的能力。此次课程设计也对我们的团对合作精神有了极大的提高,以前没有做过什么稍大的程序,就都是一个人做,做了后,甚至还洋洋得意,可这一次,一开始是对我们的一个打击,没有一个人能单独完成,最后还是大家一齐出力,共同商讨,才得出了最后的结果,并且在这个过程中,我们相互之间还掌握了其他人掌握了但自己还没有掌握的知识,是一次知识的大汇总,并且在这个讨论的过程中,还更正了不少我们各自自身对于某个知识点的误区。设计一个“猴子吃桃”的程序,我通过查询资料和上网搜,对程序有了初步的设想。通过各个功能的算法进行分析后,进一步设计出了程序。这学期的课程设计,加深了我对数据结构基本知识的理解,提高了综合运用课程知识的能力;培养了参考书籍,查阅手册、图表和文献资料的能力;初步掌握了简单软件的分析方法和设计方法;并且了解了与课程有关的工程技术规范,能够正确的解释和分析出实验结果。在本次课程设计的过程中,我们遇到了很多困难,比如对猴子吃桃问题课程设计的理解,在开始阶段,我们都未能正确地理解该问题,把用三种方法进行课程设计理解为用三种不同的方法对猴子吃桃问题进行求解,而不是将三种方法联系起来通过一个主函数来调用,这使得我们浪费了很多时间,但对我们影响最大的是精神上的打击,自己好多天的辛勤劳动就这样付诸流水,这让我们感觉很不爽,但错了就是错了,我们能做的就是重新进行程序编辑,在短时间内将程序编出来,这给了我们很大的压力,看着别人都已经快收尾了,而我们却要重新开始,而摆在我们面前的难题还不仅这些。本次课程设计对格式的要求很严,我们必须很认真的做每一步,丝毫不能马虎,而且转换了一个新的编译环境,这个变化让我们有点儿难以适应,以至于在开始的时候无从下手,后来经过团队的努力,我们将问题的核心找了出来,讨论出了基本思路,在团队的努力下我们才能将程序编译出来,然后在做课程设计报告的过程中才轻松了一些,最后在我们的努力之下大家都顺利的完成了任务。通过本次课程设计我掌握了C语言和数据结构的基础知识以及一些实践经验,为更好地在以后的学习中能够更好地运用打下了基础。总之,这次课程设计收获颇多,使我各方面的能力得到了提升,积累了丰富的经验。参考文献1吴文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论