数据结构课程设计猴子吃桃.docx

上传人:b****3 文档编号:26920858 上传时间:2023-06-24 格式:DOCX 页数:15 大小:110.29KB
下载 相关 举报
数据结构课程设计猴子吃桃.docx_第1页
第1页 / 共15页
数据结构课程设计猴子吃桃.docx_第2页
第2页 / 共15页
数据结构课程设计猴子吃桃.docx_第3页
第3页 / 共15页
数据结构课程设计猴子吃桃.docx_第4页
第4页 / 共15页
数据结构课程设计猴子吃桃.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构课程设计猴子吃桃.docx

《数据结构课程设计猴子吃桃.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计猴子吃桃.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构课程设计猴子吃桃.docx

数据结构课程设计猴子吃桃

 

数据结构课程设计

设计题目:

猴子吃桃子问题

专业班级:

学生学号:

学生姓名:

 

目录

一、问题描述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、用常规算法实现

 

完整的程序调试图:

 

七、心得体会

终于挨到了写心得和体会的时候了,也就意味着这个课程设计接近了尾声,的确令人兴奋,看着自己的劳动成果,内心真的很激动。

一开始从一大堆的题目中挑选适合自己和自己感兴趣的,发现自己对好多题都没感觉,关键就是当初基础没打好,即使有思想,也不一定能运行。

所以当初就选了猴子吃桃这个简单一点的程序,因为它要用多种方法来实现,而且更接近于基础。

翻书重新学习是我迈开的第一步,经过两三天的努力,我把相关的知识学了一遍,把框架弄出来了,然后分开编程,可是还有一些小问题存在,运行不了,但是一想到自己由完全不会到慢慢的开始懂了,就觉得自己不能放弃,一定会成功。

我参照类似程序,改改和添添,终于大功告成,一块块小程序纷纷运行成功。

顿时信心倍增,我又废寝忘食的把程序小块整合到一起,看到运行界面,我欢呼雀跃,看到正确结果,我觉得自己真行。

最后小结:

程序设计分为逻辑设计和详细设计两步。

逻辑设计指的是,对问题描述中的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义软件模块结构图;详细设计则为定义相应的存储结构,并写出各函数模块的伪码算法。

程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:

首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。

可得最后结论。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

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

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