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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

课程设计数据结构课程设计精华版.docx

1、课程设计数据结构课程设计精华版数据结构课程设计设计说明书N!非递归算法的设计与实现学生 成 学 号1118064050 班 级网络1102班 成 绩 指导教师余冬梅 数学与计算机科学学院2014年 1 月 5 日 课程设计任务书2013 2014 学年第 一 学期课程设计名称: 数据结构课程设计 课程设计题目: N!非递归算法的设计与实现 完 成 期 限:自 2013 年 12 月 23 日 至 2014 年 1 月 5 日 共 2 周设计容:本次课程设计的任务是N!非递归算法的设计与实现,在设计过程中应注意n值大小与数据类型表数围之间的关系,并尽可能求出较大n值的阶乘。 通过本次的实践,要求

2、学生完成以下任务:(一)阐述设计思想,画出流程图;(二)说明测试方法,写出完整的运行结果;(三)从时间、空间对算法效率进行分析;(四)较好的界面设计;(五)加强团队合作精神,开拓创新能力;(六)编写课程设计报告,文档资料完整规。指导教师:余冬梅 教研室负责人:余冬梅 课程设计评阅评语: 指导教师签名: 年 月 日摘 要采用VC+作为软件开发环境,编写设计了一个非递归算法实现 n! 的计算,该软件具有计算从0到任何数之间整数的阶乘的功能。采用链式存储结构,遍历出运算结果,按照栈的先进后出思想输出结果,实现了整数的阶乘运算,界面清晰,易于用户使用。 关键词:n!,非递归,链式存储,栈2 需求分析

3、1 4.2 流程图 35 程序编码 46 程序调试与测试 67 结果分析 88 总结 89 设计体会及今后的改进意见 8参考文献 91 课题描述尽管递归算法是一种自然且合乎逻辑的解决问题的方式,但递归算法的执行效率通常比较差。因此在求解许多问题时常采用递归算法来分析问题,用非递归方法来求解问题,另外一些程序不支持递归算法来求解问题,所以我们都会用非递归算法来求解问题。本次课程设计主要容是:用非递归算法实现n!的计算,由于计算机中数据的存储围有限,而又要求出尽可能大的n的阶乘的值,用链表构造n的运算结果的存储结构,用链式存储方式,最后输出n!的运算结果。本次课程设计的目的是:通过本次课程设计,可

4、以使大家了解缓存中数据的存储围,提高自学能力,增强团队合作意识。2 需求分析在本次n!非递归算法的课程设计中主要用到的知识有:链表、函数,选择条件中的结构语句(if.else),和循环结构语句中的语句while()语句、dowhile()语句和for()语句,选择语句if的运用。对n!的非递归的算法,主要是运用非递归的算法实现n的阶乘。限制条件:1.要求的n必须是整数;2.n的围;3.数据类型和表数围。3 概要设计 递归和非递归算法是相通的,递归是一种直接或间接调用自身的算法,而非递归不调用自身函数。 递推采用的是递归和归并法,而非递推只采用递归法。递推法一般容易溢出,所以一般都采用递推法分析

5、,而用非递推法设计程序。本次实验分为两个步骤:(1). 实现阶乘的模块m(n):从2开始连乘到n,实现求n的阶乘,相对简单,容易计算。(2). 当n较大时,如果用int型结果就会溢出,所以实现阶乘需要特殊处理: 从较小值开始,进行数值分解,比如将182分解为18和2,2存储在链表数据域的第二个位置(第一个位置是1,表示0的阶乘是1),然后将18作为进位,如果进位不为0,则继续分解。最终会以1,8,2的形式存储在链表当中,这样就不存在存的溢出。最后通过遍历的方法,遍历到最高位,及1,然后依次输出后续的数字,便是阶乘的结果。4 详细设计4.1 定义存储结构和部分代码#include /结构体列表s

6、truct Node int data; Node* next; /指向大数的高位 Node* pre; /指向大数的低位 ; /非递归算法计算阶乘for(i=2;idata)+jinwei; cur-data=temp%10; /取个位存下来,如91*2=182,取2存储 jinwei=temp/10; /十位和百位作为进位,192中取18为进位 if(cur-next=NULL) break; cur=cur-next; while(jinwei!=0) cc=new Node; cc-data=jinwei%10; /18中取8存储下来 cc-pre=cur; cc-next=NULL;

