实习1 1.4长整数四则运算
实习报告
题目:设计一个实现任意长的整数进行加法运算的演示程序。
一、 需求分析
1.本演示程序中,利用双向循环链表实现长整数的存储,每个结点含一个整型变量任何整型变量的范围是-(215-1)—(215-1)。在每个结点中仅存十进制数的4位,即不超过9999的非负整数,整个链表表示为万进制数。输入和输出形式按中国对于长整数的习惯,每四位一组,组间用逗号隔开。
2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据(滤去输入数据中的非法字符)和运算结果显示在其后。 3.程序执行的命令包括:
(1)构造链表;(2)输入数据;(3)数据处理;(4)结束 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。
二、 概要设计
struct LinkNode //定义结构体LinkNode {
int data; //记录每个节点的整数(小于10000) LinkNode *next; //记录下一个节点的地址 LinkNode *pre; //记录前一个节点的地址 };
class LinkList //定义类LinkList
{ private:
LinkNode *head0,*head1; //head0,head1分别记录两个整数链表的头指针 LinkNode *currptr;
LinkNode *result; //result记录结果链表的头指针 public:
LinkList(); //构造函数,初始化链表 ~LinkList(); //析构函数,释放空间
void Creat(string a); //引入字符串,创立两个链表,分别表示两个整数 void Add(); //实现两个整数相加 void Display(); //显示结果
void addtwo(); //节点多的作为被加数,少的作为加数,实现整 //数绝对值
大的加小的
};
void main() //主函数 { …… do{
} while(Yes_No=='y'||Yes_No=='Y'); //Yes_No不等于'Y'或'y'时,程序退出 }
三、详细设计
#include
int data; //记录每个节点的整数(小于10000) LinkNode *next; //记录下一个节点的地址 LinkNode *pre; //记录前一个节点的地址
};
class LinkList { private:
LinkNode *head0,*head1; //head0,head1分别记录两个整数链表的头指针 LinkNode *currptr;
LinkNode *result; //result记录结果链表的头指针 public:
LinkList(); //构造函数,初始化链表 ~LinkList(); //析构函数,释放空间
void Creat(string a); //引入字符串,创立两个链表,分别表示两个整数 void Add(); //实现两个整数相加 void Display(); //显示结果
void addtwo(); //节点多的作为被加数,少的作为加数,实现整 //数绝对值
大的加小的
};
//链表的实现部分
int sum(int n);
LinkList::LinkList() //构造函数,初始化链表 {
head0=new LinkNode; //申请一个空间记录整数的符号和节点数 head1=new LinkNode; head0->next=head0;
head0->pre=head0; //初始化链表,建立双向循环链表 head1->next=head1; head1->pre=head1;
result=new LinkNode;