2长整数四则运算+数据结构课程设计

上传人:鲁** 文档编号:491684863 上传时间:2023-09-12 格式:DOCX 页数:8 大小:44.45KB
返回 下载 相关 举报
2长整数四则运算+数据结构课程设计_第1页
第1页 / 共8页
2长整数四则运算+数据结构课程设计_第2页
第2页 / 共8页
2长整数四则运算+数据结构课程设计_第3页
第3页 / 共8页
2长整数四则运算+数据结构课程设计_第4页
第4页 / 共8页
2长整数四则运算+数据结构课程设计_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《2长整数四则运算+数据结构课程设计》由会员分享,可在线阅读,更多相关《2长整数四则运算+数据结构课程设计(8页珍藏版)》请在金锄头文库上搜索。

1、实验名称长整数四则运算需求分析设计一个实现任意长的整数进行减法运算的演示程序,要求完成长整数的加减运算,乘除运算可选做。在这里长整数没有范围限制,可任意长。运算后的进位、借位等都要进行正确处理,可实现动态的输入,实时的输出。测试数据:0、0;输出“0”2345,6789、-7654,3211;输出“1,0000,0000”1,0000,0000,0000、9999,9999;输出“9999,0000,0001”1,0001,0001、;1,0001,0001;输出“0”自选数据:1,2345,6789;9,8765,4321;输出“11,1111,1110”概要设计数据结构利用双向循环链表来实

2、现对长整数的存储。每个节点只存储四位十进制数字,即不超过9999的非负整数。双向链表有头指针,它的data值存储长整数的符号,1为正,-1为负,0代表长整数为0;它的over值存储除头节点外节点的个数。其他节点的data值存储四位整数,over存储该四位整数溢出09999范围的情况,一般over0表示四位数超出9999,over0表示四位数小于0。选择该数据结构来完成长整数的加减运算是因为要对长整数进行运算,需要对长整数进行存储,所以选择用链表对长整数存储,又由于存储的顺序是从左到右,而运算的顺序则是从右到左,这样位了操作方便选择循环链表,在运算过程中有进位和借位的操作,所以最终选择双向循环链

3、表的数据结构。详细设计typedefstructDoubleNode/定义链表元素voidInitNode(DLNode*head)/初始化链表intInsertNode(DLNode*head,intn,DataTypex)/向链表第N个位置插入元素Xintdigit(intn)/判断整数N有几位voidPrintNode(DLNode*head)/打印链表voidDestroyNode(DLNode*head)/销毁链表voidadd(DLNode*h1,DLNode*h2)/两数相加voidjian(DLNode*h1,DLNode*h2)/两数相减intmain()/入口函数调试分析调

4、试过程中的困难:在数据的运算中,应为是根据数的大小来选择运算的,所以过程相对比较繁琐。而且对于双向链表的两个指针的定位以及链表的插入和删除等操作花费的较多的时间。在这查阅参照了大量的网络资料。测试结果1) 输入0和0做加法运算,输出“0”,结果如下图:2) 输入2345,6789和-7654,3211做减法运算,输出“1,0000,0000”,结果如下图:舸人報菇:2345,6789;k?654,3211;陆择血减法:1加法,2-减S2匿行结果为:1,0000,00003) 输入1,0000,0000,0000和9999,9999做减法运算,输出“9999,0000,0001”,结果如下图:4

5、) 输入1,0001,0001和1,0001,0001做减法运算,输出“0”,结果如下图:1,0001,0001;1,0001,0001;注择加诚法:1加法,2-减法隹行结果为上国5)输入1,2345,6789和9,8765,4321做减法运算,结果如下图:側人数据:1,2345,6789;Oonce4T91-陰择加誠法:1一加法,2-诚袪1_是行结果为:心得体会关于实验本身的收获是掌握了双向链表。而实验外的就是更好的利用了网路资源,通过网络的搜索引擎等。加深了自己在这方面知识的补充。并且在于同学交流中分析了彼此算法的优劣程度。我觉得这是本次实验最大的收获。源代码#includestdafx.

