话说把这个程序搞懂,扩展用了我整整一天的时间(脑子比较笨)。这个来自The C Programming Language 中的4.3 中的例子
目标是编写一个具有加(+) 、减(-)、乘(*)、除(/)四则运算功能的计算器程序。为了更容易实现,我们在计算器中使用逆波兰表示法代替普通的中辍表示法
逆波兰表示法:
逆波兰表示法中,所有运算符都跟在操作数的后面。
比如,下列中缀表达式:(1 – 2) * (4 + 5)
采用逆波兰表示法表示为:1 2 - 4 5 + *
逆波兰表示法中不需要圆括号,只要知道每个运算符需要几个操作数就不会引起歧义。
计算器程序的实现如下:每个操作数都被依次压入到栈中;当一个运算符到达时,从栈中弹出相应数目的操作数(对二元运算符来说是两个操作数),把该运算符作用于弹出的操作数,并把运算结果再压入到栈中。例如,对上面的逆波兰表达式来说,首先把 1 和 2 压入到栈中,再用两者之差-1 取代它们;然后,将 4 和 5 压入到栈中,再用两者之和 9 取代它们。最后,从栈中取出栈顶的-1 和 9,并把它们的积-9 压入到栈顶。到达输入行的末尾时,把栈顶的值弹出并打印。
简单思路如下:
while (下一个运算符或操作数不是文件结束指示符)
if (是数)
将该数压入到栈中
else if (是运算符)
弹出所需数目的操作数
执行运算
将结果压入到栈中
else

本文介绍了使用C语言实现一个逆波兰表示法的计算器程序,该程序能够处理加、减、乘、除以及扩展功能如取模、三角函数等。通过栈来存储和运算操作数,详细讲解了程序的结构和各个部分的功能,包括主程序、栈操作、输入处理和获取字符的函数。此外,还提到了程序扩展的部分,如练习4-3至4-5的解决方案。
最低0.47元/天 解锁文章
278

被折叠的 条评论
为什么被折叠?



