长整数加减运算实验报告word资料20页

合集下载

长整数运算实验报告

长整数运算实验报告

一、实验目的1. 理解长整数的概念及其在编程中的应用。

2. 掌握长整数的基本运算方法,包括加法、减法、乘法和除法。

3. 提高编程能力,通过实际操作加深对长整数运算的理解。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容1. 长整数的定义与初始化2. 长整数的加法运算3. 长整数的减法运算4. 长整数的乘法运算5. 长整数的除法运算四、实验步骤1. 长整数的定义与初始化在Python中,长整数不需要特殊声明,只需按照常规整数进行定义即可。

下面是长整数的定义与初始化示例:```pythona = 123456789012345678901234567890b = 987654321098765432109876543210```2. 长整数的加法运算长整数的加法运算与常规整数相同,使用`+`符号。

下面是长整数加法运算的示例:```pythonresult = a + bprint("加法运算结果:", result)```3. 长整数的减法运算长整数的减法运算同样与常规整数相同,使用`-`符号。

下面是长整数减法运算的示例:```pythonresult = a - bprint("减法运算结果:", result)```4. 长整数的乘法运算长整数的乘法运算与常规整数相同,使用``符号。

下面是长整数乘法运算的示例:```pythonresult = a bprint("乘法运算结果:", result)```5. 长整数的除法运算长整数的除法运算与常规整数相同,使用`/`符号。

下面是长整数除法运算的示例:```pythonresult = a / bprint("除法运算结果:", result)```五、实验结果与分析1. 长整数的定义与初始化:通过定义长整数,我们了解了长整数在Python中的表示方法。

长整数、高精度运算程序报告

长整数、高精度运算程序报告

.华南理工大学
高级语言程序设计C++ 课程实验报告
实验题目:________长整数、高精度运算__________________________姓名:_______ ____ 学号:__ ________________
班级: ___计算机科学与技术2班________ 指导教师: _____邢安娜___
附注:
实验报告说明
1.实验项目名称:要用最简练的语言反映实验的内容。

2.实验目的与要求:目的要明确,要抓住重点,符合实验大纲的要求。

3.实验原理:简要说明本实验项目所涉及的理论知识。

4.实验环境:实验用的软硬件环境(配置)。

5.实验方案设计(思路、步骤和方法等):这是实验报告极其重要的内容。

概括整个实验过程。

对于操作型实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。

对于设计型和综合型实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。

对于创新型实验,还应注明其创新点、特色。

6.实验过程(实验中涉及的记录、数据、分析):写明上述实验方案的具体实施,包括实验过程中的记录、数据和相应的分析。

7.结论(结果):即根据实验过程中所见到的现象和测得的数据,做出结论。

8. 小结:对本次实验的心得体会、思考和建议。

9.指导教师评语及成绩:指导教师依据学生的实际报告内容,用简练语言给出本次实验报告的评价。

整数工程实验报告模板

整数工程实验报告模板

一、实验目的1. 理解整数运算的基本原理和方法。

2. 掌握整数加、减、乘、除运算的算法实现。

3. 通过编程实践,提高算法设计和编程能力。

4. 熟悉整数运算在工程应用中的重要性。

二、实验环境1. 操作系统:Windows 102. 编程语言:C/C++3. 开发环境:Visual Studio 20194. 实验设备:个人电脑三、实验原理整数运算是指对整数进行加、减、乘、除等基本数学运算。

在计算机科学中,整数运算的实现通常基于二进制表示和位操作。

本实验将基于此原理,通过编程实现整数运算。

四、实验内容1. 实现整数加法算法。

2. 实现整数减法算法。

3. 实现整数乘法算法。

4. 实现整数除法算法。

5. 编写测试程序,验证算法的正确性。

五、实验步骤1. 整数加法算法实现- 定义一个函数,接受两个整数参数,返回它们的和。

- 使用位操作实现加法运算。

2. 整数减法算法实现- 定义一个函数,接受两个整数参数,返回它们的差。

