计算器中的数据处理

 三八妇女节 


最近整理文件时看到了后缀表达式,突然想起了几年前写的一个计算器的小程序。计算器实际上是通过获取我们输入的数字和运算符来进行计算的,同样的,它也是需要考虑到表达式里运算符的优先级的。当时的做法是把表达式里数据从优先级高到优先级低的部分依次计算出来,简单来讲就是先把括号里的部分计算出来,再去解决乘除,最后从左到右计算加减,最终求得整个表达式的结果。


计算器中的数据处理


如果说表达式里有多层括号去限制优先级的话,可以使用递归的方式去处理。但感觉还是使用后缀表达式去处理比较方便,先和大家分享一下如何使用后缀表达式去处理一般的表达式。此处用最基础的加减乘除举例(python)。

 后缀表达式


什么是后缀表达式,像我们平时常见的算式中运算符在数字中间的是中缀表达式。例如:9 + 3 ∗ (5 + 4/2) – 6。后缀则是将运算符放在两个数的后面,例如前面的中缀表达式转换成后缀:9 3 5 4 2 / + * + 6 -。在转化后括号已经处理完毕,后缀表达式在计算的过程中,借助栈,从左到右依次获取数据,直到出现运算符,把运算符之前的两个数据根据本运算符进行计算,把这个两个数据删除后用计算的结果代替它俩原本的位置。

例如运算符“/”前的两个数据4 2

4/2=2–>9 3 5 [2] + * + 6 –

运算符“+”前的两个数据5 2

5+2=7—>9 3 7 * + 6 –

运算符“*”前的两个数据3 7

3*7=21—>9 21 + 6 –

运算符“+”前的两个数据9 21

9+21=30—>30 6 –

运算符“-”前的两个数据30 6

30-6=24—>24

最终结果为24

中缀表达式转后缀表达式


那中缀表达式如何转化成后缀表达式呢?需要借助栈共同实现,这里用列表代替处理,列表l1用于存储后缀表达式,列表l2用于处理运算符。获取的表达式是字符串,需要先对字符串进行处理。同时也要设定运算符的优先级。


计算器中的数据处理


以上为对字符串表达式的处理,及转换为后缀表达式,后续会返回处理好的后缀表达式列表l1.

后缀表达式的计算


有了处理好的后缀表达式计算起来就比较方便,同样需要一个数组step作为转换区间去处理后缀表达式的数据。从左到右依次获取l1中的数据或运算符,如果是数字的话直接填入step,为运算符的则获取运算符前的两个数据,具体的思路在什么是后缀表达式那里已经说的比较清楚。实现的过程需要注意在step中删除或填入数据。代码如下:

计算器中的数据处理


这里放出所有的代码,供各位同学一同参考,有兴趣可以试一试自己增加点其它运算符稍微练习一下。


计算器中的数据处理


计算器中的数据处理


如果有兴趣,可以自主了解一下与后缀表达式相对应的前缀表达式,计算方式也较为类似。这里就不再赘述了。


零基础程序语言入门班

零基础程序语言入门班详情介绍


学员要求

对编程有兴趣,零基础的孩子。


上课时间

每周日下午2-5点


上课地点

福田区


师资介绍

何老师,计算机专业硕士保送生,现役ACM-ICPC队员,今年获得ICPC银川站金牌,CCPC银牌,EC铜牌以及邀请赛金牌。何老师不仅参赛成绩斐然,在教学上也有丰富经验,曾担任2019年CSP-S提高组集训班老师,以及数据结构专题班老师,教学细致耐心。


课表详情:

计算器中的数据处理



详情可扫描二维码联系余老师咨询了解

计算器中的数据处理

毕莘教育咨询(深圳)有限公司围绕信息学竞赛普及组、提高组、省赛、国赛进行培训,同时提供与信息学相关的高校自主招生政策咨询。教研团队由国内顶校师资构成,深圳本地教学团队由来自清华、北大等顶尖名校的硕士、博士研究生及NOI、ACM- ICPC退役选手组成。自成立已开展多次培训,服务学生数百人次。

原创文章,作者:深圳信息学_中小学编程_编程培训_信息学竞赛_毕莘教育咨询(深圳)有限公司,如若转载,请注明出处:深圳信息学_中小学编程_编程培训_信息学竞赛_毕莘教育咨询(深圳)有限公司

联系我们

教务老师:余老师
联系电话(微信同号):14774755240
在线咨询:点击QQ在线咨询

QR code