ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:70.30KB ,
资源ID:22999067      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22999067.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(猴子吃桃.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

猴子吃桃.docx

1、 猴子吃桃猴子吃桃 河南理工大学万方科技学院 数据结构课程设计报告 院系名称 建筑与测绘工程系 姓 名 学 号 专 业 地 理 信 息 系 统 指导教师 目录 1 引 言 4 2 需求分析 6 3 概要设计 7 4 详细设计 8 5 调试分析 11 6 课程设计总结 14 数据结构课程设计报告 -猴子吃桃问题 问题描述 本课程设计主要解决猴子吃桃子的问题。一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10 天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。在课程设计中,系统开发平台为 Windows 2000,程序设计设计语言采用 Visual C+,数

2、据库采用 MS SQL 2000,程序运行平台为 Windows 98/2000/XP。在整个程序中分别采用数组数据结构、链数据结构、递归等结构形式实现此问题的求解。程序通过调试运行,初步实现了设计目标。关键词 程序设计;C+;数组;链;递归;猴子吃桃 1 引引 言言 在日常生活中经常遇到一些与数据计算有关的问题,许多与猴子吃桃问题类似的问题要求用计算机程序语言来解决,用这个程序算法可以解决一些类似问题,以便利于生活实际。1.1 课程设计背景 猴子吃桃问题涉及一个比较有趣的数组,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标 i,剩下桃子的个数 ai的递推公式为 ai=(ai-1+1)*2

3、。ai实际代表了倒数第 i 天剩下的桃子数。所以可以求得此数组的通项公式为 ai=3*pow(2,(i-1))-2(i=2)1.2 课程设计目的 在这个程序中我们主要是用 C 语言解决猴子吃桃问题,一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10 天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。生活中或学术上有很多类似的问题,这个问题看似简单,却可能使很多重大问题的重要组成部分或者是核心。解决此问题的目的是以便在生活中解决根本性问题,是生活变得更加便利。1.3 课程设计内容 这个程序的内容是以 C 语言为程序语言载体分别用数组数据结构、链数据结构、递

4、归等结构形式实现此问题的求解。2 需求分析 这个课程设计分为三个部分,即分别用三种不同的方法解决猴子吃桃子问题。每个部分都有不同的算法思想。用数组结构实现的算法,通过构造求桃子数的数组,然后输出要求的项来实现。用链结构实现的算法,则是建立链表,将每天的桃子数目存入链表,然后输出第一天的桃子数。用递归结构实现的算法,是通过函数本身的特点,反复调用自身,最后找到递归的出口,求得算法的解。3 概要设计 3.1 设计思路 C 是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式

5、提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。3.2 设计方案 如果用数组结构解决这个问题,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标 i,剩下桃子的个数 ai的递推公式为ai=(ai-1+1)*2。ai实际代表了倒数第 i 天剩下的桃子数。所以可以求得此数组的通项公式为 ai=3*2e(i-1)-2(i=2)。如果用链结构解决这个问题,建立一个链表,根据每天桃子数与后一天桃子数的关系 n=2*n+2,依次将每天的桃子数存进链表中,最后输出第一天的桃子数。如果用递归结构解决这个问题,要求利用他们每天都吃当前桃子的一半且再多吃一个这一特点

6、,设计一个递归算法。4 详细设计详细设计 4.1 数组结构 把猴子吃桃的天数倒过来看的话,以天数作为数组的下标 i,剩下桃子的个数 ai的递推公式为 ai=(ai-1+1)*2。ai实际代表了倒数第 i天剩下的桃子数。所以可以求得此数组的通项公式为 ai=3*pow(2,(i-1))-2(i=2)。数组结构算法的流程图如图 4-1:图 4-1 int day,tao11;/定义数组和下标 tao0=0;/tao0赋值为 0 tao1=1;/倒数第一天的桃子数为 1 for(day=2;daynext=NULL;这个算法中,我运用了单链表,单链表每个结点由数据和指向后驱结点指针两部分构成。在插入

7、数据时,将插入的位置的前一项的原有后去指针赋给此结点的后去指针,然后把插入结点的 data 地址赋给前一结点的后驱指针,插入就完成了。插入结点的程序代码如下:Status ListInsert(LinkList L,int i,ElemType e)/在第 i个位置之前插入元素 e int j=0;/计数器初值为 0 LinkList s,p=L;/p 指向头结点 while(p&jnext;4.3 递归 设计递归算法,利用 x=2*x+2,定义一个函数 sum_fan,然后不断调用自身,求得第一天的桃子数。递归算法的流程图如图 4-3 N Y 图 4-3 主要程序代码如下:int sum_f

8、an(int n,int i)/子函数 sum_fun,参数 n 和 i 接受主函数的参数 x 和 day if(i0)n=sum_fan(n+1)*2,-i);/每一次都用(n+1)*2)的值去调用子函数本身 return n;/返回结果 5 调试分析 5.1 运行环境 在本课程设计中,系统开发平台为 Windows2000,程序设计语言为 Visual C+6.0,程序的运行环境为 Visual C+6.0。Visual C+一般分为三个版本:学习版、专业版和企业版,不同的版本适合于不同类型的应用开发。实验中可以使用这三个版本的任意一种,在本课程设计中,以 Visual C+6.0为编程环

9、境。Microsoft Visual C+6.0 是 Microsoft公司的 Microsoft Visual Studio 6.0 开发工具箱中的一个 C+程序开发包。Visual C+包中除包括 C+编译器外,还包括所有的库、例子和为创建 Windows 应用程序所需要的文档。自 1993 年 Microsoft 公司推出 Visual C+1.0 后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。Visual C+从最早期的 1.0 版本,发展到最新的 7.0 版本,Visual C+已经有了很大的变化,在界面、功能、库支持方面都有许多的增强。最新的

10、 7.0 版本在编译器、MFC 类库、编辑器以及联机帮助系统等方面都比以前的版本做了较大改进。虽然微软公司推出了 Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于 Windows 2000,Windows XP 和 Windows NT4.0。所以实际中,更多的是以 Visual C+6.0 为平台。Visual C+6.0 是 Microsoft 公司推出的目前使用最广泛的基于Windows 平台的可视化编程环境。Visual C+6.0 是在以往版本不断更新的基础上形成的,由于其功能强大,灵活性好,完全课扩展以及具有强大的 Internet支持,因

11、而在各种 C+语言开发工具中脱颖而出,成为目前最为流行的 C+语言集成开发环境。Visual C+6.0 秉承 Visual C+以前版本的优异特性,为用户提供了一套良好的可视化开发环境:主要包括文本编辑器、资源编辑器、工程创建工具、Debugger调试器等等。用户可以在集成开发环境中创建工程、打开工程、建立、打开和编辑文件、编译、链接、运行、调试应用程序。5.2 运行结果 数组结构的运行结果如图 5-1 图 5-1 数组结构结果 链结构的运行结果如图 5-2 图 5-2 链结构结果 递归结构的运行结果如图 5-3 图 5-3 递归结构结果 6 课程设计总结课程设计总结 这次的课程设计的内容是

12、用 C 语言实现猴子吃桃子问题,这对我来说是个很具有挑战性的任务,但通过几天的设计也从中学到了不少东西,更深刻的理解了课本中的内容。数据结构是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。同时再次深刻理解了 C+中类的思想和实现,文件的概念和相关操作,以及有关数据结构的很多知识。根据实际问题的需要,对个方面的优缺点加以综合平衡,从中选择比较适宜的实现方法。在本次课程设计中,我明白了理论与实际相结合的重要性,并提高了自己组织数据及编写程序的能力,培养了基本的,良好的程序设计技能。提高综合运用所学知识的能力。在这次课程设计中曾遇到了不少问题,就单凭我一个人的能力很

13、难准时有效的完成这次的课程设计,在此,我忠心感谢我的老师和同学,他们为我提出了很多有用的建议,帮助我完成了这次的课程设计。最后也要感谢我们学校为我们提供良好的编程环境,使我们能够按时完成任务。附录:源程序代码 数组结构代码#include#include void main()int day,tao11;/定义数组和下标 tao0=0;/tao0赋值为 0 tao1=1;/倒数第一天的桃子数为 1 for(day=2;daynext=NULL;Status GetElem(LinkList L,int i,ElemType&e)/当第 i 个元素存在的时,将其值赋给 e int j=1;/计数

14、器初值为 0 LinkList p=L-next;/p 指向第一个结点 while(p&jnext;if(!p|ji)return ERROR;e=p-data;return OK;Status ListInsert(LinkList L,int i,ElemType e)/在第 i个位置之前插入元素 e int j=0;/计数器初值为 0 LinkList s,p=L;/p 指向头结点 while(p&jnext;if(!p|ji-1)return 0;s=(LinkList)malloc(sizeof(LNode);/生成新的结点 s-data=e;s-next=p-next;/新结点指向

15、原第 i 个结点 p-next=s;/原第 i-1 个结点指向新结点 return 1;void main()LinkList L;int i,e,n;InitList(L);/初始化链表 for(i=1,n=1;i=10;i+)n=2*n+2;/将每一天的桃子数赋值给 n ListInsert(L,1,n);/将 n 的值输入链表 Status GetElem(L,1,e);printf(%d,e);/输出桃子的数目 递归结构代码#include int sum_fan(int n,int i)/子函数 sum_fun,参数 n 和 i 接受主函数的参数 x 和 day if(i0)n=sum_fan(n+1)*2,-i);/每一次都用(n+1)*2)的值去调用子函数本身 return n;/返回结果 void main()int sum;int day=9;/实现函数调用的次数 int x=1;/最后一天还剩得一个桃子 sum=sum_fan(x,day);/调用子函数 sum_fan,并把返回得结果赋给 sum printf(%dn,sum);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1