数据结构课程设计猴子吃桃.docx
- 文档编号:26920858
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:15
- 大小:110.29KB
数据结构课程设计猴子吃桃.docx
《数据结构课程设计猴子吃桃.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计猴子吃桃.docx(15页珍藏版)》请在冰豆网上搜索。
数据结构课程设计猴子吃桃
数据结构课程设计
设计题目:
猴子吃桃子问题
专业班级:
学生学号:
学生姓名:
目录
一、问题描述2
二、程序设计思想3
三、软件模块结构图以及模块功能3
四、程序流程图7
五、源程序8
六、调试分析11
七、心得体会14
一、问题描述
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第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倍,即倒过来存放数据。
三、软件模块结构图以及模块功能
1.用数组实现
intshuzu(intn)
{/*使用数组算法*/
intday[11],i;
day[10]=1;
for(i=n;i>0;i--)
{
day[i-1]=2*(day[i]+1);
printf("%d\t",i);
printf("%d\n",day[i]);
}
returnday[1];
}
2.用常规方法实现
intcangui(inti)
{/*使用常规算法*/
intpee=1;
for(i;i>1;i--)
pee=(pee+1)*2;
returnpee;
}
3.用递归方法实现
intdigui(intn)
{/*使用递归算法*/
inta;
if(n==1)a=1;
elsea=(digui(n-1)+1)*2;
returna;
}
4.用链表方法实现
typedefintdatatype;
typedefstructlink
{
datatypetao;
structlink*next;
}node;
node*head;
node*init_link(node*head)
{
head=(node*)malloc(sizeof(node));
head->next=0;
return(head);
}
voidchitao_link(node*head)
{
inti=10;
nodem;
node*p,*q;
p=head;
m.tao=1;
p=&m;
while(i>0)
{
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("桃子总数是:
%d\n",q->tao);
}
四、程序流程图
F
T
T
F
五、源程序
#include
#include
/*-------------------------------*/
typedefintdatatype;
typedefstructlink
{
datatypetao;
structlink*next;
}node;
node*head;
node*init_link(node*head)
{
head=(node*)malloc(sizeof(node));
head->next=0;
return(head);
}
voidchitao_link(node*head)
{
inti=10;
nodem;
node*p,*q;
p=head;
m.tao=1;
p=&m;
while(i>0)
{
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("thetotal:
%d\n",q->tao);
}
/*-------------------------------*/
intcangui(inti)
{/*使用常规算法*/
intpee=1;
for(i;i>1;i--)
pee=(pee+1)*2;
returnpee;
}
/*-------------------------------*/
intdigui(intn)
{/*使用递归算法*/
inta;
if(n==1)a=1;
elsea=(digui(n-1)+1)*2;
returna;
}
/*-------------------------------*/
intshuzu(intn)
{/*使用数组算法*/
intday[11],i;
day[10]=1;
for(i=n;i>0;i--)
{
day[i-1]=2*(day[i]+1);
printf("%d\t",i);
printf("%d\n",day[i]);
}
returnday[1];
}
/*-------------------------------*/
main()
{
inti,j,m;
intpeech=1;
printf("请输入天数:
");
scanf("%d",&i);
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║else:
退出║\n");
printf("\t╚══════════════════════╝\n");
for(j=0;j<10;j++)
{
scanf("%d",&m);
switch(m)
{
case1:
printf("使用数组的方法\n");
peech=shuzu(i);
printf("桃子总数是:
%d\n",peech);
break;
case2:
printf("使用递归的方法\n");
peech=digui(i);
printf("桃子总数是:
%d\n",peech);
break;
case3:
printf("使用常规的方法\n");
peech=cangui(i);/*常规算法*/
printf("桃子总数是:
%d\n",peech);
break;
case4:
printf("使用链表的方法\n");
head=init_link(head);
chitao_link(head);
break;
default:
exit(0);
}
}
}
六、调试分析
程序开始,输入天数,按数字选择算法实现。
1.用数组实现
4.用链表实现
2.用递归实现
3、用常规算法实现
完整的程序调试图:
七、心得体会
终于挨到了写心得和体会的时候了,也就意味着这个课程设计接近了尾声,的确令人兴奋,看着自己的劳动成果,内心真的很激动。
一开始从一大堆的题目中挑选适合自己和自己感兴趣的,发现自己对好多题都没感觉,关键就是当初基础没打好,即使有思想,也不一定能运行。
所以当初就选了猴子吃桃这个简单一点的程序,因为它要用多种方法来实现,而且更接近于基础。
翻书重新学习是我迈开的第一步,经过两三天的努力,我把相关的知识学了一遍,把框架弄出来了,然后分开编程,可是还有一些小问题存在,运行不了,但是一想到自己由完全不会到慢慢的开始懂了,就觉得自己不能放弃,一定会成功。
我参照类似程序,改改和添添,终于大功告成,一块块小程序纷纷运行成功。
顿时信心倍增,我又废寝忘食的把程序小块整合到一起,看到运行界面,我欢呼雀跃,看到正确结果,我觉得自己真行。
最后小结:
程序设计分为逻辑设计和详细设计两步。
逻辑设计指的是,对问题描述中的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义软件模块结构图;详细设计则为定义相应的存储结构,并写出各函数模块的伪码算法。
程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:
首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。
可得最后结论。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 猴子