基於棧的中綴算術表示式求值

2021-10-02 04:08:57 字數 1461 閱讀 9069

【實驗目的】

1.掌握棧的基本操作演算法的實現,包括棧初始化、進棧、出棧、取棧頂元素等。

2.掌握利用棧實現中綴表示式求值的演算法。

【實驗內容】

問題描述

輸入乙個中綴算術表示式,求解表示式的值。運算子包括「+」、「-」、「」、「/」、「(「 、「)」、「=」,參加運算的數為 double型別且為正數。(要求:直接使用中綴算術表示式進行計算,不能轉換為字尾或字首表示式再進行計算,只考慮二元運算即可。)

輸入要求

多組資料,每組資料一行,對應乙個算術表示式,每個表示式均以「=」結尾。當表示式只有乙個「=」時,輸入結東。參加運算的數為 double型別。

輸出要求

對於每組資料輸出1行,為表示式的運算結果。輸出保留兩位小數。

輸入樣例

2+2=

20(4.5-3)=

輸出樣例

4.00

30.00

【實驗提示】

此實驗內容即為教材演算法3.4的擴充套件內容,演算法3.4只考慮個位數的運算,不具備拼數功能。拼數功能可以手工編寫,也可以借助c語言的庫函式atof()函式來完成,其功能是將字串轉換為雙精度浮點數( double)。

#include

#include

#include

#include

#include

#include

using

namespace std;

intpre

(char c)

//優先順序判斷

void

calculate

(stack<

double

>

&num,stack<

char

>

&op)

//運算

op.pop();

}int

main()

else

//字元是操作符

else

if(op.

empty()

||pre

(s[i]

)>

pre(op.

top())

)//優先順序大於棧頂,或棧為空時,直接進棧

op.push

(s[i]);

elseif(

!op.

empty()

&&pre

(s[i]

)<=

pre(op.

top())

)//是優先順序不大於棧頂的操作符,且棧不空,先進行運算操作}}

printf

("%.2lf\n"

,num.

top())

;//輸出結果

num.

pop();

op.pop();

//清空棧

}return0;

}

基於棧的中綴算術表示式求值

include include include include using namespace std typedef struct stacknode lstack 兩個棧,乙個是字元,乙個是數字,先判斷是什麼字元,然後呼叫不同的函式 typedef struct data struct stac...

算術中綴表示式求值(棧實現)

問題描述 輸入由整型分量和操作符組成的中綴表示式,輸出其字尾表示式和運算的結果。整型分量 十進位制數。操作符 如輸入3 5 8 2 7,輸出 3 5 8 2 7 結果是10 輸入3 1 4 7 3 輸出 3 1 4 7 3 結果是 18.75 輸入3 4 5 5 7 4,輸出 3 4 5 5 7 4...

基於棧的字尾算術表示式求值

這是乙個菜雞的19秋季學期資料結構實驗課 基於棧的字尾算術表示式求值 實驗目的 1.掌握中綴表示式轉換為字尾表示式的演算法。2.掌握字尾表示式求值的演算法。實驗內容 問題描述 輸入乙個中綴算術表示式,將其轉換為字尾表示式,然後對字尾表示式進行求值。運算子包括 參與運算的為小於10的自然數 只考慮二元...