🧮 RPN 计算器使用手册

逆波兰表示法计算器 - 功能完整版

版本 v1.0 | C++11 实现

1. 项目概述

这是一个功能完整的逆波兰表示法(Reverse Polish Notation, RPN)计算器,使用C++编写。RPN是一种无需括号的数学表达式表示方法,操作符位于操作数之后。

🎯 主要特性:
  • ✅ 支持基本四则运算
  • ✅ 支持高级数学函数(平方根、幂运算、三角函数)
  • ✅ 特殊功能:斐波那契数列、杨辉三角
  • ✅ 完善的错误处理机制
  • ✅ 计算历史记录
  • ✅ 交互式命令行界面

什么是RPN?

在逆波兰表示法中,运算符跟在操作数后面。例如:

中缀表达式 RPN表达式 结果
5 + 3 5 3 + 8
(5 + 3) * 2 5 3 + 2 * 16
15 / (7 - 5) 15 7 5 - / 7.5
💡 计算过程示例:
对于表达式 5 3 + 2 *
  1. 将 5 压入栈 → 栈: [5]
  2. 将 3 压入栈 → 栈: [5, 3]
  3. 遇到 +,弹出 3 和 5,计算 5+3=8,将 8 压入栈 → 栈: [8]
  4. 将 2 压入栈 → 栈: [8, 2]
  5. 遇到 *,弹出 2 和 8,计算 8*2=16,将 16 压入栈 → 栈: [16]
  6. 最终结果: 16

2. 安装和编译指南

系统要求

Linux/Ubuntu 编译步骤

# 进入项目目录
cd ~/Work/rpn_calc

# 编译源代码
g++ rpn_calc.cpp -o rpn_calc -std=c++11

# 运行程序
./rpn_calc

编译选项说明

选项 说明
-std=c++11 使用C++11标准
-o rpn_calc 指定输出文件名
-O2 (可选) 开启优化

3. 基本使用

启动程序

./rpn_calc

运行后会看到欢迎界面:

==================================
    C++ RPN 计算器 v1.0
==================================
输入表达式 (例: '5 5 +'), 或 'help' 查看帮助, 'q' 退出.
>
✅ 快速上手示例:
> 5 5 +
结果: 10.000000

> 1 2 + 3 + 7 7 * +
结果: 55.000000

4. 支持的操作

基本算术运算

操作符 说明 示例 结果
+ 加法 5 3 + 8
- 减法 10 3 - 7
* 乘法 4 5 * 20
/ 除法 20 4 / 5

高级数学函数

操作符 说明 示例 结果
sqrt 平方根 16 sqrt 4
pow 幂运算 2 10 pow 1024
sin 正弦(弧度) 1.5708 sin 1.0
cos 余弦(弧度) 0 cos 1.0
tan 正切(弧度) 0.7854 tan 1.0

特殊操作符 高级功能

斐波那契数列 (fib)

计算斐波那契数列的第n项(从0开始)。

使用方法: n fib
> 10 fib
结果: 55.000000

> 15 fib
结果: 610.000000

斐波那契数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...

杨辉三角 (pascal)

计算杨辉三角(帕斯卡三角形)中第n行第k列的值,即组合数C(n,k)。

使用方法: n k pascal
> 5 2 pascal
结果: 10.000000

> 10 5 pascal
结果: 252.000000

杨辉三角示例:

        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 4 1
   1 5 10 10 5 1

C(5,2) = 10 表示第5行第2列的值

栈操作命令

命令 说明
display 显示当前栈内容
clear 清空栈

其他命令

命令 说明
helph 显示帮助信息
history 显示计算历史
q, quit, exit 退出程序

5. 详细使用示例

示例1: 四则运算组合

> 15 7 1 1 + - / 3 * 2 1 1 + + -
结果: 5.000000
计算过程:
  • 15 7 1 1 + - / → 15 / (7-(1+1)) = 15 / 5 = 3
  • 3 3 * → 9
  • 2 1 1 + + → 4
  • 9 4 - → 5

示例2: 使用三角函数

> 3.14159 2 / sin
结果: 1.000000

> 0 cos
结果: 1.000000

示例3: 幂运算

> 2 8 pow
结果: 256.000000

> 5 3 pow
结果: 125.000000

示例4: 斐波那契数列计算

> 20 fib
结果: 6765.000000

> 0 fib
结果: 0.000000

> 1 fib
结果: 1.000000

示例5: 杨辉三角计算

> 10 3 pascal
结果: 120.000000

> 6 3 pascal
结果: 20.000000

示例6: 使用栈操作

> 5 3 display
当前栈内容 (栈顶 -> 栈底): 3 5

> + display
当前栈内容 (栈顶 -> 栈底): 8

> clear
栈已清空

6. 错误处理

错误代码和说明

错误类型 错误信息 原因 解决方法
栈空错误 错误: 栈为空 操作数不足 确保有足够的操作数
除零错误 错误: 除数不能为零 除法运算中除数为0 避免除以零
格式错误 错误: 未知操作符 输入了不支持的操作符 检查拼写和支持的操作符列表
负数开方 错误: 负数没有实数平方根 对负数求平方根 使用非负数
参数错误 错误: 斐波那契数列索引必须非负 fib操作的参数为负数 使用非负整数
参数错误 错误: 杨辉三角参数无效 pascal操作的参数不合法 确保 0 ≤ k ≤ n

错误示例

> 5 0 /
错误: 除数不能为零

> +
错误: 栈为空

> 5 abc
错误: 未知操作符 'abc'

> -16 sqrt
错误: 负数没有实数平方根

> -5 fib
错误: 斐波那契数列索引必须非负

7. 进阶技巧

1. 批量计算

可以在一行中输入多个完整的计算:

> 5 5 + 10 10 + *
结果: 200.000000

2. 使用历史记录

> 5 3 +
结果: 8.000000

> 10 2 *
结果: 20.000000

> history
=== 计算历史 ===
1. 5 3 + = 8.000000
2. 10 2 * = 20.000000

3. 组合高级功能

计算斐波那契数列的平方:

> 10 fib 2 pow
结果: 3025.000000

计算组合数的和:

> 5 2 pascal 5 3 pascal +
结果: 20.000000

最佳实践

  1. 从简单开始:先测试基本的加减乘除,熟悉RPN语法
  2. 使用display命令:在复杂计算中使用 display 查看栈状态
  3. 分步计算:将复杂表达式分解成多个简单步骤
  4. 检查输入:确保每个操作符有足够的操作数
  5. 使用clear:出错后使用 clear 清空栈重新开始

8. 常见问题

Q: 为什么我的结果是小数而不是整数?

A: 计算器内部使用双精度浮点数(double),所有结果都显示为浮点格式。

Q: 如何输入负数?

A: 直接输入负号和数字,如 -5 3 +

Q: 三角函数使用什么单位?

A: 所有三角函数使用弧度作为输入单位。90度 = π/2 ≈ 1.5708 弧度

Q: fib和pascal操作符有什么实际用途?

A:

Q: 计算器支持的最大数字是多少?

A: 受限于double类型,约为 ±1.7 × 10308


技术细节

实现原理

性能特点

版本更新日志

v1.0 (2025-09)
  • ✅ 实现基本四则运算
  • ✅ 实现高级数学函数(sqrt, pow, sin, cos, tan)
  • ✅ 新增斐波那契数列计算 (fib操作符)
  • ✅ 新增杨辉三角计算 (pascal操作符)
  • ✅ 完善错误处理机制
  • ✅ 添加计算历史记录功能
  • ✅ 优化用户界面和帮助信息