- 使用位操作实现减法运算。

3. 整数乘法算法实现- 定义一个函数,接受两个整数参数,返回它们的乘积。

- 使用位操作和位移操作实现乘法运算。

4. 整数除法算法实现- 定义一个函数,接受两个整数参数,返回它们的商和余数。

- 使用位操作和位移操作实现除法运算。

5. 编写测试程序- 编写测试函数,用于验证加、减、乘、除算法的正确性。

- 测试不同大小的整数,包括正数、负数和零。

六、实验结果与分析1. 整数加法- 输入:5,3- 输出:8- 分析:加法算法正确实现。

2. 整数减法- 输入:10,4- 输出:6- 分析:减法算法正确实现。

3. 整数乘法- 输入:-2,5- 输出:-10- 分析:乘法算法正确实现。

4. 整数除法- 输入:20,3- 输出:6,2- 分析:除法算法正确实现。

七、实验总结通过本次实验,我们成功实现了整数加、减、乘、除运算的算法,并验证了算法的正确性。

在实验过程中,我们学习了位操作和位移操作在整数运算中的应用,提高了算法设计和编程能力。

长整数四则运算 实验报告

长整数四则运算 实验报告

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

实验报告长整数四则运算

实验报告长整数四则运算

实验报告:长整数四则运算实验者:唐怡04120082 题目:设计一个实现任意长的整数进行加法运算的演示程序一.需求分析1.本演示程序中,长整数为任意长的带符号的长整数的输入及求加法后输出的长整数形式为每四位一组,组间用逗号隔开,输入以“回车符”为结束标志。

2.程度执行的命令包括:1)构造整数1,2)构造整数2,3)做加法运算,4)结束3.测试数据(1)0;0;应输出“0”(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”(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”。

二.概要设计为实现上述程序功能,应以有序表实现长整数的存储,为此,需要抽象数据类型:有序表1.有序表的抽象数据类型定义为:ADT Dulinklist{数据对象:D={ai|ai为带符号整数,1,2,…,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai属于集合D,ai-1<ai,i=2,…..,n}基本操作:InitDulinklist(&)操作结果:构造一个空的有序表LDestroyDulinklist(&)初始条件:有序表L已存在操作结果:销毁有序表LDulinklistLength(L)初始条件:有序表L已存在操作结果:返回有序表L的长度DulinklistEmpty(L)初始条件:有序表L已存在操作结果:若有序表L为空表,则返回TUER,否则返回FALSEGetElem(L,pos)初始条件:有序表L已存在操作结果:若干1〈=POS〈=LENGTH(L),则返回有序表L中第POS个数据元素。

长整数加减-实验报告

长整数加减-实验报告

实验一线性表实现方法题目:编制一个长整数加减运算实现的程序班级:计科0906 姓名:陆遥学号:2009481406015 完成日期:2010-11-10一、需求分析1、本实验中演示中,长整数的每位上的数字必须为数字[0——9]之间,长整数的位数要求无限长。

测试的时候输入数据,当输入回车键的时候结束输入,如果输入的字符不符合题目要求,则程序能过滤这些不符合要求的字符。

2、演示程序以用户和计算机的对话方式执行,即在计算机显示“提示信息”后之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据(滤去输入中不符合要求的字符)和运算结果显示在其后。

3、程序执行的命令包括:(1)创建第一个长整数;(2)执行加法或者减法;(3)创建第二个长整数;(4)结束。

4、测试数据(1)Please Enter the First long Integer:123456789+ or - :+Please Enter the Second long Integer:12345678123456789+12345678=135802467(2)Please Enter the First long Integer:123456789987654321+ or - :-Please Enter the Second long Integer:987654321123456789=-864197531135802468二、概要设计为实现上述程序功能,可以用链表或者长数组表示长整数,如果用数组表示长整数有个缺点就是长整数不能无限长,而链表能动态开辟空间,它克服了这个缺点,所以次试验用链表来表示长整数。

1、链表的抽象数据类型定义为:ADT Number{数据对象:D={a i| a i∈(0,1,…,9),i=0,1,2,…,n,n≥0}数据关系:R={< a i-1, a i >| a i-1, a i∈D,i=1,2,…,n}基本操作:CreateList (&L )操作结果:创建一个链表L 。

计算机软件及应用课程设计实验报告长整型数四则运算

计算机软件及应用课程设计实验报告长整型数四则运算

数据结构实验报告题目:长整型数四则运算学院计算机学院专业软件工程年级班别2010级1班成绩____________________2012年7月1日目录课程设计实验报告1一、实验概要- 1 -二、实验目的- 1 -三、实验环境- 1 -四、抽象数据类型的定义- 1 -五、存储结构的定义- 1 -六、算法设计- 2 -六、程序运行情况- 30 -七、实验总结- 33 -实验中遇到的问题:-33-实验总结:-33-八、思考题错误!未定义书签。

题目:长整型数四则运算一、实验概要1、设计一个实现任意长的整数进行四则运算的程序。

2、输入和输出形式是按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开,长整数位数没有上限,以分号结束长整型数据的输入。

3、程序执行的命令包括:1)、输入长整数1;2)、输入长整数2;3)、输入执行的运算符;4)、计算并输出结果;5)、结束。

