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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

长整数加减运算Word文档格式.docx

1、指定题目的设计与实现1、查阅文献资料,一般在3篇以上;2、建立数据的逻辑结构和物理结构;3、完成相应算法的设计;4、完成测试工作;5、撰写设计说明书;6、做好答辩工作。三主要内容、功能及技术指标(1)使用双向循环链表存储长整数,每个结点含一个整型变量,主要功能有:长整数输入(建立双向循环链表)、长整数的加法、长整数的减法及结果的显示输出等;(2)至少要用10组测试数据,算法对于这些合法的输入数据都能产生满足规格说明要求的结果;(3)算法对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;对算法实现过程中的异常情况能给出有效信息;(4)任何整型变量的范围是-(215

2、-1)(215-1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开,例1,0000,0000,0000;而输入为1,0001,0001和-1,0001,0000实现加法时,应输出1;(5)较高要求:使程序在整型量范围是-(2n-1)(2n-1)的计算机上都能有效地运行。其中,n是由程序读入的参量。四提交的成果1. 设计说明书一份,内容包括:1) 中文摘要100字;关键词3-5个;2) 序言;3)采用类c语言定义相关的数据类型4)各模块的伪码算法5)函数的调用关系图6)调试分析a、调试中遇到的问题及对问题的解决方法;b、算法的时间复杂度和空间复杂度。7)测试结果8)源程

3、序(带注释)9) 设计总结、参考文献、致谢等。2. 刻制光盘一张。五主要参考文献1严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社.2严蔚敏,吴伟民.数据结构题集(C语言版).清华大学出版社.3 DATA STRUCTURE WITH C+. William Ford,William Topp .清华大学出版社(影印版). 4谭浩强.c语言程序设计. 清华大学出版社. 5数据结构与算法分析(Java版) , A Practical Introduction to Data Structures and Algorithm Analysis Java Edition Clifford A.

4、Shaffer , 张铭,刘晓丹译电子工业出版社 2001 年1月六、各阶段时间安排(共2周)周次日期内容地点第1周星期一教师讲解设计要求,准备参考资料教室星期二三分析设计要求,进行数据结构及算法设计教室、实验室星期四五算法设计,编程实现 实验室第2周星期一三编程上机实现、测试程序检查程序,答辩2013年6月28日摘要 数据结构解决实际应用中的问题,将学习的理论知识应用于实践,增强学生解决实际问题的能力。采用的基本数据结构为线性表。计算机存储的数据是有范围限制的,对于超出存储限制的数据无法直接在计算机中计算,为此需要设计相应的程序来完成这种超出范围限制的长整数间的加减运算。实现任意长的整形数进

5、行加减运算 的程序,要求完成长整数的加、减运算。在这里长整数没有范围限制,可任意长。运算后的进位、借位等都要进行正确处理,可实现动态的输入,实时的输出。关键字:任意长整数,加、减运算序言课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。数据结构是一门重要的专业基础课,是计算机理论和应用的核心基础课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法

6、以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次程序设计中我选择了长整数的代数计算这个题目,在一般的程序运算中,长整数是无法计算的,因为计算机一次能够运算的位数是有限,一旦整数很长,就需要一个程序来进行多次计算,通过这个程序,可一把一个长整数分成多个普通整数来进行计算,使得长整数也可以进行运算。我编写的这个程序就可以进行加减乘除的运算,各个数据也可以是负数。一、概要设计1.1数据结构1.2使用函数二、流程图三、详细设计 3.1数据结构详细设计3.2链表初始化函数: 3.3计算已知的链表长度: 3.4插入函数: 3.5绝对值函数: 3.6读入数据并插入对应的链表函数: 3.7

7、输出函数 3.8加法函数(正数加上正数) 3.9判断俩正数大小函数: 3.10减法函数: 3.11整合八种情况函数: 3.12主函数:四、调试分析 4.1调试过程中遇到的问题五、使用说明和测试结果 5.1使用说明5.2测试结果附录设计总结参考文献致谢一、概要设计1.1数据结构此实验采用的数据结构是双向循环链表。这样可以很容易的找到他的前驱以及它的后继。节点采用结构体类型,代码如下:typedef struct Node / 双向链表的结构体定义 int data; struct Node *prior; struct Node *next;DLNode;1.2使用函数1)void ListIn

8、itiate(DLNode *head)操作结果:初始化一个头结点为head的双向循环链表;2)int ListLength(DLNode *head)计算以head为头结点的链表的长度3)int ListInsert(DLNode *head,int i,int x)将节点数据为x的节点插到第i个位置上去。4)int abs(int x)绝对值函数,返回x的绝对值。5)int InputNumber(DLNode *head)将从键盘中接收数据并把得到的数据存入以head为头结点的链表中。四位一存,中间以逗号区分,结束符为分号。6)void OutputNumber(DLNode *head

9、,int sign)将以head为头结点的链表中的所有数据输出到显示屏上,7)void add(DLNode *head1,DLNode *head2,DLNode *head3)实现正数加正数的加法操作。8)int change(DLNode *head1,DLNode *head2)判断存在俩个链表中的数的大小,如何head1中的数大于head2中的数那么返回值为0,反之返回值为1,相等时返回值为2;9)void minus(DLNode *head1,DLNode *head2,DLNode *head3)计算正数减正数的减法运算。10)void yunsuan(DLNode *head

10、1,DLNode *head2,DLNode *head3,char ch)正数,负数,加法,减法。计算式共分为八种运算,在这之前我已经实现了二种运算,那么这个函数就是把这八种运算按照一定的规则转化成已经实现的二种运算来实现完整的加减法运算。11)void main()主函数。调用以上的各个函数来引导用户进行长整数的加法运算,加法运算.二、函数流程图 三、详细设计3.1数据结构详细设计 双向循环链表的节点由三个部分组成,第一是数据部分data存储此节点的数据,第二是此节点的前驱指针部分*prior指向此节点的前驱,第三是此节点的后继指针部分*next指向此节点的后继。数据部分我们约定它为整形变

