大整数计算器..

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

目录

一.问题的概述、分析及研究意义;二.流程图

三.算法设计

四.调试过程

五.源程序

一.问题的概述、分析及研究意义;设计一个计算器实现两个任意长得整数的加、减、乘、除。对数值很大,精度很高的数进行高精度大整数计算是一类十分常见的问题,但由于C语言中数据长度和范围受数据类型的限制,普通数学计算很难实现此问题,为尝试解决这个问题,专门设计一个C语言程序用于大整数的计算。

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

本程序实现计算任意长的整数的四则运算. 以用户和计算机对话的

方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。本演示程序中,数字字符限定为[‘0’~‘9’]和字符‘,’,输入字符可以任意长,输入形式以“回车符”为结束标志,串中字符顺序不限,且允许出现重复字符。利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理,但不使用分隔

符也不影响结果。二.流程图

三.算法设计

1.定义全局变量

#define LEN sizeof(struct Node)

#define MAX 1000

#define OK 1

#define ERROR 0

#define OVERFLOW -1

#define TRUE 1

#define FALSE 0

typedef int Status;

2,主要函数

(1)主程序模块:

//int main()

(2)双向循环链表处理模块:

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

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

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

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

(3)长整数四则运算模块:

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

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

//Status imul(NodeList opr1,NodeList opr2,NodeList &oprr);//Status idiv(NodeList opr1,NodeList opr2,NodeList &quti,NodeList &remand);

(4)界面模块:

//void title();

//void welcome();

3,编写函数

(1)函数:Status conversion(char str[],NodeList &oprh) 功能:将字符串形式的操作数转换成所需的类型(2)函数:Status input(NodeList &opr1,NodeList &opr2,char str[])

功能:输入需要的操作数

(3)函数:Status output(NodeList oprr,char str[])

功能:输出需要的操作数以及判断其正确性

(4)函数:Status initbuf(char str[])

功能:为数据对象或变量赋初值

(5)函数:int cmplinklen(NodeList opr1,NodeList opr2) 功能:比较两个输入数的大小,长返回1,短返回-1,否则返回0

(6)函数:int length(NodeList oprr)

功能:求出链表长度

(7)函数:Status Creat(NodeList &oprr,int len)

功能:生成一个指定链表

(8)函数:int compare(NodeList opr1,NodeList opr2) 功能:比较两个数的绝对值的大小

(9)函数:Status add_bas(NodeList opr1,NodeList opr2,NodeList &oprr)

功能:实现两个数相加

(10)函数:Status sub_bas(NodeList opr1,NodeList opr2,NodeList &oprr)

功能:实现两个数的相减

(11)函数:Status imul(NodeList opr1,NodeList opr2,NodeList &oprr)

功能:实现两个数的相乘

(12)函数:Status idiv(NodeList opr1,NodeList opr2,NodeList &quti,NodeList &remand)

功能:实现两个数的除法

四.调试过程

运行平台:Microsoft Visual C++ 6.0 1,欢迎界面

2,选择操作

3,加法运算

4,减法运算

5,乘法运算

6,除法运算

8,结束运行

五.源程序

#include

#include

#include

#define LEN sizeof(struct Node)

#define MAX 1000

#define OK 1

#define ERROR 0

#define OVERFLOW -1

#define TRUE 1

#define FALSE 0

typedef int Status;//自定义一个变量

typedef struct Node

{

int data;

struct Node *prior,*next;

}Node,*NodeList;//定义双向循环链表结构体

//===============输入模块=============== //求指数函数值

int axp(int a,int k)

{

int r=1;

if(k==0)

return 1;

for(;k>0;k--)

r=r*a;

return r;

}

//输入转换函数

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

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

int i,k,buffer;

k=buffer=0;

oprh=(NodeList)malloc(LEN);

oprh->next=oprh;

oprh->prior=oprh;

相关文档
最新文档