任意长整数加法运算
- 格式:docx
- 大小:151.24 KB
- 文档页数:19
“数据结构”课程设计报告长整数四则运算学生姓名:吴成杰徐文良指导教师:陈少军所在系:电子信息系所学专业:计算机科学与技术年级:2010计算机(1)班目录第1章需求分析 (1)1.1选题要求 (1)1.2选题背景和意义 (1)1.3选题目标 (2)1.4组员分配任务 (2)第2章概要分析 (2)2.1系统数据流图 (2)2.2原始数据 (3)2.3输出数据 (3)2.4对数据的处理 (3)2.5数据结构(存储方式) (4)2.6模块分析 (4)第3章详细设计 (4)第4章系统说明书 (11)第5章系统测试 (12)项目总结 (16)参考文献 (17)第1章需求分析1.1选题要求1、实现一个任意长度的整数进行四则运算的演示程序(1) 运算过程分步骤显示(2) 完成含有加法和减法的四则运算(3) 完成含有乘法和除法的四则运算(4) 包含括号的四则运算2、2个人对应完成2个人各自的任务1.2选题背景和意义(1)选题背景操作系统老师曾经布置我们做一道斐波拉契数列和求30的阶乘,但是计算的结果很大,还不知道该做样的存储,老师告诉我们需要用高精度数的知识能将计算的结果存储起来,数据结构老师也曾经布置过一个实验题,是计算长整数的加法的,但是长整数的位数是固定的。
于是我们试想计算任意长度的整数是不是能把所有的四则运算问题解决。
(2)选题意义我们选的这个课题能计算任意的四则运算,比如:1234567+7654321=8888888987654321-123456789=86419754123*456=5608884/42=2586-25*15+8*(9*2-144/12)=586-375+8*(18-12)=586-375+8*6=586-355+48=211+48=2591.3选题目标实现一个任意长度的整数进行四则运算的演示程序(1) 运算过程分步骤显示(2) 完成含有加法和减法的四则运算(3) 完成含有乘法和除法的四则运算(4) 包含括号的四则运算1.4组员分配任务我们组有两个成员,分别为吴成杰和徐文良,一个负责写主函数、函数整体的框架和写转换函数函数和对输入的字符进行处理,一个负责写出栈函数和写处理函数和拼接,程序出现错误,两个人一起在一起互相商量,修改。
整数与整数运算整数是数学中常见的一类数,它包括正整数、负整数和零。
整数的运算是数学中的基本操作之一,它包括加法、减法、乘法和除法。
本文将从整数的定义、整数运算的基本性质以及几种常见的整数运算方法这三个方面来介绍整数与整数运算。
1. 整数的定义整数是数学中表示没有小数部分的数。
它可以是正数、负数或零。
整数的集合用Z表示,即Z={...,-3,-2,-1,0,1,2,3,...}。
整数可以在数轴上表示,向右表示正数,向左表示负数,零位于原点。
整数具有相对大小,即负整数的绝对值越大,它的值越小,正整数的绝对值越大,它的值越大。
2. 整数的基本运算性质(1)加法性质:对于任意的整数a、b和c,有(a+b)+c=a+(b+c)。
即整数的加法满足结合律。
(2)加法交换律:对于任意的整数a和b,有a+b=b+a。
即整数的加法满足交换律。
(3)加法单位元:对于任意的整数a,有a+0=a。
即0是整数加法的单位元。
(4)相反数:对于任意的整数a,存在一个整数-b,使得a+(-b)=0。
即整数的相反数是其加法逆元。
(5)减法性质:对于任意的整数a、b和c,有(a-b)+c=a-(b-c)。
(6)乘法性质:对于任意的整数a、b和c,有(a*b)*c=a*(b*c)。
即整数的乘法满足结合律。
(7)乘法交换律:对于任意的整数a和b,有a*b=b*a。
即整数的乘法满足交换律。
(8)乘法单位元:对于任意的整数a,有a*1=a。
即1是整数乘法的单位元。
(9)分配律:对于任意的整数a、b和c,有a*(b+c)=a*b+a*c。
3. 整数的运算方法(1)整数的加法运算:对于整数a和b,将它们的绝对值相加,然后根据a和b的符号确定结果的符号。
例如,-3+5=2,8+(-6)=2。
(2)整数的减法运算:整数的减法可以转化为加法运算,即a-b=a+(-b)。
例如,7-4=7+(-4)=3。
(3)整数的乘法运算:对于整数a和b,将它们的绝对值相乘,然后根据a和b的符号确定结果的符号。
小学数学:整数四则运算法则
1、整数加法:
把两个数合并成一个数的运算叫做加法。
在加法里,相加的数叫做加数,加得的数叫做和。
加数是部分数,和是总数。
加数+加数=和一个加数=和-另一个加数
2、整数减法:
已知两个加数的和与其中的一个加数,求另一个加数的运算叫做减法。
在减法里,已知的和叫做被减数,已知的加数叫做减数,未知的加数叫做差。
被减数是总数,减数和差分别是部分数。
加法和减法互为逆运算。
3、整数乘法:
求几个相同加数的和的简便运算叫做乘法。
在乘法里,相同的加数和相同加数的个数都叫做因数。
相同加数的和叫做积。
在乘法里,0和任何数相乘都得0. 1和任何数相乘都的任何数。
一个因数×一个因数 =积一个因数=积÷另一个因数
4、整数除法:
已知两个因数的积与其中一个因数,求另一个因数的运算叫做除法。
在除法里,已知的积叫做被除数,已知的一个因数叫做除数,所求的因数叫做商。
乘法和除法互为逆运算。
在除法里,0不能做除数。
因为0和任何数相乘都得0,所以任何一个数除以0,均得不到一个确定的商。
被除数÷除数=商除数=被除数÷商被除数=商×除数
5、乘方:
求几个相同因数的积的运算叫做乘方。
小学数学第 1 页共1 页。
整数加减法运算法则1.整数加法的性质和规则:加法是数学中最基本的运算之一、整数加法满足以下性质和规则:(1)整数加法的交换律:对于任意的整数a和b,a+b=b+a。
这意味着整数加法可以改变操作数的位置而不改变结果。
例如,1+2=2+1=3(2)整数加法的结合律:对于任意的整数a、b和c,(a+b)+c=a+(b+c)。
这意味着整数加法可以改变加法的顺序而不改变结果。
例如,(1+2)+3=1+(2+3)=6(3)整数加法的零元素:对于任意的整数a,a+0=0+a=a。
这意味着任何整数加上0的结果都是它本身。
例如,1+0=0+1=1(4)整数加法的逆元素:对于任意的整数a,存在一个整数-b,使得a+(-b)=(-b)+a=0。
这意味着任何整数加上它的逆元素的结果都是0。
例如,1+(-1)=(-1)+1=0。
2.整数减法的性质和规则:减法是整数运算中一个与加法相对应的运算。
整数减法满足以下性质和规则:(1)减法的定义:对于任意的整数a和b,a-b=a+(-b)。
这意味着减法可以转化为加法运算。
(2)减法的逆元素:对于任意的整数a,存在一个整数-b,使得a-b=a+(-b)=0。
这意味着任何整数减去它的逆元素的结果都是0。
例如,1-1=1+(-1)=0。
(3)减法的归纳法则:对于任意的整数a、b和c,(a-b)-c=a-(b+c)。
这意味着减法可以转化为加法的结合形式。
例如,(1-2)-3=1-(2+3)=-43.整数加减法的运算顺序:在整数加减法中,有一定的运算顺序。
(1)先进行括号内的加减法运算,注意括号外的符号不变。
例如,2+(3-4)=2-1=1(2)从左到右依次进行加减运算。
例如,4+3-2=7-2=5(3)当出现连续的加号或减号时,可以进行合并运算。
例如,2+3+4可以合并为2+(3+4)=2+7=9(4)当出现连续的减号时,可以进行合并运算。
例如,2-3-4可以合并为2-(3+4)=2-7=-54.整数加减法的乘除法法则:(1)乘法与加法的关系:对于任意的整数a、b和c,a*b+a*c=(b+c)*a。
加法的交换律与结合律在数学中,加法交换律与结合律是我们在学习加法运算时所遵循的重要规则。
这些规则帮助我们更好地理解和运用加法,并为解决数学问题提供了便利。
本文将详细探讨加法交换律与结合律的概念、性质以及实际应用。
一、加法交换律加法交换律是指加法运算中两个数相加的结果与将它们交换顺序后相加的结果相等。
也就是说,对于任意两个数a和b,a + b = b + a。
例如,对于两个整数2和5,根据加法交换律,我们可以得到2 + 5 = 5 + 2。
这表明了无论是先将2与5相加还是先将5与2相加,最终的结果都是7。
加法交换律的证明可以通过简单的数学归纳法来完成。
假设对于任意的整数k,a + k = k + a 成立。
那么对于k + 1,我们有:a + (k + 1) = (a + k) + 1 = (k + a) + 1 = k + (a + 1) = (k + 1) + a因此,加法交换律成立。
二、加法结合律加法结合律是指对于任意三个数a、b和c,它们的加法运算满足:(a + b) + c = a + (b + c)。
换句话说,当我们有多个数相加时,可以根据需要改变计算的顺序,最终的结果不会受到影响。
举个例子,考虑三个整数2、3和4。
根据加法结合律我们可以得到(2 + 3) + 4 = 2 + (3 + 4),这意味着先将2与3相加再与4相加的结果与先将3与4相加再与2相加的结果相等,都为9。
加法结合律同样可以通过数学归纳法进行证明。
假设对于任意的整数k,(a + b) + k = a + (b + k) 成立。
那么对于k + 1,我们有:(a + b) + (k + 1) = [(a + b) + k] + 1 = [a + (b + k)] + 1 = a + [(b + k) + 1] = a + (b + (k + 1)) = a + (b + (1 + k)) = a + [(b + 1) + k] = (a + (b + 1)) + k因此,加法结合律成立。
数学整数的加减运算数学中整数的加减运算是基础且重要的运算方式,在日常生活和学习中都有广泛的应用。
本文将详细介绍整数的加减运算规则、性质以及一些常见的实际问题。
一、整数的加法运算整数的加法运算是指将两个整数进行相加得到一个新的整数的过程。
整数的加法运算有如下几个基本性质:1. 整数加法的运算律:对于任意整数a、b、c,有(a+b)+c=a+(b+c)成立,即整数加法满足结合律。
2. 整数加法的交换律:对于任意整数a、b,有a+b=b+a成立,即整数加法满足交换律。
基于上述性质,我们可以用如下步骤进行整数的加法运算:1. 将加数按照十进制列竖式的形式排列,并对其对齐。
例如,将-23和15相加,排列如下:-23+15----2. 从个位开始,按照竖式的规则逐位相加。
- 当两个数的符号相同时,直接将它们的绝对值相加,并保留相同的符号。
例如:-3+5=2,-20+50=30。
- 当两个数的符号不同时,先求它们的绝对值的差值,再取差值的符号。
例如:-5+3=-2,-20+15=-5。
3. 根据运算结果的正负确定最终的答案。
运算结果为正数时,表示两个数相加的和;运算结果为负数时,表示两个数相减的差。
二、整数的减法运算整数的减法运算是指将被减数减去减数得到一个新的整数的过程。
整数的减法运算同样具有相应的性质:1. 整数减法的运算律:对于任意整数a、b、c,有(a-b)-c=a-(b+c)成立,即整数减法满足结合律。
2. 整数减法不满足交换律,即a-b不一定等于b-a。
整数的减法运算可以通过加法的方式来进行,即将减法转化为加法。
例如,a-b可以转化为a+(-b)的形式进行计算。
在具体的操作过程中,我们可以遵循以下步骤进行整数的减法运算:1. 将被减数和减数按照十进制列竖式的形式排列,并对其对齐。
例如,计算-23-15,排列如下:-23-15----2. 转化为加法运算,将减法转换为加法。
- 当减数为正数时,将其符号改为负号。
整数的概念与运算整数是数学中的一种基本数值概念,它包括正整数、负整数和零。
在我们日常生活中,整数被广泛应用于各种计算和测量中。
了解整数的概念及其运算规则,对于我们正确理解和应用数学知识至关重要。
本文将探讨整数的概念以及加法、减法、乘法和除法等常见整数运算。
一、整数的概念整数是自然数、负自然数和零的总称。
自然数包括从1开始的正整数,而负自然数则是从-1开始的负整数。
整数可以用数轴表示,数轴上的每个点代表一个整数。
正整数在数轴的右侧,负整数在数轴的左侧,零则位于数轴的中央。
二、整数的加法运算整数的加法运算是指两个或多个整数相加的过程。
当整数相同符号时,我们将它们的绝对值相加,并保持符号不变;当整数符号不同时,我们将其绝对值相减,并以绝对值较大的整数的符号为结果的符号。
例如,(-3) + (-5) = -8,(-3) + 5 = 2,3 + (-5) = -2,5 + 3 = 8。
三、整数的减法运算整数的减法运算是指一个整数减去另一个整数的过程。
我们可以将减法看作是加法的逆运算。
要计算减法,我们将减数与被减数的相反数相加。
例如,7 - 3 = 7 + (-3) = 4,(-5) - (-2) = (-5) + 2 = -3。
四、整数的乘法运算整数的乘法运算是指两个或多个整数相乘的过程。
当整数符号相同时,我们将其绝对值相乘,并保持符号不变;当整数符号不同时,我们将其绝对值相乘,并将结果的符号设为负号。
例如,(-2) × (-3) = 6,(-2) × 3 = -6,2 × (-3) = -6,2 × 3 = 6。
五、整数的除法运算整数的除法运算是指一个整数除以另一个整数的过程。
在除法运算中,我们除数不能为零。
当两个整数符号相同时,我们将其绝对值相除,并保持符号不变;当整数符号不同时,我们将其绝对值相除,并将结果的符号设为负号。
例如,(-10) ÷ (-2) = 5,(-10) ÷ 2 = -5,10 ÷ (-2) = -5,10 ÷ 2 = 5。
计算机基础知识(计算机基本运算)计算机基础知识(计算机基本运算)计算机基础知识是指计算机科学的核心概念和技术,是每个计算机科学学习者必须掌握的基本知识。
而计算机基本运算是计算机中最基本、最重要的运算方式。
在本文中,我们将深入探讨计算机基本运算的原理和应用。
一、整数运算在计算机中,整数运算是最常见的运算之一。
计算机以二进制形式存储和运算整数。
整数运算主要包括加法、减法、乘法和除法。
1. 加法加法是将两个数值相加得到一个结果的运算。
计算机通过将两个二进制数的每一位相加来实现加法运算。
当位相加结果大于1时,产生进位。
通过连续的进位,计算机可以实现任意位数整数的加法运算。
2. 减法减法是将一个数值从另一个数值中减去得到一个结果的运算。
计算机通过补码的方式实现减法运算。
补码是一种表示负数的方式,可以将减法转换为加法运算。
3. 乘法乘法是将两个数值相乘得到一个结果的运算。
计算机通过多次的移位和加法运算实现乘法。
对于大数乘法,计算机采用分治算法,将乘法分解为多个小规模乘法的组合。
4. 除法除法是将一个数值除以另一个数值得到一个结果的运算。
计算机通过多次的减法和移位运算实现除法。
对于大数除法,计算机采用迭代逼近的方式进行计算。
二、浮点数运算除了整数运算,计算机还支持浮点数运算。
浮点数是一种表示实数的方式,可以表示非常大或非常小的数值。
浮点数运算主要包括加法、减法、乘法和除法。
1. 加法浮点数加法运算与整数加法运算类似,需要对指数和尾数进行对齐,并进行相应的进位和舍入处理。
计算机根据浮点数的规范,将两个浮点数相加得到一个结果。
2. 减法浮点数减法运算也类似于整数减法运算,需要对指数和尾数进行对齐,并进行进位和舍入处理。
计算机将两个浮点数相减得到一个结果。
3. 乘法浮点数乘法运算需要对指数和尾数进行运算,并进行进位和舍入处理。
计算机通过移位和加法运算实现浮点数乘法。
4. 除法浮点数除法运算需要对指数和尾数进行运算,并进行进位和舍入处理。
学会快速计算的技巧1. 整数加法的技巧快速计算整数加法是数学运算中的基本技巧之一。
下面介绍几种常用的快速计算整数加法的技巧。
1.1 简单整数加法对于两位数的简单整数加法,可以通过直观的分步思考来计算。
例如,计算98 + 37,可以先计算个位数8 + 7 = 15,得到个位数的结果5,然后再计算十位数9 + 3 + 1(来自个位数的进位)= 13,得到十位数的结果3。
因此,98 + 37 = 135。
1.2 规律整数加法对于遇到特定规律的整数加法,可以利用规律来简化计算。
例如,计算100 + 200 + 300 + 400可以发现,每个数的个位数都是0,因此可以直接将这些个位数相加得到0,然后再计算每个数的十位数相加得到10,最终结果为410。
1.3 满十进位整数加法对于整数加法中出现进位的情况,可以利用满十进位来简化计算。
例如,计算47 + 56,可以将56的个位数6直接加到47的个位数7上得到13(3进位),然后再计算47的十位数4加上这个进位得到5,最终结果为103。
2. 快速乘法的技巧快速计算乘法同样是数学运算中的基本技巧之一。
下面介绍几种常用的快速计算乘法的技巧。
2.1 分配律乘法对于分配律乘法,可以将一个因数分解成更简单的形式,然后进行乘法运算。
例如,计算24 × 5,可以分解成(20 + 4) × 5,然后将20 × 5和4 × 5分别计算得到100和20,最后将两个结果相加得到120。
2.2 九九乘法口诀九九乘法口诀是一种非常常用且简洁的计算乘法的技巧,通过记住九九乘法口诀,可以快速计算出任意两个个位数的乘积。
例如,通过九九乘法口诀可以快速得到6 × 7 = 42, 8 × 9 = 72等结果。
2.3 平方数的乘法对于计算某个数的平方,可以利用平方数的特点进行快速计算。
例如,计算25²,可以直接将25 × 25的结果相加得到625,同样,计算35²可以根据平方数的对称性直接得到1225。
课程名称: 《数据结构》课程设计课程设计题目: 任意长整数加法运算姓名: XXX专业: 计算机科技2班年级: 13级学号: E11314XXX指导老师:XXX2015年9月17目录1.课程设计的目的 (1)2.需求分析 (1)3任意长整数加法的设计 (2)3.1概要设计 (2)3.2详细设计 (3)3.3调试分析 (9)3.4用户手册 (10)3.5测试结果 (10)4总结 (11)5、程序清单:(见附录) (11)7、程序运行结果 (11)附录1 (13)1.课程设计的目的(1) 熟练使用 C 语言编写程序,解决实际问题;(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;2.需求分析(1)设计一个实现任意长的整数加法运算演示程序。
(2)利用双向链表实现长整数的存储,每个结点含一个整型变量。
(3)输入输出形式按中国对长整数的表示习惯,每四位一组,用逗号隔开。
3任意长整数加法的设计3.1概要设计(1)主界面设计图 1图2主界面,如图1所示,包含四个菜单项,输入数字选择对应菜单,进入子项。
其中选项2包含子菜单,如图2所示。
(2)存储结构本系统用结构体linlist存储数据,该结构体由数据data、下一节点指针next、上一节点指针prior组成。
data是short型变量,存放每个结点的数据。
本系统中data 一般不超过10000。
用结构体linlist构建链表,头结点的data域符号代表长整数的符号,绝对值表示链表结点数目。
(3)系统功能设计本系统主菜单包含四个选项,功能描述如下:菜单1:输入两个任意长的整数。
可按照标准四位一组中间用逗号隔开输入,也可直接输入,输入的数字保存在文件中,结束后自动返回主菜单。
菜单2:实现两个任意长整数的加法。
可直接输入两个数也可读入一个文件,获取两个加数,相加结果可保存在文件中,也可不保存,结束后返回菜单2。
菜单3:输入文件名称,查询文件中的数字。
文件中可能保存的是两个加数,也可能保存的是某次两个任意长整数相加的结果。
菜单4:退出系统。
3.2详细设计(1)系统子程序及功能设计本系统设置16个子程序,各程序的函数名及功能说明如下:void append(LinList &L,Elemtype d);//以L为头结点,将d加入到链表L void Delete(LinList &L);//删除结点Lvoid display(LinList L);//按照输出标准,输出任意长整数void add(LinList &L1,LinList L2);//将L1与L2相加short StrToPosiNum(char * s);//将s转化为一个小于32767的正整数void input(LinList &L);//输入一个很长的整数到Lvoid FREE(LinList &L1);//删除以L1为头结点的整个链表void save(LinList L1,LinList L2);//把L1,L2写到文件void load(LinList &L1,LinList &L2);//读文件到L1,L2void inputdata();//调用input函数,实现两个任意长整数的输入void welcome();//输出欢迎界面void fileadd();//读入文件,调用add函数,实现两个任意长整数的相加void directadd();//直接输入数字相加void calculayteadd();//实现两个任意长整数的相加int maincourse();//菜单选择void search();//查询文件中的数字(2)数据类型定义typedef struct linlist{Elemtype data;linlist * next;linlist * prior;} * LinList;(3)系统主要子程序详细设计本系统的各个函数之间的关系如下图:图31)菜单1代码void inputdata(){//调用input函数,实现两个任意长整数的输入system("cls");LinList L1=NULL,L2=NULL;printf("\t\t\t ------------------\n\t\t\t\t 输入数据\n\t\t\t ------------------\n");printf("输入第一个长整数:");input(L1); //调用input函数printf("输入第二个长整数:");input(L2);printf("\n数据将存放于文件中...");save(L1,L2); //调用save函数,存储L1L2FREE(L1);FREE(L2);//释放L1,L2printf("写入完成!\n");system("pause");}void input(LinList &L){//输入一个很长的整数到Lchar s[1000],s2[5]={'0','0','0','0','\0'};unsigned i=0,j;int sign=1,num=0,flag=1;Elemtype data;while(flag){flag=0;s[0]=getchar();if(s[0]=='-'){//若为负数sign=-1;i=i-1;}while(i==-1||s[i]!='\n'){//第一个输入负号或者输入数字i=i+1;s[i]=getchar();if(s[i]==',')i=i-1;else if((s[i]>'9'||s[i]<'0')&&s[i]!='\n'){printf("非法输入,请重新输入!\n");flag=1;continue;}}}s[i]=0;append(L,(int)(sign*ceil((strlen(s))/4.0)));//第一个结点存放链表长度和数据的正负号j=strlen(s)%4;i=0;if(j!=0){for(;i<j;i++)s2[i]=s[i];s2[i]=0;data=StrToPosiNum(s2);append(L,data);//以L为头结点,添加结点}for(;i<strlen(s);i=i+4){//每4位数放入一个结点for(j=0;j<4;j++)s2[j]=s[i+j];s2[j]=0;data=StrToPosiNum(s2);append(L,data);//以L为头结点,添加结点}}2)菜单2代码void calculayteadd(){//菜单2求和while(1){system("cls");printf("\n\t\t --------------------------------\n\t\t\t\t 加法运算\n");printf("\t\t --------------------------------\n");printf("\t\t\t\t1. 直接输入求和\n\t\t\t\t2. 读入文件求和\n\t\t\t\t3. 返回主菜单\n");printf("\t\t --------------------------------\n\n");char s[100];int flag=0;do{if(flag)printf("\t 输入非法,请重新输入:");elseprintf("\t 输入数字1-3选择:");flag=1;scanf("%s",s);}while(strlen(s)>1||s[0]-'0'<=0||s[0]-'0'>3);getchar();switch(s[0]-'0'){case 1:directadd();//直接输入数字求和break;case 2:fileadd();//输入文件名称求和break;case 3:return;break;}}void add(LinList &L1,LinList L2){//将L1与L2相加,结果放到L1LinList p,q,r;int cy=0;int sign1=1,sign2=1;if(!L1||L1->data==0)//若L1为空,相加结果为L2L1=L2;else if(!L2||L2->data==0)//若L2为空,相加结果为L1return;else{//否则if(abs(L1->data)<abs(L2->data)||L1->next->data<L2->next->data){ q=L1; //L1总是存放绝对值较大的数字L1=L2;L2=q;}p=L1->prior;q=L2->prior;if(L1->data<0)sign1=-1;if(L2->data<0)sign2=-1;if(sign1*sign2>0){ //相加的为同号数字while(p!=L1&&q!=L2){p->data=q->data+p->data+cy;if(p->data>9999){cy=1;p->data=abs(p->data)-10000;}elsecy=0;p=p->prior;q=q->prior;}while(p!=L1&&cy){p->data=p->data+cy;if(p->data>9999){cy=1;p->data=p->data-10000;}elsecy=0;p=p->prior;}p=p->next;if(cy){r=(LinList)malloc(sizeof(linlist));p->prior->next=r;r->prior=p->prior;r->next=p;p->prior=r;r->data=cy;L1->data=L1->data*sign1+1;L1->data=L1->data*sign1;}}else{//相加的为异号的数字cy=0;while(p!=L1&&q!=L2){p->data=p->data-cy;if(p->data<q->data){p->data=p->data+10000;cy=1;}p->data=p->data-q->data;p=p->prior;q=q->prior;}while(p!=L1&&cy){if(p->data<cy){cy=1;p->data=p->data+10000;}p->data=p->data-cy;p=p->prior;}}}while(L1->next->data==0&&L1->next->next!=L1){//结果为0的结点去掉p=L1->next;p->next->prior=L1;L1->next=p->next;L1->data=L1->data*sign1-1;L1->data=L1->data*sign1;Delete(p);}}3)菜单3代码void search(){//查询文件中的数字FILE * fp;LinList L1=NULL,L2=NULL;LinList p=L1;int i,length;char s[100];system("cls");printf("\t\t\t ------------------\n\t\t\t\t 文件查询\n\t\t\t ------------------");Elemtype t;printf("\n文件的名称为:");//读取文件scanf("%s",s);fp=fopen(s,"rb");fseek(fp,0,SEEK_SET);fread(&t,sizeof(Elemtype),1,fp);length=abs(t);//第一个数字的位数append(L1,t);for(i=0;i<length;i++){fread(&t,sizeof(Elemtype),1,fp);append(L1,t);}fread(&t,sizeof(Elemtype),1,fp);if(!feof(fp)){//读入第二个数字length=abs(t);append(L2,t);for(i=0;i<length;i++){fread(&t,sizeof(Elemtype),1,fp);append(L2,t);}printf("文件中有两个数字,分别为:\n");display(L1);putchar('\n');display(L2);putchar('\n');}else{printf("文件中有一个数字:\n");display(L1);putchar('\n');}system("pause");}3.3调试分析1.输入数据在主菜单下输入1并回车,进入子项1,可输入两个任意长的整数,保存于文件中,运行结果如图4所示。