- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Data organization curriculm project
数据结构课程设计
设计题目: 猴子吃桃子问题
专业班级: 通信工程0804班
学生学号: 0909082421
学生姓名: 王 璐
指导老师: 彭 春 华
完成时间: 2010-06-06
目 录
问题描述……………………………………………….1页
基本要求………………………………………………..1页
程序设计思想………………………………………1---2页
软件模块结构图………………………………………..2页
程序流程图……………………………………………..3页
源程序………………………………………………4---7页
调试分析……………………………………………8---9页
测试数据…………………………………………..9---10页
心得体会…………………………………………11---12页
一.问题描述
这是一个很经典的简易的程序设计题,具体题目为:
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。
?二.基本要求
1)采用数组数据结构实现上述求解
2)采用链数据结构实现上述求解
3)采用递归实现上述求解
虽然题目很简单,但是要求用多种方法实现,要求知识比较全面,涉及到数组,链表,函数,指针,结构体,循环等方面的基础知识。
三.程序设计思想
1.分析题目。每天吃当前桃子数目的一半再加一个,所以桃子数目肯定为偶数。用我们所熟悉的函数来表示,即:f(x+1)=f(x)/2-1;其中x代表第多少天。:猴子摘桃子的那天也就是第一天就吃了所摘桃子的一半加一个,所以桃子总数应该为第一天加1再乘以2,等效为f(0)。
2. 实现方法。最容易想到的也是最简单的就是运用函数的递归。给出了边界条件与递归函数,直接调用就可以了。用数组实现,先定义一个一维数组,然后结合循环,也可以求解。如果用链表的话,相对来说要复杂点。先要构建一个动态链表,将头指针赋值给p,p赋值给q,使p, q同时指向链表头,将第十天的桃子数放在链表第一个数据域中,然后移动p,q使后一个数据域中存放的是前一个加1的2倍,即倒过来存放数据。
四.软件模块结构图
猴子吃桃问题用数组实现
猴子吃桃问题
用数组实现
用递归实现
用链表实现
五.程序流程图
开 始选择实现方法数组递归链表
开 始
选择实现方法
数组
递归
链表
输入x=10
输入n
n==9输出y
n==9
输出y【10】=1
T
T
Fm=2*(duigui(n+1)+1)i=0
F
m=2*(duigui(n+1)+1)
i=0
T
T
输出m=1FY【
输出m=1
F
Y【x-1】=(y【x】+1)*2
输出mx--
输出m
x--
输出y【x】
输出y【x】
六.源程序
#includestdio.h
#includestdlib.h
#define NULL 0
typedef int datatype;
typedef struct link
{
datatype tao;
struct link *next;
}node;
void shuzu()
{
int day[11],i;
day[10]=1;
for(i=10;i0;i--)
{
day[i-1]=2*(day[i]+1);
printf(%d\t,i);
printf(%d\n,day[i]);
}
printf(the total :%d\n,day[0]);
}
int digui(int n)
{
int m;
if(n==9)
m=1;
else
m=2*(digui(n+1)+1);
printf(%d\t,n+1);
printf(%d\n,m);
return(m);
}
node *init_link(node *head)
{
head=NULL;
return(head);
}
node m;
void toutao(node *head)
{
int i=10;
node *p,*q;
p=head;
m.tao=1;
p=m;
while(i0)
{
q=p;
q-tao=p-tao;
p-next=(node*)malloc(sizeof(node));
p=p-next;
p-tao=2*(q-tao+1);
printf(%d\t,i);
printf(%d\n,q-tao);
i--;
}
printf(the total : %d\n,p-
文档评论(0)