任意长整数加法运算
长整数四则运算 实验报告

“数据结构”课程设计报告长整数四则运算学生姓名:吴成杰徐文良指导教师:陈少军所在系:电子信息系所学专业:计算机科学与技术年级: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组员分配任务我们组有两个成员,分别为吴成杰和徐文良,一个负责写主函数、函数整体的框架和写转换函数函数和对输入的字符进行处理,一个负责写出栈函数和写处理函数和拼接,程序出现错误,两个人一起在一起互相商量,修改。
整数的加法和减法运算

在加减混合运算中,加法和减法 都满足交换律,即a+b=b+a,a-
b=-(b-a)。
02
交换律
加减混合运算的应用举例
03
解决实际问题
数学题目求解
程序设计中的应用
加减混合运算在实际生活中应用广泛,如 计算购物时的总价、找零等。
在数学题目中,加减混合运算也是常见的 运算形式之一,需要掌握其计算方法和技 巧。
在进行整数减法运算时,需要注意借位和进位的问题。当被减数的某一 位小于减数的对应位时,需要向前一位借位;当被减数的某一位大于减 数的对应位时,需要向后一位进位。
整数减法的应用举例
在日常生活中,我们经常使用整数减 法来解决问题,例如计算购物时的找 零金额、计算两个时间点之间的时间 差等。
在计算机科学中,整数减法也是编程 中常用的操作之一,例如在计算两个 变量的差值、实现某些算法等过程中 都需要使用到整数减法。
任何数减去0等于其本身, 即 a - 0 = a。
任何数减去其本身等于0, 即 a - a = 0。
01
02
03
04
05
整数减法的运算规则
当被减数和减数同号时,可以直接进行减法运算,结果的符号与被减数 和减数的符号相同。
当被减数和减数异号时,需要将减法转化为加法进行运算,即 a - (-b) = a + b。
整数加法的性质
整数加法满足交换律,即a + b = b + a 。
整数加法存在单位元0,即对于任何整数 a,都有a + 0 = a。
整数加法满足结合律,即(a + b) + c = a + (b + c)。
整数与整数运算

整数与整数运算整数是数学中常见的一类数,它包括正整数、负整数和零。
整数的运算是数学中的基本操作之一,它包括加法、减法、乘法和除法。
本文将从整数的定义、整数运算的基本性质以及几种常见的整数运算方法这三个方面来介绍整数与整数运算。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称: 《数据结构》课程设计课程设计题目: 任意长整数加法运算姓名: 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所示。