6、h#include#include#include#include#defineN100typedefintDataType;typedefstructDoubleNode/定义链表元素DataTypedata;structDoubleNode*prior;structDoubleNode*next;DLNode;voidInitNode(DLNode*head)/初始化链表if(*head=(DLNode*)malloc(sizeof(DLNode)=NULL)exit(1);(*head)-prior=*head;(*head)-next=*head;intInsertNode(DLNod

7、e*head,intn,DataTypex)/向链表第N个位置插入元素XDLNode*p,*nt;inti=0;p=head-next;while(p!=head&inext;i+;if(i!=n)printf(插入位置错误n);return0;if(nt=(DLNode*)malloc(sizeof(DLNode)=NULL)exit(1);nt-data=x;nt-prior=p-prior;nt-prior-next=nt;nt-next=p;p-prior=nt;return1;intdigit(intn)/判断整数N有几位inti;for(i=1;n/=10,i+)if(n/10=0

8、)returni;voidPrintNode(DLNode*head)/打印链表DLNode*p=head-next;inti;while(p-data=0)/去掉前面的一串0p=p-next;if(p=head)printf(0n);return;printf(%d,p-data);/最前面的一个数进行特殊处理,不用补零p=p-next;while(p!=head)/打印后面的数字printf(,);if(p-data=0)printf(0000);p=p-next;continue;for(i=0;idata);i+)/补零printf(0);printf(%d,p-data);p=p-n

9、ext;printf(n);voidDestroyNode(DLNode*head)DLNode*p,*p1;p=(*head)-next;while(p!=*head)p1=p;p=p-next;free(p1);free(p);head=NULL;voidadd(DLNode*h1,DLNode*h2)/两数相加DLNode*p1=h1-prior,*p2=h2-prior;while(p1!=h1&p2!=h2)/每个链表元素相加p1-data+=p2-data;p1=p1-prior;p2=p2-prior;p1=h1-prior;while(p1!=h1-next)/处理链表元素if

10、(p1-data=10000)p1-prior-data+=p1-data/10000;p1-data%=10000;if(p1-datanext!=0)p1-prior-data-=1;p1-data+=10000;p1=p1-prior;if(h1-next-data=10000)/处理最前面的数InsertNode(h1,0,h1-next-data/10000);h1-next-next-data%=10000;if(h1-datanext-data/10000);h1-next-next-data%=-10000;PrintNode(h1);voidjian(DLNode*h1,DL

11、Node*h2)/两数相减DLNode*p1=h1-prior,*p2=h2-prior;while(p1!=h1&p2!=h2)/每个链表元素相减p1-data-=p2-data;p1=p1-prior;p2=p2-prior;p1=h1-prior;while(p1!=h1-next)/处理链表元素if(p1-data=10000)p1-prior-data+=p1-data/10000;p1-data%=10000;if(p1-datanext!=0)p1-prior-data-=1;p1-data+=10000;p1=p1-prior;if(h1-next-data=10000)/处理

12、最前面的数InsertNode(h1,0,h1-next-data/10000);h1-next-next-data%=10000;if(h1-datanext-data/-10000);h1-next-next-data%=-10000;PrintNode(h1);intmain()/入口函数DLNode*head1,*head2;InitNode(&head1);InitNode(&head2);chardata1N,data2N;chard110,d210;inti,j,k;intxun;while(1)printf(输入数据:n);scanf(%s%s,data1,data2);Ini

13、tNode(&head1);InitNode(&head2);i=0;k=0;while(data1i!=;)/将数1用链表储存for(j=0;j10;j+)d1j=0;j=0;while(data1i!=;&data1i!=,)d1j+=data1i+;if(data1i=,)i+;if(data10=-)/处理正负数j=-(int)fabs(atoi(d1);elsej=atoi(d1);InsertNode(head1,k+,j);i=0;k=0;while(data2i!=;)/将数2用链表储存for(j=0;j10;j+)d2j=0;j=0;while(data2i!=;&data2i!=,)d2j+=data2i+;if(data2i=,)i+;if(data20=-)/处理正负数j=-(int)fabs(atoi(d2);elsej=atoi(d2);InsertNode(head2,k+,j);printf(选择加减法:1一加法,2-减法n);scanf(%d,&xun);switch(xun)case

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号