石家庄经济学院
实 验 报 告
学 院: 信息工程学院 专 业: 计算机科学技术
计算机人论坛www.jsjer.com
1. 需求分析
1.1 开发背景
在现实生活中不可避免地我们会遇到一些超大整数之间的运算,比如要计算马云的资产,以及国有银行的转账收入支出等一些数的存储等等类似的问题,而由于计算机整形数的最小值和最大值范围仅为-32768到32767,所以关于大整数的实验即呼之欲出,本实验就是针对数值很大、精度很高的大整数进行的加法减法以及乘法的计算。
1.2数据需求
指针:L1,L2:分别为指向这两条存储要进行运算的链表头结点的指针;L3:指向乘法的结果链表;L4:在运算乘法的时候做中间量使用。prior:双向链表的头指针;next:双向链表的尾指针。
data:整形数,链表所存的数据。
1.3功能需求
对一个进行运算的软件,加法和减法是最基本的运算,本实验又额外增加了大整数的乘法。
1.4测试数据
第一个数:9,568,974,512; 第二个数:8,648,761,512;
2. 概要设计
2.1功能模块图
由需求分析可画出如下功能模块图。 大整数运算 加 减 法 法
图2-1 功能模块图
乘法 2.2各功能子程序定义
1.创建链表:
Status creat(DuLinkList &L,char str[30]);
2.输出链表中结点内的数据:
Status output(DuLinkList L); 3.加法:
DulNode *Add(DuLinkList L1,DuLinkList L2); 4.减法:
DulNode *Sub(DuLinkList L1,DuLinkList L2); 5.乘法:
DulNode *Mul(DuLinkList L1,DuLinkList L2); 计算机人论坛www.jsjer.com
2.3主界面截图
图2-3 程序主界面
3. 详细设计
3.1数据结构设计
此款软件是基于线性表双向链表完成的,在每个分过程中都充分利用了链表指针灵活又不太易于掌控的特性,但若是全面理解指针以及链表的特点,也是很容易设计此款软件的。
在大整数加减乘法软件中主要有以下几种数据 (1) Status, ElemType都是宏定义的整形量;
(2) DulNode是结构体,包含三个域,data,prior,next,分别是整形数,
左指针,右指针;
3.2模块详细设计
由于加法和减法的操作易于实现,在此并不一一赘述。 乘法的实现: (1) 构思:本函数又另设一个指针L3和L4,L3用于存储每一层的乘法结果,
L4则每次都加上L3链表,直至结束,最后L4指向的链表即为乘法的结果。
(2) 一级算法:
P1和p2分别指向L1和L2结点的下一个结点 遍历L1和L2,分别计算两链表的长度
若L2长于L1,则分别交换L1和L2,p1和p2。
新建结点L3和L4,p3和q分别指向L3指向的结点。 Do {
计算L3链表 }
为L3加上头结点;把L3赋给L4; P1重新置于L1尾部,p2前移一位; Do {
重新做一条L3链;
Do {
计算L3链
}当p1->next为NULL W指向L3链尾; 把L3加到L4上; }当p2->prior为空 返回L4; (3) 二级求精:
L3->data = 上一位的进位加上L1结点加上L2结点; 计算Prov; 新建L3->prior;
计算L3结点数据; P1前移
计算机人论坛www.jsjer.com
3.3测试与运行
本程序是用C语言在VisualC++环境编译所完成,经部分数据验证无误,现将测试与运行结果展示如下:
(1) 加法:
图3-3-1 加法
(2) 减法和乘法:
图3-3-2 减法和乘法
(3) 输入: