|
第二轮前一天晚上写的,难免疏漏,敬请谅解。本文中除非特殊说明,否则每个数字为单独的数。
0.基本概念
要想了解前后缀表达式是什么,首先我们要观察以下日常中的表达式:
例:1+2*3+8/4
其中2*3中的"*"(即乘号)是放在两个用于计算的数字中间的,故这种表达式称作中缀表达式。
以此类推,前缀表达式就是将运算符号(+,-,*,÷)放在两个用于计算的数前面
例如: +1*23
这就是1+2*3的前缀形式。
同理,后缀表达式就是将运算符号(+,-,*,÷)放在两个用于计算的数后面
例如: 123*+
这就是1+2*3的后缀形式。
1.转化与运算
首先是转化,从中缀表达式(即“正常“的式子)转到其他表达式相对简单,按照运算顺序依次将运算符放到应该在的位置。
没看懂?看个例子就直到了,将式子转化为前缀
原式(中缀):1+2*3+4/5
step1:1+*23+/45
由于乘除法先运算,并且需要转化至前缀,所以将运算符号放在前面(eg:2*3->*23)
step2:+1(*23)+(/45)
现在只剩下加法,从左往右运算,这里我们将已经转化好的小式子看作整体(打了括号),所以要运算1+(2*3),把加号放在前面
step3:+(+1*23)/45
基本同理,把另一个还没转化的+号放在了前面,此时括号内可以视作一个用于计算的数
去掉括号,得出答案:++1*23/45
从前后缀转中缀也是同理,只不过是把原先在前后的运算符号放在中间,就不多赘述了。
其次是运算,也很简单,这里也拿前缀举例子。后缀同理
在前缀表达式中,我们要找到后面紧跟两个数(在运算后期可能是已计算过的表达式)的运算符号,例如+12
然后将运算符号放回到中间,+12就变成了1+2,这样就可以计算出这个表达式的值了,也就是3.
和转化同理,千万不可跨级运算。
举个题目的例子:++1*23/54
step1:++1(2*3)(5/4)
观察发现*和/后面各有两个紧邻的数,将符号移到中间,便有了2*3与5/4(5除以4)
将括号内运算一下,得到++16(1.25)<--此括号内为一个小数(做题时也可以用这种方法,尤其是遇到两位数,小数时,打括号以区分)
step2:+(1+6)(1.25)
几乎同理,把+16变成1+6,式子变为+7(1.25)
step3:7+1.25
一样的,不解释,得出答案为8.25。
2.温馨提示
ACSL中一个上箭头(↑)代表次方,有时也可能是^,这种运算的优先级自然是最高的(一般来说)
大部分题目中都可能算出两位数,可以打一个括号,和单独的数区分开来。eg:12(34)5,代表1,2,三十四,5
英语中prefix为前缀,infix为中缀,postfix为后缀
3.题目
ACSL的出题就两种,一种是求表达式的值,另一种是转换表达式,这两种之前都提到过了。
真题找不到了,过段时间再找找
|
|