7、 cur-next=cc; cur=cc; jinwei/=10; /18中取1作为进位 4.2 流程图 图4.1 主函数流程图 5 程序编码#include struct Node int data; Node* next; /指向大数的高位 Node* pre; /指向大数的低位 ; void main() int n,temp,i,jinwei,mark; Node *head,*cc,*cur; char ch; printf(*计算阶乘*nn); while(1) head=new Node; /存放第一个节点,值为1 head-data=1; head-pre=head-next=

8、NULL; printf(Please input a number: ); mark=scanf(%d,&n); if(n0) /出错处理 printf(输入有误,请重新输入:n); getchar(); continue; for(i=2;idata)+jinwei; cur-data=temp%10; /取个位存下来,如91*2=182,取2存储 jinwei=temp/10; /十位和百位作为进位,192中取18为进位 if(cur-next=NULL) break; cur=cur-next; while(jinwei!=0) cc=new Node; cc-data=jinwei%

9、10; /18中取8存储下来 cc-pre=cur; cc-next=NULL; cur-next=cc; cur=cc; jinwei/=10; /18中取1作为进位 cur=head,i=0; while(cur-next) cur=cur-next; /遍历到最高位 printf(%d! = ,n); while(cur) /从最高位到最低位打印 cc=cur; printf(%d,cur-data); cur=cur-pre; delete cc; printf(nn是否继续?(Y/N)n); getchar(); ch=getchar(); if(ch!=Y&ch!=y) break

10、; 6 程序调试与测试 (1) n=0:图6.1 0的阶乘(2) n= -5:图6.2 -5的阶乘(3) n=1024:图6.3 1024的阶乘7 结果分析 在执行函数的过程中,对上述提到的各种情况做了判断和提示,如: 输入负数,系统会提示“输入错误,请重新输入:”; 输入小数,系统会提示“输入错误,请重新输入:”。 本次设计的函数,能求出较大整数的阶乘,能实现循环运算和退出功能。 算法的时间复杂度为: O(n)=n*length*length; 算法的空间复杂度为: O(n)=length;8 总结在这次通信原理课设之后,静下心来认真总结,发现收获很多主要有三个方面:首先在这次课设中,我和小

11、组其他成员经历了许多快乐与心酸,我和大家在一起讨论问题,有时候大家会愁眉不展,有时因为得到了队员提供的一个好建议或者一个好的想法而兴奋的去仿真调试,最主要的是我体会到了团队协作的快乐与好处,我和组员相互学习,共同进步。其次体会最深的就是自己实践的能力还有待提高,平时的学习只是理论的,教育式的,有一点与实际不符,在这次课设过程中,我从最基本入手,建模规划,调试,问题处理,我在实践中一点点的提高,整个过程结束,我对设计过程有了基本的认识,对自己的努力方向也有了更加深刻的认识。最后就是自己心态的一个转变,从前对于集体的工作总是拖拖拉拉,在原地踏步而不肯去采取行动,经过这次课程设计,虽然做的题目很简单

12、,但我认识到积极行动与合作的重要性,没有什么天上掉馅饼的事,只要自己努力去做了,就会有相应的成效。9 设计体会及今后的改进意见 在做本次课程设计的时候,自己也相继遇到了很多问题,很多自己的不足之处也暴露了出来,比如:刚开始自己写的代码只能算到12的阶乘,但是因为知道了自己哪里有不足,所以可以针对不足去弥补:翻阅资料、和同学探讨,使得学到的东西更深刻,更透彻,所以本次课程设计使我对非递归算法和进位有了更好的理解。经过这段时间的上机实践学习,我对数据结构和C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断地练习和上机编程才能熟练地掌握它。当然,在上机的同时也要有一定的C语言理论知识,这样才能使理论和实践相互促进。参考文献1 严蔚敏,吴伟民.数据结构(C语言版)M.:清华大学,2011年2 谭浩强.C程序设计M. :清华大学,2010(3)

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

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