4、测试数据:(以加法为例)(1)、0;0;+;应输出“0”。

(2)、-2345,6789;-7654,3211;+;应输出“-1,0000,0000”。

(3)、-9999,9999;1,0000,0000,0000;+;应输出“9999,0000,0001”.(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”.二、实验目的输入和输出形式是按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开,长整数位数没有上限,以分号结束长整型数据的输入,进行计算三、实验环境Visual C++6.0四、抽象数据类型的定义1、双向循环链表的数据结构及操作定义如下:typedef short ElemType; //定义基本数据类型,我们采用short来表示任意4位整数。

数据结构课程设计报告长整数运算范文

数据结构课程设计报告长整数运算范文

数据结构课程设计报告长整数运算数据结构课程设计报告题目:长整数四则运算一、需求分析1.问题描述:由于工程上有时候需要对很大的数进行计算,可是计算机本身提供的数据类型无法保存几百位甚至几千位的数字,因此需要设计专门的算法对数据进行相应的计算。

此程序的设计任务是:设计一个程序能够实现长整数运算的程序,而且能够对一些错误异常进行辨别调整,计算出正确的结果。

程序输入格式是字符串,保存时需要用双向循环链表将字符串每四位保存在循环链表中的一个节点中,然后再计算后运行出结果。

2.基本功能功能一:建立双向循环链表,计算链表个数,对链表的数据进行修改,能在链表中插入结点。

功能二:将字符串转换成相应的数字存储在双向循环链表中功能三:对存入双向循环链表的长整数进行相加,相减,相除。

3.输入输出程序输入以字符串的形式输入,数据的类型是字符串,包含元素的范围是数字,逗号,负号。

输入时用字符串输入,输出时以一链表结点输出,而且每个结点表示四位。

二、概要设计1.设计思路:由于计算机无法完成位数很大的数字计算,设计思路就是将很长的数据进行分割,一部分一部分的用计算机固有数据类型进行计算。

将各部分的结果整合起来。

由于计算机固有的整数类型存数的对大整数是2^15-1,因此为了方便,且符合中国人对长整数的表示习惯,建立一个双向循环链表,每个结点存储四位数字,以万为进制。

从最低位开始加法,超过一万向上进位,因此每次加法应该是对应两个结点和进位数相加,进位值初始为0;减法也是一个结点计算一次,每次计算应该是第一个链表对应的结点值减去第二个结点的值和借位值的和,借位值初始值为0;除法的计算能够借助减法,被减数被减数减一次则最终结果加一;直至被减数比减数小。

2.数据结构设计:因为计算的是一个连续的数字,需要桉顺序一次计算,因此采用的数据结构的逻辑结构是线性表。

因为要求每一个结点只存储四位数字,为了将数字连接起来,采用的数据结构的存储结构是链式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

长整数加减的运算一、需求分析问题描述:设计一个实现任意长的整数进行加法运算的演示程序基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整型变量。

任何整型变量的范围是-(2 15 -1)~(2 15 -1)。

输入输出形式:按照中国对于长整数的表示习惯,每四位是一组,组间用逗号隔开更高要求:(1)长整数的减法(2)多个长整数的连续加减法,并带括号等。

具体方式可以参见表达式的求值部分,利用栈测试数据:(1)0;0;应输出“0”(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”(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”一、概要设计1.数据结构此实验采用的数据结构是双向循环链表。

这样可以很容易的找到他的前驱以及它的后继。

节点采用结构体类型,代码如下:typedef struct Node // 双向链表的结构体定义 int data;struct Node *prior;struct Node *next;}DLNode;2.使用函数1)void ListInitiate(DLNode **head)操作结果:初始化一个头结点为head的双向循环链表;2)int ListLength(DLNode *head)操作结果:计算以head为头结点的链表的长度3)int ListInsert(DLNode *head,int i,int x)操作结果:将节点数据为x的节点插到第i个位置上去。

4)int abs(int x)操作结果:绝对值函数,返回x的绝对值。

5)int InputNumber(DLNode *head)操作结果:将从键盘中接收数据并把得到的数据存入以head为头结点的链表中。

四位一存,中间以逗号区分,结束符为分号。

6)void OutputNumber(DLNode *head,int sign)操作结果:将以head为头结点的链表中的所有数据输出到显示屏上,7)void add(DLNode *head1,DLNode *head2,DLNode *head3)操作结果:实现正数加正数的加法操作。

