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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构程序设计 任意长的整数进行加法Word格式文档下载.docx

1、(4)1,0001,0001;-1,0001,0001;应输出“0”。(5)1,0001,0001;-1,0001,0000;应输出“1”。(6)-9999,9999,9999;-9999,9999,9999;应输出“-1,9999,9999,9998”。(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。3 概要设计 本程序使用C语言编写,编辑器为C-FREE 4.1 编译器为MinGW3.4.5 ,输入输出界面为windows对话框。本程序所用到的数据类型有自定义 Lnode 型 为节点类型,Lnode型变量包涵两个变量,一个为整型的 int data变

2、量,另一个为Lnode 型的指针。自定义Linklist 型 变量包涵两个变量,一个为Lnode型 的指针 head,一个是整型变量int length。Linklist型变量为链表类型,head为链表的头指针,整型length为链表的长度(链表长度不包括头节点)。本程序组成: 函数 int *Iput(char *ch) 功能:将输入的标准字符串,转换为所需要的数字储存在int 型 数组中并返回数组指针。 函数 Linklist *CreateList(Linklist *l) 功能: 创建一个空的单链表,并返回该链表的指针。函数Linklist *InList(Linklist *l,in

3、t data) 功能:在链表的头结点后插入一个节点,所需参数为所要插入的链表的指针,所插入节点的数据值。返回值为插入完成后的链表指针。函数Linklist *Inlistfail(Linklist *list,int data) 功能:当结果需要进位时,对结果进行进位,参数为储存结果的链表,所插入节点的数据值。返回值为插入完成后结果链表的指针。函数Linklist *OutList(Linklist *list) 功能:对输入的负数进行处理,使其变成标准加数或被加数。参数为储存输入数的链表指针。返回值为处理完成后的链表的指针。函数Linklist *AddList(Linklist *one,

4、Linklist *two) 功能:两个标准加数和被加数,进行加数。参数为储存加数和被加数的链表指针。返回值为储存结果的链表。函数Linklist *SubList(Linklist *listone,Linklist *listtwo) 功能:两个标准减数和被减数进行相减。参数为储存标准减数和被减数链表指针。返回值为存储结果的链表。 函数Linklist *Linklistpush(int *number,Linklist *list) 功能:将输入的存储在数组中的数值依次插入到创建好的链表中,每个链表节点储存一位输入的数值。参数为储存数值的数组指针和创建好的链表的指针。返回值为存储输入数值

5、的链表的指针。函数char *test_takeprint(Linklist *list,int j) 功能:将储存结果的链表里的值变为字符串形式便于对话框输出。参数为存储结果的链表的指针,和整型输出控制变量。函数int Judgmentsize(int *numone,int *numtwo,int numberone,int numbertwo,int v) 功能:对两个位数相同但符号不同的两个数进行大小比较。参数为两个储存值的数值的指针,和两连表的长度,和控制变量。返回值为判断后得出的标识值。函数int Judgment(int *numone,int *numtwo,int numbe

6、rone,int numbertwo) 功能:对输入的两个数值进行判断,是进行加法或是进行减法。参数为储存两个数的数组指针和两个数的位数。返回值为判断后的标志整型值。函数int Judgementprint(Linklist *listone,Linklist *listtwo,int i) 功能:对输出的值的正负进行判断。参数为储存两个值的链表的指针,和标识整型数。返回值为标识整型数。函数Linklist *Caseone(Linklist *listone,Linklist *listtwo) 功能:判断后的第一种情况对两数的处理。参数为储存两数的链表打的指针。返回值为处理后的储存结果的链

7、表的指针。函数Linklist *Casetwo(Linklist *listone,Linklist *listtwo) 功能:判断后的第二种情况对两数的处理。函数Linklist *Casethree(Linklist *listone,Linklist *listtwo,int i) 功能:判断后的第三种情况的对两数的处理。参数为储存两数的链表的指针,和整型标识位。函数char *mainlist(char *numberone,char *numbertwo) 功能:整个程序的流程。参数为输入得到的两字符串的指针。返回值为最终要求输出的字符串的指针。 模块BOOL WINAPI Mai

8、n_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 对话框的定义。 模块BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)对话框的定义。 函数 void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)功能:当消息响应时操作系统所调用的函数。主程序流程图: 函数之间的调用关系为:char *mainlist(char *numberone,char *numbertwo)调

9、用Linklist *CreateList(Linklist *l) int *Input(char *ch) Linklist *Linklistpush(int *number,Linklist *list) int Judgment(int *numone,int *numtwo,int numberone,int numbertwo) int Judgementprint(Linklist *listone,Linklist *listtwo,int i) char *test_takeprint(Linklist *list,int j) Linklist *Caseone(Link

10、list *listone,Linklist *listtwo) Linklist *Casetwo(Linklist *listone,Linklist *listtwo) Linklist *Casethree(Linklist *listone,Linklist *listtwo,int i)以上为平行关系Linklist *AddList(Linklist *one,Linklist *two)函数调用Linklist *Inlistfail(Linklist *list,int data)函数int Judgment(int *numone,int *numtwo,int numbe

11、rone,int numbertwo)调用int Judgmentsize(int *numone,int *numtwo,int numberone,int numbertwo,int v)函数Linklist *Caseone(Linklist *listone,Linklist *listtwo) 调用Linklist *AddList(Linklist *one,Linklist *two)函数Linklist *Casetwo(Linklist *listone,Linklist *listtwo)调用Linklist *OutList(Linklist *list)和Linklis

