C語言實現計算器 字尾表示式

2021-08-24 20:49:08 字數 2775 閱讀 7274

對於平時我們書寫的算術表示式是

12 * ( 3 + 4 ) - 6 + 8 / 2

這種習慣的寫法是中綴表示式

但是計算機一般執行方式是字尾表示式,從左向右依次執行

12 3 4 + * 6 - 8 2 / +

這就是字尾表示式

這個是如何轉換的呢

有兩種

1.根據樹的遍歷

2.利用棧

今天主要說的是利用棧的轉換

中綴表示式轉換為字尾表示式

1.建立棧

2.從左向右順序獲取中綴表示式

a.數字直接輸出

b.運算子

遇到』 ( 『直接入棧,遇到』 ) 『將棧中『 ( 『之後入棧的全部輸出,同時『 ( 『出棧但是不輸出。其他符號將符號棧中的元素依次出棧並輸出,直到遇到比當前符號優先順序更低的符號或者』 ( 『,將當前符號入棧。

3.獲取完後,將棧中剩餘的符號依次輸出

例如:12 * (3 + 4) - 6 + 8 / 2

依次獲取:

12 ,是數字,直接輸出

字尾表示式:12

符號棧:

』 * 』 ,是運算子,入棧

字尾表示式:12

符號棧:*

』 ( 『,左括號,直接入棧

字尾表示式:12

符號棧: * (

3 , 數字 ,輸出

字尾表示式:12 3

符號棧: * (

『 + 』,運算子 ,入棧

字尾表示式:12 3

符號棧: * ( +

4 ,數字,輸出

字尾表示式:12 3 4

符號棧: * ( +

『 )』,右括號,棧中元素依次出棧並輸出知道遇到左括號,並且左括號也要出棧且不輸出

字尾表示式:12 3 4 +

符號棧: *

『 - 』,操作符,減號的優先順序低於乘號所以乘號出棧並輸出,此時站內沒有符號,減號入棧

字尾表示式:12 3 4 + *

符號棧: -

6 ,數字,輸出

字尾表示式:12 3 4 + * 6

符號棧: -

』 + 『,操作符 ,優先順序與減號相同(也就是說沒有減號的優先順序高)所以減號出棧輸出,加號入棧

字尾表示式:12 3 4 + * 6 -

符號棧: +

8 ,數字 ,輸出

字尾表示式:12 3 4 + * 6 - 8

符號棧: +

『 / 』,操作符,比減號的優先順序高直接入棧

字尾表示式:12 3 4 + * 6 - 8

符號棧: + /

2 ,數字,輸出

字尾表示式:12 3 4 + * 6 - 8 2

符號棧: + /

中綴表示式獲取完後,將棧中剩餘元素依次出棧輸出

字尾表示式:12 3 4 + * 6 - 8 2 / +

符號棧:

以上就是中綴表示式轉字尾表示式

轉換了之後也要知道字尾表示式是怎麼計算的

還是要利用棧

最後的結果就是:82

下面是乙個關於字尾表示式計算的函式,可以參考:

結構體定義:

#define max 100

typedef

char datatype;

typedef

struct stack //棧

stack;

enum operate; //列舉

typedef

struct cell

cell;

主要函式:

void stackinit(stack* p) //棧的初始化

void stackpush(stack* p, datatype data) //入棧

else

}int stackpop(stack* p)//出棧

}int stacktop(stack* p)//取棧頂元素

return0;}

int calrpn(cell* rpn, int sz)//逆波蘭表示式(字尾表示式)

}return stacktop(&s);

}

測試:

void rpntest()

,,,,,,

,,,, };

int sz = sizeof(rpn) / sizeof(rpn[0]);

int ret = calrpn(rpn, sz);

printf("%d\n", ret);

}

計算字尾表示式 C語言實現

程式相對簡單易懂,執行程式,在命令列中輸入 123 注意 由於輸入字元,以 結束 輸出 5.000000 include include typedef struct stack 建立乙個棧,100為maxsize,define無法定義 void createstack stack s 棧頂指標 f...

計算器 字尾表示式

不過目前這個功能太少,而且能算的十分有限,測試輸入為 4 4 5 3 測試輸出為 4 4 5 3 27 主要就是了解一下怎麼把中綴表示式轉化成字尾表示式,然後再利用字尾表示式求值,我後續會完善這個程式,做個真正意義上的計算器。o o 轉化步驟我搜尋了一下,大致如下 將中綴表示式轉換為等價的字尾表示式...

計算器(表示式計算 字尾表示式實現)逆波蘭表示式

問題描述 從標準輸入中讀入乙個整數算術運算表示式,如24 1 2 36 6 2 2 12 2 2 計算表示式結果,並輸出。要求 1 表示式運算子只有 表示式末尾的 字元表示表示式輸入結束,表示式中可能會出現空格 2 表示式中會出現圓括號,括號可能巢狀,不會出現錯誤的表示式 3 出現除號 時,以整數相...