资源预览内容
第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
第9页 / 共45页
第10页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
word数据结构课程设计题目名称:长的整数加法 计算机科学与技术学院一、 需求分析1.问题描述:设计一个程序实现两个任意长的整数的求和运算。2.根本要求:利用双向循环链表,设计一个实现任意长的整数进展加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。3.任务陈述:(a)输入的形式和输入值的X围:本实验中演示中,长整数的每位上的数字必须为数字09之间,长整数的位数要求无限长。测试的时候输入数据,当输入回车键的时候完毕输入,如果输入的字符不符合题目要求,如此程序能过滤这些不符合要求的字符。(b) 输出的形式:整数的X围无限制,可为正数,可为负数。按照中国对于长整数的表示习惯,每四位是一组,组间用逗号隔开。(c) 程序所能达到的功能:演示程序以用户和计算机的对话方式执行,即在计算机显示“提示信息后之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据和运算结果显示在其后,并对错误。d测试数据:为正确输入数据,为错误输入数据(超出4位),为错误输入数据(不足4位)。两长整数a=b=0请按照如下形式输入第一个长整数,每四位一组: -1234,1234,1234-按该模式输入0 -输入长整数a 您的输入结果为:0 -显示a(防止错误输入)请按照如下形式输入第一个长整数,每四位一组: -1234,1234,1234 -输入长整数b您的输入结果为:0您的运算结果为:0 -输出ba0请按照如下形式输入第一个长整数,每四位一组: -1234,1234,12341,1111,1111,1111 您的输入结果为:1,1111,1111,1111请按照如下形式输入第二个长整数,每四位一组: -1234,1234,12349,9999,9999,9999您的输入结果为:9,9999,9999,9999您的运算结果为:11,1111,1111,1110ab0请按照如下形式输入第一个长整数,每四位一组: -1234,1234,12349999,9999,9999您的输入结果为:9999,9999,9999请按照如下形式输入第二个长整数,每四位一组: -1234,1234,12342您的输入结果为:2您的运算结果为:1,0000,0000,0001ba0请按照如下形式输入第一个长整数,每四位一组: -1234,1234,1234 -2345,6789 您的输入结果为:-2345,6789请按照如下形式输入第二个长整数,每四位一组: -1234,1234,1234-7654,3211您的输入结果为:-7654,3211您的运算结果为:1,0000,0000a0,|a|b| 请按照如下形式输入第一个长整数,每四位一组: -1234,1234,1234-1,0000,00001您的输入结果为:-1,0000,0001请按照如下形式输入第二个长整数,每四位一组: -1234,1234,12342您的输入结果为:2您的运算结果为:-9999,9999a0,|a|0,b|b| 请按照如下形式输入第二个长整数,每四位一组: -1234,1234,1234 1,0000,0000您的输入结果为:1,0000,0000请按照如下形式输入第二个长整数,每四位一组: -1234,1234,1234-9999您的输入结果为:-9999您的运算结果为:9999,0001a0,b0,|a|b|请按照如下形式输入第一个长整数,每四位一组: -1234,1234,12341 您的输入结果为:1请按照如下形式输入第二个长整数,每四位一组: -1234,1234,1234-1,0000,0000您的输入结果为:-1,0000,0000您的运算结果为:-9999,9999错误输入例:输入超过四位,如此自动取其前四位进展运算请按照如下形式输入第一个长整数,每四位一组: -1234,1234,12341,00000您的输入结果为:1,0000请按照如下形式输入第二个长整数,每四位一组: -1234,1234,1234-99998,01234您的输入结果为:-9999,1234您的运算结果为:-9998,1234错误输入例:非第一次输入少于四位,如此在输入前加0补足四位进展运算请按照如下形式输入第一个长整数,每四位一组: -1234,1234,1234 1,000 您的输入结果为:1,0000请按照如下形式输入第二个长整数,每四位一组: -1234,1234,1234-1,11您的输入结果为:-1,0011您的运算结果为:-11二、概要设计通过尾插输入长整数,为实现顺序存入,并用头插存储的运算后的长整数,因为运算必定从后向前计算,同样为了实现顺序存入。因为任意的长整数可能为负数,如此第一步需判断其符号。先判断长整数a,b的符号的异同,一样,如此将a的符号存入新的双向链表c的符号位;相异,如此将b的符号存入c,之后再处理。根据c的符号位,使用加法或减法的函数,需要考虑进位借位,从后开始进展运算。通过删除函数,删除因借位而出现的多余的0。最后打印运算后的c。2数据结构此实验采用的数据结构是双向循环链表。这样可以很容易的找到他的前驱以与它的后继,并使用它们存储。这是其结构体声明:typedef struct DualNode int data; struct DualNode *prior, *next;DualNode, *DualList;1DualList InputData()操作结果:初始化一双向循环链表,完成输入操作,并将该链表返回。2DualList AddList(DualList a, DualList b)操作结果:判断其符号3DualList InitList(int sign)操作结果:初始化一双向循环链表,存储符号位,并将该链表返回。4void InsertNodeAtTail(DualList L, int data)操作结果:尾插,用于存储数据的存入。5void InsertNodeAtHead(DualList L, int data)操作结果:插在头结点之后,用于计算结果的存储。6void Add(DualList a, DualList b, DualList c)操作结果:加运算7void Sub(DualList a, DualList b, DualList c)操作结果:减运算8void DelNode(DualList L, DualNode *p)操作结果:删除因借位产生的多余的0。9void PrintList(DualList L)操作结果:打印链表主程序模块输入aPrintList()InputData()调用输入bPrintList()InputData()调用InitList()AddList()调用Sub()InsertNodeAtHead()Add()调用调用调用DelNode()PrintList()完毕三、详细设计#include #include #include typedef struct DualNode int data; struct DualNode *prior, *next;DualNode, *DualList;双向循环链表的节点由三个局部组成,第一是数据局部data存储此节点的数据,第二是此节点的前驱指针局部*prior指向此节点的前驱,第三是此节点的后继指针局部*next指向此节点的后继。数据局部我们约定它为整形变量,前驱后继指针均为结构体DualNode类型。DualList InputData() int FirstNum = 1, data; char c; DualList L; L = (DualList)malloc(sizeof(DualNode); L-next = L-prior = L; printf(Please Input as Format: -1234,1234,1234n); if (c = getchar() = -) L = InitList(-1); else L = InitList(1); if (isdigit(c) /判断是否为10进制数 / 退格处理 ungetc(c, stdin); do scanf(%d, &data); while(data9999) data=data/10; InsertNodeAtTail(L, data); while(c = getchar() != n); printf(Your Input is:n); PrintList(L); return L; 该函数在其内创建了一个双向函数链表,通过返回该链表完成初始化,减少函数个数,降低复杂度。L = (DualList)malloc(sizeof(DualNode)为开辟存储空间,L-next = L-prior = L将其前驱、后继都指向L,构成循环。调用的函数InitList()是为了在头结点存放符号。ungetc()的使用,是因为将本该输入却被取出的数返回到输入流中去,以便正常输入。do-while语句是为了当输入回车时,能够停止。while(data9999) data=data/10该句是为了当输入错误,超过4位时,取前四位当做正常输入存储。PrintList(L)打印存储的
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号