12、t *AddList(Linklist *one,Linklist *two)函数Linklist *Casethree(Linklist *listone,Linklist *listtwo,int i)调用Linklist *SubList(Linklist *listone,Linklist *listtwo)函数4详细设计1:数据类型设计typedef struct Lnode /节点类型 int data; struct Lnode *next;Lnode;typedef struct Linklist /链表类型 Lnode *head; int length;Linklist;输

13、入输出函数设计 字符串转换函数 int *Input(char *ch) int *number; int i=2,j=0,k=0; number=(int*)malloc(sizeof(int)*100); /为数组分配空间 while(i!=0) /循环到字符串结束 if(chj=44) /如果取到的字符为,跳过该字符继 /转换 k-; else numberk=chj-48; /根据ASCL码数值等于该字符的值减去48 j+; k+; if(chj=0) /转换结束,数组的最后一位赋值为888,做 /为标示位 numberk=888; break; return number; 输出格式

14、转换函数 char *test_takeprint(Linklist *list,int j) int length,i,remainder,shang,position=0,positionnum=0,k; char *chfinal; int num100; Lnode *now; now=list-head-next; chfinal=(char*)malloc(sizeof(char)*100); /为将要输出的字符穿申请内存空间 length=list-length; shang=length/4; /求链表长度对4 的商 remainder=length%4; /求链表长度除于4的

15、余数 if(shang=0) remainder=0; /如果商等于0时,将余数设为0 for(i=length-1;i=0;i-) /将保存在链表中的数值反向复制到数组中 numi=now-data; now=now- if(j=888) / j为结果符号标识变量,j=888时结果为负数 chfinalposition=45; /在字符串第一位加上-号 position+; if(length=4) /结果少与4位时不需要,添加,号 直接添加到字符串中 for(i=0;ii+) chfinalposition=numi+48; /ASC码字符与数值相差48 Else /结果大于4位是的情况r

16、emainder;i+) /先将余数位的数值添加到字符串中 chfinalposition=numpositionnum+48; positionnum+; /此变量为整型变量数组的取值位 /字符串数组与整型数组的同一个数不在同 if(remainder!=0) /一位置,故要用不同的取值位 chfinalposition=44;shang;i+) /进行商次数的循环来添加,号 for(k=0;k4;k+) /每4位添加一个 if(ihead=(Lnode*)malloc(sizeof(Lnode); /头结点分配空间next=NULL;length=0; /链表长度为零 return l;L

17、inklist *InList(Linklist *l,int data) /链表插入函数 Lnode *n; n=(Lnode*)malloc(sizeof(Lnode); /为插入的节点分配空间 n-data=data; /节点数据位赋值为要插入的值next=l- /修改节点和头结点的指针next=n;length+; /链表长度加一Linklist *Inlistfail(Linklist *list,int data) /结果进位时链表插入函数 Lnode *fail,*n; int i; fail=list-head;list-i+) /寻找到链表的最尾部的节点 fail=fail-

18、 /分配一个新的节点的空间next=fail- /将该节点插入到链表的最尾端 fail- list- return list;Linklist *OutList(Linklist *list) /链表去负号函数 Lnode *temporary,*temporary2; int i=0; temporary=list-(list-length-1);i+) /寻找到链表中保存负号的节点 temporary=temporary- temporary2=temporary- /修改该节点附近指针使其在链表/ temporary- /中删除 free(temporary2); /释放该节点内存空间l

19、ength-;主要加减函数Linklist *AddList(Linklist *one,Linklist *two) /链表数值相加函数 int i=0,j=3,p=0; Lnode *nowone,*nowtwo; nowone=one- /节点指针分别指向链表的头结点 nowtwo=two- if(one-length=two-length) /判断两链表的长度,以便过后判断是否末位进位 p=1;two-i+) / 循环加数的位数次,来分别对个个位进行相加 if(j=1) /j=1时表示该位有来至低位的进位 nowone-data=nowone-data+nowtwo-data+1; /

20、该位有进位时的结果 j=0; else /该位没有进位的结果 if(nowone-data = 10) /判断该位是否需要向高位进位data-10; /进位后该位的值 j=1; nowone=nowone- nowtwo=nowtwo- if(j=1&p!=1) /两数位数不同,但最高位需进位时的情况one-length - two-i+) /定位到加数的最高位data+; /最高位向上进位一data=10) /如果该位加上来自低位的进位大于10时继 /续向高位进位直至无需在进 if(j=1) /如果结果的最高位也有进位 one=Inlistfail(one,1); /为储存结果的链表添加一个

21、节点来保存进位p=1) return one;Linklist *SubList(Linklist *listone,Linklist *listtwo) /减法函数 int i=0,j=0; nowone=listone- /定位到最低位的数值 nowtwo=listtwo-listtwo-i+) /做减数的位数次循环 if(j=1) /如果该位需向高位借位j=1data - 1 - nowtwo- /该位借位后进行减法的结果 j=0;data - nowtwo- /无需借位情况datalength=listtwo-length) /判断两数的位长,位数长的做为加数 final=AddList(listone,listtwo); /两数加法 final=AddList(listtwo,listone); return final; /第二种情况 listone=OutList(listone); /两数值去负号,进行标准加法 listtwo=OutList(listtwo);length) /加数与被加数相加Linklist *Casethree(Linklist *listone,Linklist *listtwo,int i) /第三种需要进行减法的情况10)

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

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