国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

c#數學表示法(后綴表示法)詳解

2020-01-24 02:55:56
字體:
來源:轉載
供稿:網友

在筆試中有這么一道題目,寫出一個表達式的后綴表示形式,當時就迷茫了,什么是后綴表達式,還真沒聽過。后來查了下原來是一種比較特殊的數學表達式,因為在日常生活中用的不多,不太了解。有三種表達式:前綴表達式、中綴表達式和后綴表達式。一般用的是中綴,比如1+1,前后綴就是把操作符移到前面和后面,下面我就來介紹一下這三種表達式。

1.前綴表示法

前綴表示法又叫波蘭表示法,他的操作符置于操作數的前面(例:+ 1 2),是波蘭數學家揚?武卡謝維奇1920年代引入的,用于簡化命題邏輯。因為我們一般認為操作符是在操作數中間的,所以在日常生活中用的不多,但在計算機科學領域占有一席之地。一般的表示法對計算機來說處理很麻煩,每個符號都要考慮優先級,還有括號這種會打亂優先級的存在,將使計算機花費大量的資源進行解析。而前綴表示法沒有優先級的概念,他是按順序處理的。
舉個例子:9-2*3這個式子,計算機需要先分析優先級,先乘后減,找到2*3,再進行減操作;化成前綴表示法就是:- 9 * 2 3,計算機可以依次讀取,操作符作用于后一個操作數,遇到減就是讓9減去后面的數,而跟著9的是乘,也就是說讓9減去乘的結果,這對計算機來說很簡單,按順序來就行了。
再看一個復雜點的前綴表達式:

復制代碼 代碼如下:

- * / 15 - 7 + 1 1 3 + 2 + 1 1
- * / 15 - 7   2   3 + 2 + 1 1
- * / 15     5     3 + 2 + 1 1
- *        3       3 + 2 + 1 1
-          9         + 2 + 1 1
-          9         + 2   2 
-          9         4       
                5

這是一個前綴表達式的計算過程,可以看出每次只需計算第一個滿足操作符后跟兩個操作數的式子,直到最后就是結果了。

2.中綴表示法

這也就是我們一般的表示法,他的操作符置于操作數的中間(例:1 + 2),前面也說過這種方法不容易被計算機解析,但他符合人們的普遍用法,許多編程語言也就用這種方法了。在中綴表示法中括號是必須有的,要不然運算順序會亂掉。因為很常用我也就不多講了。

3.后綴表示法

后綴表示法又叫逆波蘭表示法,他的操作符置于操作數的后面(例:1 2 +),他和前綴表示法都對計算機比較友好,但他很容易用堆棧解析,所以在計算機中用的很多。他的解釋過程一般是:操作數入棧;遇到操作符時,操作數出棧,求值,將結果入棧;當一遍后,棧頂就是表達式的值。因此逆波蘭表達式的求值使用堆棧結構很容易實現,和能很快求值。
注意:逆波蘭記法并不是簡單的波蘭表達式的反轉。因為對于不滿足交換律的操作符,它的操作數寫法仍然是常規順序,如,波蘭記法“/ 6 3”的逆波蘭記法是“6 3 /”而不是“3 6 /”;數字的數位寫法也是常規順序。
為了更好的了解前綴表達式的計算過程,舉個例子:5 1 2 + 4 * + 3 -,計算過程如下

復制代碼 代碼如下:

棧空間     //解釋說明
5
5 1
5 1 2
5 3       //遇到+,1和2出棧,得3,入棧
5 3 4
5 12      //遇到*,3和4出棧,得12,入棧
17        //遇到+,5和12出棧,得17,入棧
17 3
14        //遇到-,17和3出棧,得14,入棧

最后在棧里只有一個操作數,這就是計算結果。由此我們可以看出用堆棧是很容易解析后綴表達式的。

4.表示法間轉化

這里介紹一種簡單的中綴表達式轉化前后綴表達式的方法,比如這個式子:a+b*c-(d+e)。
1.按照運算符的優先級對所有的運算單位加括號
式子變成:((a+(b*c))-(d+e))。
2.1.前綴表達式,把運算符號移動到對應的括號前面
式子變成:-( +(a *(bc)) +(de))
去掉括號:-+a*bc+de
2.2.后綴表達式,把運算符號移動到對應的括號后面
式子變成:((a(bc)* )+ (de)+ )-
去掉括號:abc*+de+-

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江口县| 缙云县| 涞源县| 南汇区| 通辽市| 乐山市| 浦北县| 宁南县| 岳池县| 那曲县| 湖北省| 巨野县| 海伦市| 自治县| 金寨县| 贞丰县| 武乡县| 平安县| 修武县| 广安市| 马山县| 宁强县| 江源县| 周至县| 成安县| 承德市| 阜康市| 红河县| 宜宾县| 隆回县| 兰州市| 天镇县| 台东市| 耒阳市| 依安县| 古交市| 康平县| 鸡西市| 景宁| 江永县| 紫金县|