任意长整数的四则运算

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

1 题目介绍和功能要求

1.1 课程设计题目要求

【问题描述】:

设计一个实现任意长的整数进行加法运算的演示程序。

【题目容】:

利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的围是-(215- 1)~(215- 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。

【基本要求】:

(1)利用所学知识,设计相应的数据结构;

(2)熟练运用开发环境;

(3)完成软件的设计与编码;

(4)熟练地掌握基本的调试方法。

1.2 题目分析

【需求分析】:

(1)本程序实现计算任意长的整数的加法运算. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。

(2)本演示程序中,数字字符限定为[‘0’~‘9’]和字符‘,’,输入字符可以任意长,输入形式以“回车符”为结束标志,串中字符顺序不限,且允许出现重复字符。

(3)利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理,但不使用分隔符也不影响结果。

2 系统功能模块结构图

2.1 系统功能结构框图

图2.1 系统功能结构图

2.2主要模块的功能说明:

(1)主调程序模块:

void main()

{

初始化;

do{

接受命令;

处理命令;

}while(“命令”=”退出”)

}

(2)双向循环链表处理模块//cmplinklen.h //Creat.h //compare 说明:进行链表的存储和处理

(3)长整数运算模块//add.h // sub.h //imul.h //idiv.h 说明:对长整数进行四则运算

(4)界面模块//title.h //welcome.h

说明:控制系统运行操作界面

3 数据结构的设计及用法说明

3.1概要说明

为了实现上述功能,采取双向循环链表表示长整数,每个结点含一个整型变量,仅绝对值不超过9999的整数,整个链表用十进制数表示。利用头结点数据域的符号表示长整数的符号,相加过程不破坏两个操作数链表,对长整数位数不作上限。为此需要两个结构数据类型:双向循环链表和长整数。

3.2用法说明

3.2.1 双向循环链表的数据结构定义:

typedef struct Node //双向循环链表结点

{ int data;

struct Node *prior,*next;

}Node,*NodeList;

3.2.2 基本操作:

Status conversion(char str[],NodeList &oprh);

//将字符串形式的操作数转换成所需的类型

int cmplinklen(NodeList opr1,NodeList opr2);

//opr1链比opr2链长则返回1,短则返回-1,否则返回0 int length(NodeList oprr);

//求链表长度

Status Creat(NodeList &oprr,int len);

//生成指定长度链表

int compare(NodeList opr1,NodeList opr2);

//比较opr1、opr2绝对值的大小

4 涉及到的函数的描述

4.1长整数操作函数

Status input(NodeList &opr1,NodeList &opr2,char str[]);

//从键盘输入两个长整数,存至opr1和opr2中

Status output(NodeList oprr,char str[]);

//在屏幕打印长整数oprr

Status add_bas(NodeList opr1,NodeList opr2,NodeList &oprr);

//本算法实现A,B相加的操作

Status sub_bas(NodeList opr1,NodeList opr2,NodeList &oprr);

//本算法实现A,B相减的操作

Status imul(NodeList opr1,NodeList opr2,NodeList &oprr);

//本算法实现A,B相乘的操作

Status idiv(NodeList opr1,NodeList opr2,NodeList &quti,NodeList &remand);//本算法实现A,B相除的操作

4.2主要函数

主程序模块: //int main()

双向循环链表处理模块:

//Status conversion(char str[],NodeList &oprh);

//int cmplinklen(NodeList opr1,NodeList opr2);

//Status Creat(NodeList &oprr,int len);

//int compare(NodeList opr1,NodeList opr2);

长整数四则运算模块:

//Status add_bas(NodeList opr1,NodeList opr2,NodeList &oprr);

//Status sub_bas(NodeList opr1,NodeList opr2,NodeList &oprr);

相关文档
最新文档