8)int change(DLNode *head1,DLNode *head2)操作结果:判断存在俩个链表中的数的大小,如何head1中的数大于head2中的数那么返回值为0,反之返回值为1,相等时返回值为2;9)void method(DLNode *head1,DLNode *head2,int x)操作结果:计算正数乘以正数的乘法运算。

10)void minus(DLNode *head1,DLNode *head2,DLNode *head3)操作结果:计算正数减正数的减法运算。

11)void yunsuan(DLNode *head1,DLNode *head2,DLNode *head3,char ch)操作结果:正数,负数,加法,减法。

计算式共分为八种运算,在这之前我已经实现了二种运算,那么这个函数就是把这八种运算按照一定的规则转化成已经实现的二种运算来实现完整的加减法运算。

12)void chengfa(DLNode *head1,DLNode *head2)操作结果:在乘法中我只是实现了正数乘以正数的运算,那么这个函数就是通过调用method函数按照一定的规则来实现完整的乘法运算。

13)void main()操作结果:主函数。

调用以上的各个函数来引导用户进行长整数的加法运算,加法运算,乘法运算。

二、详细设计1.数据结构详细设计typedef struct Node // 双向链表的结构体定义int data;struct Node *prior;struct Node *next;}DLNode;双向循环链表的节点由三个部分组成,第一是数据部分data存储此节点的数据,第二是此节点的前驱指针部分*prior指向此节点的前驱,第三是此节点的后继指针部分*next指向此节点的后继。

数据部分我们约定它为整形变量,前驱后继指针均为结构体Node类型。

2.链表初始化函数:void ListInitiate(DLNode **head) //双向链表的初始化if((*head=(DLNode *)malloc(sizeof(DLNode)))==NULL) exit(0);(*head)->prior=*head;(*head)->next=*head;初始化之前需要定义一个类型为Node型的头结点变量,经过函数后完成链表的初始化即:头节点的前驱指针指向自己,同时他的后继指针也指向自己。

3.计算已知的链表长度:int ListLength(DLNode *head) //双向链表的表长DLNode *p=head;int size=0;while(p->next!=head)p=p->next;size++;return size;此函数计算的是已知链表的长度。

主要思想:从头结点开始寻找下一个节点,找到计数器加一。

