1、 数据结构课程设计 题目名称:题目名称: 长的整数加法长的整数加法 一、一、 需求分析需求分析 1.问题描述: 设计一个程序实现两个任意长的整数的求和运算。 2.基本要求: 利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。 要求输入和输出每四位一组, 组间用逗号隔开。 如: 1, 0000, 0000, 0000, 0000。 3.任务陈述: (a) 输入的形式和输入值的范围:本实验中演示中,长整数的每位上的数字 必须为数字09之间,长整数的位数要求无限长。测试的时候输入数据,当 输入回车键的时候结束输入,如果输入的字符不符合题目要求,则程序能过滤这 些不符合要求的字符。 (
2、b) 输出的形式: 整数的范围无限制,可为正数,可为负数。按照中国对于 长整数的表示习惯,每四位是一组,组间用逗号隔开。 (c) 程序所能达到的功能: 演示程序以用户和计算机的对话方式执行,即在 计算机显示“提示信息”后之后,由用户在键盘上输入演示程序中规定的运算命 令;相应的输入数据和运算结果显示在其后,并对错误。 (d)测试数据:为正确输入数据,为错误输入数据(超出 4 位),为 错误输入数据(不足 4 位)。 两长整数 a=b=0 请按照如下形式输入第一个长整数,每四位一组: -1234,1234,1234 -按该模式输入 0 -输入长整数 a 您的输入结果为: 0 -显示 a(防止错误
3、输入) 请按照如下形式输入第一个长整数,每四位一组: -1234,1234,1234 -输入长整数 b 您的输入结果为: 0 您的运算结果为: 0 -输出 ba0 请按照如下形式输入第一个长整数,每四位一组: -1234,1234,1234 1,1111,1111,1111 您的输入结果为: 1,1111,1111,1111 请按照如下形式输入第二个长整数,每四位一组: -1234,1234,1234 9,9999,9999,9999 您的输入结果为: 9,9999,9999,9999 您的运算结果为: 11,1111,1111,1110 ab0 请按照如下形式输入第一个长整数,每四位一组:
4、-1234,1234,1234 9999,9999,9999 您的输入结果为: 9999,9999,9999 请按照如下形式输入第二个长整数,每四位一组: -1234,1234,1234 2 您的输入结果为: 2 您的运算结果为: 1,0000,0000,0001 b|b| 请按照如下形式输入第一个长整数,每四位一组: -1234,1234,1234 -1,0000,00001 您的输入结果为: -1,0000,0001 请按照如下形式输入第二个长整数,每四位一组: -1234,1234,1234 2 您的输入结果为: 2 您的运算结果为: -9999,9999 a0,|a|0,b|b| 请按
5、照如下形式输入第二个长整数,每四位一组: -1234,1234,1234 1,0000,0000 您的输入结果为: 1,0000,0000 请按照如下形式输入第二个长整数,每四位一组: -1234,1234,1234 -9999 您的输入结果为: -9999 您的运算结果为: 9999,0001 a0,bnext = L-prior = L; printf(“Please Input as Format: -1234,1234,1234n“); if (c = getchar() = -) L = InitList(-1); else L = InitList(1); if (isdigit(
6、c) /判断是否为 10 进制数 / 退格处理 ungetc(c, stdin); do scanf(“%d“, 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()的使用