表示式求值一定會出現表示式中運算子的優先順序問題。
運算規則:
先乘除,後加減;
從左算到右;
先括號內,後括號外;
運算子優先表:
上面**中有一些比較特殊的位置:
① 相等 = 左括號遇到右括號相等說明左右括號匹配。
① # 和 # 遇到的時候也是 = ,我們在表示式的左邊人為的加上乙個 # ,在表示式掃瞄完成之後再加上乙個 # 表示表示式掃瞄完了。
③ 上面****現的空白部分表示運算子遇到之後是毫無邏輯的,括號必須是相互匹配的,# 也必須是成對出現。
求表示式 4 + 2 * 3 - 10 / 5 的值。
計算順序為:
4 + 2 * 3 - 10 / 5 =
4 + 6 - 10 / 5 =
10 - 10 / 5
= 10 - 2
= 8上面的計算結果我們不去考慮,主要去考慮上面表示式運算的過程。
先定義乙個棧用來儲存運算元或結果:
定義另乙個棧來儲存運算子:
過程:讀入的運算子優先順序比運算子棧頂元素的優先順序高就入棧。
讀入的運算子優先順序比運算子棧頂元素的優先順序低就彈出棧頂元素,然後彈出兩個運算元進行計算,然後把計算結果入運算元或結果棧,然後繼續向後讀取進行判斷。
# 入運算子棧 , 4 入運算元或結果棧。
運算子棧頂 # < + , + 入運算子棧。
2 入運算元或結果棧。
棧頂 + < * , * 入運算子棧。
3 入運算元或結果棧。
棧頂 * > - , 運算子 * 出棧,運算元 2 3 出棧進行 * 運算。
運算的結果 6 入運算元或結果棧。
棧頂 + > - , 運算子 + 出棧,運算元 4 6 出棧進行 + 運算。
運算的結果 10 入運算元或結果棧。
運算子棧頂 # < - , - 入運算子棧。
10入運算元或結果棧。
運算子棧頂 - < / , / 入運算子棧。
5入運算元或結果棧。
運算子棧頂 / > # , 運算子 / 出棧,運算元 5 10 出棧進行 / 運算。
運算的結果 2 入運算元或結果棧。
運算子棧頂 - > # , 運算子 - 出棧,運算元 2 10 出棧進行 - 運算。
運算的結果 8 入運算元或結果棧。
運算子棧頂 # 遇到 # 相等,表示式求完。
運算元或結果棧中是資料元素就是表示式計算完成之後的結果。
c語言實現表示式求值
用c語言實現表示式求值演算法。要求從鍵盤輸入任意的包含加減乘除的算術四則運算表示式,都能求值。運算元型別可以設定為double。陣列棧進行操作 加減乘除和括號運算 include include include define max size 50double stacks max size cha...
C語言 用棧實現表示式求值 順序棧
棧的基本操作 優先順序函式 precede 求值函式 operate 判斷操作符函式 in 表示式求值函式 evaluateexpression 其他 操作符棧 optr 運算元棧 opnd 請輸入表示式 3 5 2 第一種輸入方式是直接打出表示式進行整體輸入,而第二種則是以乙個乙個的方式讀入,第一...
棧實現表示式求值(C
為了實現用棧計算算數表示式的值,需設定兩個工作棧 用於儲存運算子的棧opter,以及用於儲存運算元及中間結果的棧opval。演算法基本思想如下 1 首先將運算元棧opval設為空棧,而將 作為運算子棧opter的棧底元素,這樣的目的是判斷表示式是否求值完畢。2 依次讀入表示式的每個字元,表示式須以 ...