直到再次寻找到头结点时停止,计算完毕。

4.插入函数:int ListInsert(DLNode *head,int i,int x) //双向链表的数据插入,i表示是插入的第几个元素DLNode *p,*s;int j;p=head->next;j=0;while(p!=head&&j<i)p=p->next;j++;if(j!=i)printf("\n插入位置不合法!");return 0;if((s=(DLNode *)malloc(sizeof(DLNode)))==NULL) exit(0);s->data=x;s->prior=p->prior;//插入p->prior->next=s;s->next=p;p->prior=s;return 1;此函数是已知一双向链表实现在第i个位置插入data为x的节点。

函数需要注意的是在什么位置插入才是合法的,在就是在该节点指针时的顺序不要搞错。

5.绝对值函数:int abs(int x)if(x<0) return -x;else return x;此函数是实现求一个整数的绝对值。

设计这么一个函数主要是考虑到在存储负数的时候头结点应该变为正整数,然后通过其他手段变相实现那种运算。

6.读入数据并插入对应的链表函数:int InputNumber(DLNode *head) //读入输入的数据int input,i=0;//第i个节点char c;scanf("%d%c",&input,&c);while(1)if(input<0&&i==0)//输入数为负且是第一个节点head->data=0;//将长整数的符号保存在头结点中//input=abs(input);//取输入数字的绝对值ListInsert(head,i,input);//插入数据else if(input>=0&&i==0)//输入数为正且是第一个节点head->data=1;//将长整数的符号保存在头结点中ListInsert(head,i,input);//插入数据elseif(head->next->data>=0)ListInsert(head,i,input);//非第一个节点else//input=-1*input;ListInsert(head,i,input);i++;if(c==';') break;//遇到数据输入完成标志,跳出循环scanf("%d%c",&input,&c);return 1;此函数实现的是从键盘上得到数据根据三种情况进行不同的处理,判断是否是头结点,判断是否是整数,判断输入的字符是否是“;”分号。

并且如果是正整数它的头结点data 等于1否则为0。

7.输出函数void OutputNumber(DLNode *head,int sign) //从表尾输出数据元素DLNode *r=head->next;while(r->data==0&&r!=head->prior)r=r->next;if(sign==1)printf("结果是:");elseprintf("结果是: -");printf("%d",r->data);r=r->next;while(r!=head)if(r->data<10)printf(",000");printf("%d",r->data);else if(r->data<100)printf(",00");printf("%d",r->data);else if(r->data<1000)printf(",0");printf("%d",r->data);elseprintf(",%d",r->data);r=r->next;printf("\n");此函数实现的是将最后的结果输出到显示屏上,经过判断数据的正负和数据的范围来进行不同的处理,以保证在显示屏上显示的是正确的格式。

8.不完整加法函数(只可实现正数加上正数)void add(DLNode *head1,DLNode *head2,DLNode *head3){int z=0;int e;DLNode *p1,*p2;p1=head1->prior;p2=head2->prior;while(p1!=head1&&p2!=head2)e=p1->data+p2->data+z;if(e>=10000)z=1;e=e%10000;else z=0;ListInsert(head3,0,e);p1=p1->prior;p2=p2->prior;if(p1==head1&&p2!=head2)while(p2!=head2)e=p2->data+z;if(e>=10000)z=1;e=e%10000;else z=0;ListInsert(head3,0,e);p2=p2->prior;if(z==1) ListInsert(head3,0,z);else if(p1!=head1&&p2==head2){while(p1!=head1)e=p1->data+z;if(e>=10000)z=1;e=e%10000;else z=0;ListInsert(head3,0,e);p1=p1->prior;if(z==1) ListInsert(head3,0,z);else{if(z==1) ListInsert(head3,0,z);此函数实现的是两个正数之间的相加运算,主要的算法和我们手算加法是一样的,首先设置一个进位计数的变量,根据存储的特点从低位开始相加带上进位即可得出相应的位和,最后更新进位变量。

相关文档
最新文档