编程语言
C++
问题描述
实验目的
熟悉C++的语法,掌握栈的运算及应用,了解对算法的健壮性要求。
实验内容
- 实现计算器类中lp、rp和operate函数
- 完善计算器类evaluate函数,增加对输入的合法性检查,包括滤掉所有非法输入及处理左右括号不配对的输入
- 编制应用程序测试这个计算器
程序设计
程序要求
利用栈原理,设计一个可以计算所输入表达式的程序,要求可以计算正数,负数,小数的加减乘除运算和括号运算,以#结束输入。
程序功能
对输入的式子进行判断式子格式是否正确。若正确,进行运算并输出最终结果;若错误,提示报错。
算法分析
用栈实现计算器,主要思路就是设置一个符号栈和一个数字栈用于存储数字和字符。输入字符串时在字符串尾部加一个“#”以示输入结束。然后扫描字符串,如果扫描结果是数字就进入数字栈。如果是运算符号要判断符号优先级,若栈外符号优先级大于栈内符号优先级则进栈;若小于栈内优先级,则符号栈出栈一位,数字栈出栈两位进行计算,结果重新进入数字栈,直到栈外优先级大于栈内。
测试用例
用如下表达式进行测试:
(56-23)/8-4# 期望结果:0.125
34+p(u89-12.3)k/3# 期望结果:59.5667
89.5*749+25)# 期望结果:输入有误
(8*(7-4)# 期望结果:输入有误
65*(72+98)(70-45) # 期望结果:输入有误
6*# 期望结果:输入有误
)5+3(# 期望结果:输入有误