7 21 求字首表示式的值

2021-10-05 08:11:29 字數 1480 閱讀 4741

算術表示式有字首表示法、中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2+3*(7-4)+8/4的字首表示式是:+ + 2 * 3 - 7 4 / 8 4。請設計程式計算字首表示式的結果值。

輸入在一行內給出不超過30個字元的字首表示式,只包含+-*/以及運算數,不同物件(運算數、運算符號)之間以空格分隔。

輸出字首表示式的運算結果,保留小數點後1位,或錯誤資訊error

+ + 2 * 3 - 7 4 / 8 4
13.0
解析字首表示式並計算值的方法為:從右往左讀取式子,如果遇到數字那麼就入棧,如果遇到運算子,就從棧中彈出兩個數字a和b,其中a為棧頂元素,計算完成後再壓入棧中。

這道題需要注意的點是:

1. 結算結果需要保留一位小數,所以應該用double型記錄結果

2. 數字有可能是小數

3. 當進行運算子運算的時候如果棧中沒有兩個元素則返回error;當進行除法運算的時候如果b=0則返回error

#include #include #include #include using namespace std;

#define maxsize 1010

char exp[maxsize];

int idx=0;

stacknum; //存數字的堆疊

int isdigit(char a) else

}int main()

for(int j=idx-1; j>=0; j--) else if(exp[j] == '+') else if(isdigit(exp[j])) else if(exp[j]=='.')

j--;

}num.push(outcome);

j++;

} else if(exp[j]=='+' || exp[j]=='-' || exp[j]=='*' || exp[j]=='/')

a = num.top();

num.pop();

if(num.empty())

b = num.top();

num.pop();

double outcome = 0;

switch(exp[j])

outcome = a/b;

break;

default:

break;

}num.push(outcome);

} }if(num.size()!=1) else

return 0;

}

7 21 求字首表示式的值(25 分)

stack用法詳解 算術表示式有字首表示法 中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2 3 7 4 8 4的字首表示式是 2 3 7 4 8 4。請設計程式計算字首表示式的結果值。輸入在一行內給出不超過30個字元的字首表示式,只包含 以及運算數,不同物件 運算數 ...

7 21 求字首表示式的值 25分

pta資料結構與演算法題目集 7 21 求字首表示式的值 25分 算術表示式有字首表示法 中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2 3 7 4 8 4的字首表示式是 2 3 7 4 8 4。請設計程式計算字首表示式的結果值。輸入在一行內給出不超過30個字元的字首...

pta7 21 求字首表示式的值

東軟學習小組成員 夜楓 題目 算術表示式有字首表示法 中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2 3 7 4 8 4的字首表示式是 2 3 7 4 8 4。請設計程式計算字首表示式的結果值。輸入格式 輸入在一行內給出不超過30個字元的字首表示式,只包含 以及運算數...