C++实现 20位有效数字加减乘除运算

2.整体架构
2.1架构图
在这里插入图片描述

图2.1计算机架构图

此计算器架构一共分为三层,显示层,数据转换层,计算层。
显示层包含输入模块和输出模块,用于与用户交互。数据转换层包含数据转换模块,用于对输入合法数据的预处理,和计算结束的后处理。 计算层包含算法模块和辅助处理模块,方便计算的复用和抽象拓展。
显示层向数据转换层传递的合法输入字符串并接收数据转换层传递而来计算结果结构体。计算层接收数据转换层传递而来的合法数据结构体并将计算结果结构体传递给数据转换层。
2.2模块设计
1.输入模块
获取用户输入的字符串,判断数字,运算符是否合法。如果不合法进行提示并重新输入;如果合法则将数据传给数据转换模块。
2.输出模块
接收到结果字符串,根据字符串长度与应取有效位数,确定显示方式。
3.数据转换模块
将输入模块传递而来的合法字符串转为合法结构体输出给算法模块;将算法模块传递而来的结果结构体,转换为结果字符串,传给输出模块。
4.算法模块
接收结构体,根据接收到的运算符,进行相应计算。根据计算需求,调用辅助模块对结构体进行预处理或后处理。输出结果结构体。
5.辅助处理模块
接收数据结构体,进行分割或者取50位数字精度,返回算法模块。
2.3流程设计
1.输入模块获取用户输入的字符串进行判断,如不合法进行提示并需要重新输入;合法则将字符串传递据转换模块。
2.数据转换模块将合法字符串转换为结构体,将转换后的结构体传递给算法模块。
3.算法模块开始计算,当结构体中数字字符串需要分割,或者需要取得50位的计算结果时,将结构体传递给辅助处理模块。
4.辅助处理模块将数据处理结束后,返回处理后的结构体。
5.算法模块继续计算,结束后得到计算结果结构体,传给数据转换模块。
6.数据转换模块将计算结果结构体转换为计算结果字符串并传给输出模块。
7.输出模块判断结果字符串,根据字符串有效位数来判断显示方式。

3.模块分解
3.1程序中所用结构体
struct bigNum
{
string num; //有效位字符串
int digit; //偏移量
int minus; //符号位(0为正,1为负)
};
以科学计数法形式记录数据,用于存储计算数据和加减乘除计算。
例:12.45 -->{
Num = “1245”;
Digit = 1;
Minus = 0;
}

3.2输入功能模块
3.2.1概述及流程图
在这里插入图片描述

图3.2.1 输入模块流程图

获取用户输入的字符串后,判断用户输入的字符串是否合法,若不合法,进行提示并重新输入;若合法将输入的字符串保存,然后进行下一个字符串的输入。直到用户成功输入三次合法字符串,输入结束。

输入模块
功能 获取用户输入数据,判断输入内容是否合法,若不合法,进行提示并重新输入;若合法输入模块输出合法字符串。
输入 由用户输入的两个计算数据及运算符
输出 用于计算的合法字符串及运算符

3.2.2模块相关函数
(1)运行计算器函数(接口函数)

在这里插入图片描述

图3.2.2(1) 运行计算器流程图

用户调用运行运行计算器函数后,获取用户输入的字符串,判断用户输入的字符串是否合法若不合法则重新输入。若合法,则继续运行。其次判断是否成功输入3次,若没有成功则返回重新输入。成功后,调用转结构体函数,将用户输入的两个计算数据字符串转换为结构体,然后调用计算函数获取结果结构体,再然后调用转字符串函数将结果结构体转为字符串,最后调用显示函数显示最终结果。

运行计算器函数
函数 bool runCalculator()
功能 获取用户输入的字符串,并调用相关函数进行运算,输出结果。
输入 无
输出 显示结果字符串

(2)判断字符串函数

在这里插入图片描述

图3.2.2 判断字符串流程图

将用户输入的字符串作为参数传入函数,判断字符串是否非法(长度是否超过50或者为空),若非法提示错误并返回false,合法则继续运行。
判断需要判断字符串类型,若字符串为运算符则判断运算符是否非法(是否为‘+’,‘-’,‘*’,‘/’中字符)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值