字首表示式:從後往前掃,遇到運算元入棧、遇到字元時取兩棧頂元素進行相應運算後結果入棧。
字尾表示式:與上類似,只是是從前往後掃。
求字首表示式的值 (25 分)
算術表示式有字首表示法、中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2+3*(7-4)+8/4
的字首表示式是:+ + 2 * 3 - 7 4 / 8 4
。請設計程式計算字首表示式的結果值。
輸入在一行內給出不超過30個字元的字首表示式,只包含+
、-
、*
、/
以及運算數,不同物件(運算數、運算符號)之間以空格分隔。
輸出字首表示式的運算結果,保留小數點後1位,或錯誤資訊error
。
+ + 2 * 3 - 7 4 / 8 4
13.0
ac**:
字尾式求值 (25 分)#includeusing namespace std;
double op(double a,double b,char op)
int main()
s.push(op(a,b,prefixexp[i]));
i--;
}elsewhile(i>=0&&prefixexp[i]!=' ');
s.push(stod(digitexp));}}
if(s.size()==1) printf("%.1f",s.top());
else printf("error");
return 0;
}
我們人類習慣於書寫「中綴式」,如3 + 5 * 2
,其值為13
。 (p.s. 為什麼人類習慣中綴式呢?是因為中綴式比字尾式好用麼?)
而計算機更加習慣「字尾式」(也叫「逆波蘭式」,reverse polish notation)。上述中綴式對應的字尾式是:3 5 2 * +
現在,請對輸入的字尾式進行求值。
在一行中輸入乙個字尾式,運算數
和運算子
之間用空格分隔,運算數長度不超過6
位,運算子僅有+ - * /
四種。
在一行中輸出字尾式的值,保留一位小數。
3 5.4 2.2 * +
14.9
ac**:
#include #include #include using namespace std;
int main()
else s.push(stod(str));
}cout
}
字首表示式 與 字尾表示式
在計算機程式設計中,我們使用字首或字尾表示式進行運算往往比中綴簡單 中綴表示式 1 2 3 4 5 字首表示式 1 2 3 4 5 字尾表示式 1 2 3 4 5 對於字首表示式 1 2 3 4 5,這裡的字首指的是運算符號字首,1 2 3 4 5 2 3 4 1 5可見連括號都省了。程式設計運算字...
中綴表示式 字首表示式 字尾表示式
中綴表示式 中綴記法 中綴表示式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處於運算元的中間。中綴表示式是人們常用的算術表示方法。雖然人的大腦很容易理解與分析中綴表示式,但對計算機來說中綴表示式卻是很複雜的,因此計算表示式的值時,通常需要先將中綴表示式轉換為字首或字尾表示式,然後再進行求值。...
中綴表示式 字尾表示式 字首表示式
正如我們常常潛意識認為我們所說的數字都是十進位制,對於數字的其他進製感覺不正確一樣,其實只是我們不熟悉而已,其他進製其實也不過就是一種對資料的表達方式而已。對於我們的表示式也是一樣。eg 表示式2 3 5 7 我們上面所看到的也就是我們平時常用的書寫表示式的方式就是我們所謂的 中綴表示式 字首表示式...