首页 [原创]用C语言解决猴子吃桃子问题

[原创]用C语言解决猴子吃桃子问题

举报
开通vip

[原创]用C语言解决猴子吃桃子问题[原创]用C语言解决猴子吃桃子问题 用C语言解决猴子吃桃子问题 学生姓名:贾勤 指导老师:湛新霞 摘 要 本课程设计主要解决猴子吃桃子的问题。一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。在课程设计中,系统开发平台为Windows 2000,程序设计设计语言采用Visual C++,数据库采用MS SQL 2000,程序运行平台为Windows 98/2000/XP。在整个程序中分别采用数组数据结构、链数据结构、递归...

[原创]用C语言解决猴子吃桃子问题
[原创]用C语言解决猴子吃桃子问题 用C语言解决猴子吃桃子问题 学生姓名:贾勤 指导老师:湛新霞 摘 要 本课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 主要解决猴子吃桃子的问题。一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 实现求出原来这群猴子共摘了多少个桃子。在课程设计中,系统开发平台为Windows 2000,程序设计设计语言采用Visual C++,数据库采用MS SQL 2000,程序运行平台为Windows 98/2000/XP。在整个程序中分别采用数组数据结构、链数据结构、递归等结构形式实现此问题的求解。程序通过调试运行,初步实现了设计目标。 关键词 程序设计;C++;数组;链;递归;猴子吃桃 1 引 言 在日常生活中经常遇到一些与数据计算有关的问题,许多与猴子吃桃问题类似的问题要求用计算机程序语言来解决,用这个程序算法可以解决一些类似问题,以便利于生活实际。 1.1 课程设计背景 猴子吃桃问题涉及一个比较有趣的数组,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数a[i]的递推公式为a[i]=(a[i-1]+1)*2。a[i]实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为a[i]=3*pow(2,(i-1))-2 (i>=2) 1.2 课程设计目的 在这个程序中我们主要是用C语言解决猴子吃桃问题,一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。 生活中或学术上有很多类似的问题,这个问题看似简单,却可能使很多重大问题的重要组成部分或者是核心。解决此问题的目的是以便在生活中解决根本性问题,是生活变得更加便利。 1.3 课程设计 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 这个程序的内容是以C语言为程序语言载体分别用数组数据结构、链数据结构、递归等结构形式实现此问题的求解。 2 需求分析 这个课程设计分为三个部分,即分别用三种不同的方法解决猴子吃桃子问题。每个部分都有不同的算法思想。 用数组结构实现的算法,通过构造求桃子数的数组,然后输出要求的项来实现。 用链结构实现的算法,则是建立链表,将每天的桃子数目存入链表,然后输出第一天的桃子数。 用递归结构实现的算法,是通过函数本身的特点,反复调用自身,最后找到递归的出口,求得算法的解。 3 概要设计 2.1设计思路 C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 2.2设计 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 如果用数组结构解决这个问题,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数a[i]的递推公式为a[i]=(a[i-1]+1)*2。a[i]实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为a[i]=3*2e(i-1)-2 (i>=2)。 如果用链结构解决这个问题,建立一个链表,根据每天桃子数与后一天桃子数的关系n=2*n+2,依次将每天的桃子数存进链表中,最后输出第一天的桃子数。 如果用递归结构解决这个问题,要求利用他们每天都吃当前桃子的一半且再多吃一个这一特点,设计一个递归算法。 4 详细设计 3.1 数组结构 把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数a[i]的递推公式为a[i]=(a[i-1]+1)*2。a[i]实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为a[i]=3*pow(2,(i-1))-2 (i>=2)。数组结构算法的流程图如图3-1: 开 始 建立一个以天数为下标以 剩下桃子数为元素的数组 规定此数组的通向公式 求第一天的桃子数 结 束 图3-1 int day,tao[11]; //定义数组和下标 tao[0]=0; //tao[0]赋值为0 tao[1]=1; //倒数第一天的桃子数为1 for(day=2;day<=10;day++) tao[day]=3*pow(2,day-1)-2; //给数组的赋值 printf("最初的桃子数为%d\n",tao[10]);//输出最初的桃子数 3.2链结构 用链结构实现这个算法,其核心是利用链表这种存储结构,将每天的桃子数存储在链表中,在链表中实现数的递推。 首先是建立一个空链表,产生一个头结点,且将头结点的地址赋给L。 然后把每天的桃子数从链表的第一个结点插入链表。 最后第一天的桃子数被最后一个插入链表,成为链表中第一个值,将其赋给e,最后只要输出e即得到第一天的桃子数。 建立单链表的程序代码如下: void InitList(LinkList &L)//构造一个空链链表 { L=(LinkList)malloc(sizeof(LNode));//产生头结点,并使L指向此头结点 if(!L) exit(OVERFLOW); L->next=NULL; } 这个算法中,我运用了单链表,单链表每个结点由数据和指向后驱结点指针两部分构成。在插入数据时,将插入的位置的前一项的原有后去指针赋给此结点的后去指针,然后把插入结点的data地址赋给前一结点的后驱指针,插入就完成了。 插入结点的程序代码如下: Status ListInsert(LinkList L,int i,ElemType e)//在第i个位置之前插入元素e { int j=0;//计数器初值为0 LinkList s,p=L;//p指向头结点 while(p&&jnext; } 3.3递归 设计递归算法,利用x=2*x+2,定义一个函数sum_fan,然后不断调用自身, 求得第一天的桃子数。 递归算法的流程图如图3-3 开 始 定义参数i和n i>0 Y N 调用本身,且--i 输出sum 开 始 主要程序代码如下: int sum_fan(int n,int i) //子函数sum_fun,参数n和i接受主函数的参数 x和day { if (i>0) { n = sum_fan((n+1)*2,--i); //每一次都用((n+1)*2)的值去调用子函数本身 } return n; //返回结果 ) 5 调试分析 4.1运行环境 在本课程设计中,系统开发平台为Windows2000,程序设计语言为Visual C++6.0,程序的运行环境为Visual C++ 6.0。Visual C++一般分为三个版本:学习版、专业版和企业版,不同的版本适合于不同类型的应用开发。实验中可以使用这三个版本的任意一种,在本课程设计中,以Visual C++ 6.0为编程环境。 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++已经有了很大的变化,在界面、功能、库支持方面都有许多的增强。最新的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支持,因而在各种C++语言开发工具中脱颖而出,成为目前最为流行的C++语言集成开发环境。 Visual C++ 6.0秉承Visual C++以前版本的优异特性,为用户提供了一套良好的可视化开发环境:主要包括文本编辑器、资源编辑器、工程创建工具、 Debugger调试器等等。用户可以在集成开发环境中创建工程、打开工程、建立、 打开和编辑文件、编译、链接、运行、调试应用程序。 4.2运行结果 数组结构的运行结果如图4-1 图 4-1 数组结构结果 链结构的运行结果如图4-2 图4-2链结构结果 递归结构的运行结果如图4-3 图4-3递归结构结果 6 总结 这次的课程设计的内容是用C语言实现猴子吃桃子问题,这对我来说是个很具有挑战性的任务,虽然只做了一个很简单的学生学籍管理模块,但通过两个星期的设计也从中学到了不少东西,更深刻的理解了课本中的内容。《数据结构》是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。同时再次深刻理解了C++中类的思想和实现,文件的概念和相关操作,以及有关数据结构的很多知识。根据实际问题的需要,对个方面的优缺点加以综合平衡,从中选择比较适宜的实现方法。在本次课程设计中,我明白了理论与实际相结合的重要性,并提高了自己组织数据及编写程序的能力,培养了基本的,良好的程序设计技能。提高综合运用所学知识的能力。 在这次课程设计中曾遇到了不少问题,就单凭我一个人的能力很难准时有效的完成这次的课程设计,在此,我忠心感谢我的指导老师——湛新霞。湛老师对工作认真负责,耐心辅导,知识丰富而且相当和蔼。在这次课程设计中给了我很大的帮助。他严谨的治学精神和深厚的理论水平都使我获益非浅。同时还要感谢我的同学,他们为我提出了很多有用的建议,帮助我完成了这次的课程设计。最后也要感谢我们学校为我们提供良好的编程环境,使我们能够按时完成任务。 参考文献 [1] 王红梅,胡明,王涛. 数据结构(C++版) . 北京:清华大学出版社,2007 [2] 王红梅,胡明,王涛. 数据结构(C++版) 学习辅导与实验指导. 北京:清华 大学出版, 2007 [3] 谭浩强 . C++程序设计. 北京:清华大学出版社, 2004 [4] 郑阿奇,丁有和. Visual C++ 教程 人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程 .北京:机械工业出版社,2006 [5] 李文军,李师贤,周晓聪. C++作为计算机专业程序设计入门语言的实践与探讨. 计算机科学,1999,26(4):80,83 附录:源程序代码 数组结构代码 # include # include void main() { int day,tao[11]; //定义数组和下标 tao[0]=0; //tao[0]赋值为0 tao[1]=1; //倒数第一天的桃子数为1 for(day=2;day<=10;day++) tao[day]=3*pow(2,day-1)-2; //给数组的赋值 printf("最初的桃子数为%d\n",tao[10]);//输出最初的桃子数 } 链结构代码 #include"iostream" #include"stdlib.h" #include"stdio.h" #define TRUE 1 #define FALSE 0 #define ERROR 0 #define OVERFLOW 0 #define OK 1 #define NULL 0 typedef int Status; typedef int ElemType; struct LNode { ElemType data; LNode *next; }; typedef LNode *LinkList; void InitList(LinkList &L)//构造一个空链链表 { L=(LinkList)malloc(sizeof(LNode));//产生头结点,并使L指向此头结点 if(!L) exit(OVERFLOW); L->next=NULL; } Status GetElem(LinkList L,int i,ElemType &e)//当第i个元素存在的时,将其值赋 给e { int j=1;//计数器初值为0 LinkList p=L->next;//p指向第一个结点 while(p&&jnext; } if(!p||j>i) 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||j>i-1) return 0; s=(LinkList)malloc(sizeof(LNode));//生成新的结点 s->data=e; s->next=p->next;//新结点指向原第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 (i>0) { 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("%d",sum);
本文档为【[原创]用C语言解决猴子吃桃子问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_337177
暂无简介~
格式:doc
大小:50KB
软件:Word
页数:12
分类:
上传时间:2017-09-30
浏览量:49