引言:计算器 abacus 2 完成几个月了,越来越不满足于 abacus 的结构逻辑,总觉得好多地方不够完美,早就有全部重写的打算,苦于工作繁忙,一直没有机会,趁着清明节小假的机会,准备把 abacus 3 的设计给做了。
1.简介
abacus 3 是一个小型简易计算器,可以用它作为计算机上的日常计算器使用,比系统自带计算器强大得多,比如它支持用户自定义运算符或者函数,支持使用变量和符号常量等。
2.总体描述
2.1 产品目标
abacus 3 的目标是打造一个日常使用的计算器,用于代替系统自带计算器,并提供更多实用的数学功能。
2.2 产品功能
abacus 3 需要具备如下功能:
- 支持四则混合运算
- 支持常用数学函数
- 支持符号常量
- 支持用户自定义变量并参与运算
- 支持用户自定义运算符与函数
3.1 界面需求
abacus 3 暂不使用 GUI 界面,以命令行的方式运行程序。程序启动后,用户逐条输入计算命令,并等待计算器输出结果。
3.2 功能需求
- 支持四则混合运算,详细的运算符列表见下表,还需支持表达式的嵌套,嵌套括号限定为小括号,但允许任意层嵌套。
运算符形式 | 功能描述 |
x + y | 求 x 与 y 的和 |
x - y | 求 x 减去 y 的差 |
x * y | 求 x 与 y 的积 |
x / y | 求 x 除以 y 的商 |
x % y | 求 x 除以 y 的余数 |
- x | 求 x 的相反数 |
x ^ y | 求 x 的 y 次方 |
x! | 求 x 的阶乘 |
x!! | 求 x 的双阶乘 |
- 支持常用数学函数,需要支持三角函数、指对函数等常用的数学函数,函数的详细列表见下表。
函数形式 | 功能描述 |
abs(x) | 求 x 的绝对值 |
pow(x, y) | 求 x 的 y 次方 |
pow10(x) | 求 10 的 x 次方 |
exp(x) | 求 e 的 x 次方,e 是自然对数的底数 |
log(x, y) | 求 x 的以 y 为底的对数 |
log10(x) | 求 x 的以 10 为底的对数 |
ln(x) | 求 x 的以 e 为底的对数,e 是自然对数的底数 |
sqrt(x) | 求 x 的算术平方根 |
sin(x) | 求 x 的正弦,x 采用弧度制 |
cos(x) | 求 x 的余弦,x 采用弧度制 |
tan(x) | 求 x 的正切,x 采用弧度制 |
arcsin(x) | 求 x 的反正弦 |
arccos(x) | 求 x 的反余弦 |
arctan(x) | 求 x 的反正切 |
sinh(x) | 求 x 的双曲正弦 |
cosh(x) | 求 x 的双曲余弦 |
tanh(x) | 求 x 的双曲正切 |
max(x1, x2, ..., xn) | 求 x1, x2, ..., xn 中的最大值 |
min(x1, x2, ..., xn) | 求 x1, x2, ..., xn 中的最小值 |
ceil(x) | 求不小于 x 的最小整数 |
floor(x) | 求不大于 x 的最大整数 |
- 支持符号常量,在表达式中可以使用圆周率、自然对数的底数等符号常量,例如求半径为 2.3 的圆的面积可以输入表达式 PI * 2.3 * 2.3,用户可以定义自己的符号常量并永久保存并使用,计算器内置符号常量列表如下:
标识符 | 描述 | 值 |
PI | 圆周率 | 3.141592654 |
E | 自然对数的底数 | 2.718281828 |
- 支持用户自定义变量并参与运算,要求如下:
- 变量的名称中只能包含字母和数字,并且必须以字母开头
- 允许一次定义多个变量
- 定义变量的时候可以指定值也可以不指定
- 需有变量赋值的功能
- 如果使用未经赋值的变量参与运算,程序应当给出出错提示
- 允许用户定义符号常量并永久存储使用
- 支持用户自定义运算符与函数,要求如下:
- 函数名称只能包含字母和数字,并且必须以字母开头
- 允许一次定义多个运算符或函数,运算符需指定优先级
- 定义运算符或函数时必须指定完成计算的表达式
- 自定义的运算符或函数不得与内置运算符或函数同名冲突
- 提供自定义运算符或函数的永久存储使用
3.3 非功能需求
- 程序应该跨平台
- 运算响应速度应得到保证
- 应具有简短易理解的错误提示