简单逆波兰计算器

                     话说把这个程序搞懂,扩展用了我整整一天的时间(脑子比较笨)。这个来自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 if (是换行符)
           弹出并打印栈顶的值
       else
             出错    
       


   由于程序相对较大,为了程序间的分明,体现程序的可扩展性。将整个程序分为main.c (主程序,负责调用),stack.c(负责对栈的操作),getop.c(负责 处理输入的命令的处理),getch.c(负责处理输入(包括缓冲输入)),cal.h(声明公共的变量和函数) 

  程序编译到calculator文件中:gcc -g main.c stack.c getop.c getch.c -o calculator -lm (注意链接数学库-lm)


<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值