11、量,前驱后继指针均为结构体Node类型。void ListInitiate(DLNode *head) /双向链表的初始化 if(*head=(DLNode *)malloc(sizeof(DLNode)=NULL) exit(0); (*head)-prior=*head;next=*head; 初始化之前需要定义一个类型为Node型的头结点变量,经过函数后完成链表的初始化即:头节点的前驱指针指向自己,同时他的后继指针也指向自己。3.3计算已知的链表长度:int ListLength(DLNode *head) /双向链表的表长 DLNode *p=head; int size=0; whi

12、le(p-next!=head) p=p-next; size+; return size; 此函数计算的是已知链表的长度。主要思想:从头结点开始寻找下一个节点,找到计数器加一。直到再次寻找到头结点时停止,计算完毕。3.4插入函数:int ListInsert(DLNode *head,int i,int x) /双向链表的数据插入,i表示是插入的第几个元素 DLNode *p,*s; int j; p=head- j=0; while(p!=head&jdata=x;prior=p-prior;/插入 p-prior-next=s;next=p;prior=s; return 1; 此函数是

13、已知一双向链表实现在第i个位置插入data为x的节点。函数需要注意的是在什么位置插入才是合法的,在就是在该节点指针时的顺序不要搞错。3.5绝对值函数:int abs(int x) if(x0) return -x; else return x; 此函数是实现求一个整数的绝对值。设计这么一个函数主要是考虑到在存储负数的时候头结点应该变为正整数,然后通过其他手段变相实现那种运算。3.6读入数据并插入对应的链表函数:int InputNumber(DLNode *head) /读入输入的数据 int input,i=0;/第i个节点 char c; scanf(%d%c,&input,&c); wh

14、ile(1) if(inputdata=0;/将长整数的符号保存在头结点中 /input=abs(input);/取输入数字的绝对值 ListInsert(head,i,input);/插入数据 else if(input=0&i=0)/输入数为正且是第一个节点data=1; else if(head-next-data=0) ListInsert(head,i,input);/非第一个节点 else /input=-1*input; i+; if(c=;) break;/遇到数据输入完成标志,跳出循环 scanf( 此函数实现的是从键盘上得到数据根据三种情况进行不同的处理,判断是否是头结点,

15、判断是否是整数,判断输入的字符是否是“;”分号。并且如果是正整数它的头结点data等于1否则为0。3.7输出函数void OutputNumber(DLNode *head,int sign) /从表尾输出数据元素 DLNode *r=head- while(r-data=0&r!=head-prior) r=r- if(sign=1)结果是: else -%d,r-data); while(r! if(r-data100) ,001000),0 ,%d r=r-n 此函数实现的是将最后的结果输出到显示屏上,经过判断数据的正负和数据的范围来进行不同的处理,以保证在显示屏上显示的是正确的格式。3

16、.8加法函数(正数加上正数)void add(DLNode *head1,DLNode *head2,DLNode *head3) int z=0; int e; DLNode *p1,*p2; p1=head1- p2=head2- while(p1!=head1&p2!=head2) e=p1-data+p2-data+z; if(e=10000) z=1; e=e%10000; else z=0; ListInsert(head3,0,e); p1=p1-p2=p2- if(p1=head1&=head2) while(p2! e=p2- p2=p2- if(z=1) ListInser

17、t(head3,0,z); else if(p1!p2=head2)=head1) if(e z=1; e=e%10000; else z=0; ListInsert(head3,0,e); p1=p1- else 此函数实现的是两个正数之间的相加运算,主要的算法和我们手算加法是一样的,首先设置一个进位计数的变量,根据存储的特点从低位开始相加带上进位即可得出相应的位和,最后更新进位变量。处理边界状况:如果两个链表一样长同时他们最高位在计算完成时仍然会有进位,那么应该考虑到在数据的更高位插入一个1表示最后的计算结果,这样才可以保证数据的完整性。3.9判断俩正数大小函数:int change(DL

18、Node *head1,DLNode *head2) int length1,length2,r=2; length1=ListLength(head1); length2=ListLength(head2); if(length1length2) r=0; return r; else if(length1 r=1; int i=0; for(i=0;ip2-data) r=0; return r; break; else if(p2-p1- r=1; p1=p1- p2=p2- r=2; return r; 此函数实现的是判断俩个正数的大小。考虑俩正数的在链表中所占存储单元的多少,多的一定

19、大,当他们一样长时,一位一位的比较直到找到一个节点中的data比另一个链表的对应节点的data大为止。如果最后仍是一样大那么这两个数就是一样大的。返回值为自己约定的参数r等于2表示俩数一样大,等于1表示第二个数大,等于 0表示第一个数大。3.10 减法函数:void minus(DLNode *head1,DLNode *head2,DLNode *head3) int z=0,x=-1; x=change(head1,head2); if(x=0) while(p1! p1-data=p1-=p2- e=p1-data-p2-data; ListInsert(head3,0,e); z=0; e=10000+p1- z=-1; p1- else if(x=1) p2=head1- p1=head2-=head2&=head1) p1-

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

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