7 65 求字首表示式的值

2021-09-10 16:11:01 字數 1691 閱讀 1184

題目如下:

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

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

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

+ + 2 * 3 - 7 4 / 8 4
13.0
一開始思路比較直白,由右往左,一直遍歷到開頭,首先想到要設計乙個字串轉化為數字的函式,設計了半天,沒及時測試,結果卡了好久,大方向也有點問題,一開始用了兩個棧;現在糾正過來了atof()函式即可自動轉化,用函式遞迴,即可不需要用到棧了一下是本人自己設計的,略顯簡陋,不建議閱讀:

#if 1 

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

const int n=10005;

char s0[n],s[n],n;

stacks;

//計算前提(遞推關係)

//1.!s1.empty()&&s2.size()>=2

'/')float f=s2.top;s2.pop();s2.top()!=0;s2.push(f);

float cal(char c)

}//判斷正負號僅需問一下是否是長度為大於1,第乙個字元為『+』或『-』 即可

//判斷是否有小數點,然後前取值後取值

bool getnum(char *ptr,char &c,float &f,int l)

term=0.1;

for(int i=t;i='0')

else }

int main()

else

if(isok)

}else

isok=false;

} }if(!isok||s.size()!=1)

printf("error\n");

else

printf("%.1f\n",s.top());

return 0;

}#endif

/*情況1:一位數四種運算

+ + 2 * 3 - 7 4 / 8 4

輸出1:

13.0

情況2:有負數,兩位整數

/ -25 + * - 2 3 4 / 8 4

輸出2:

12.5

情況3:異常退出:1.不匹配 2.被除數為0

/ 5 + * - 2 3 4 / 8 2

輸出3:

error

情況4:有正數符號

+12.23

輸出4:

12.2

*/

至於優化後的**,簡明,清晰,直白,參考

求字首表示式的值

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

求字首表示式的值

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

求字首表示式的值

目錄 求字首表示式的值 問題描述 實現 算術表示式有字首表示法 中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2 3 7 4 8 4的字首表示式是 2 3 7 4 8 4。請設計程式計算字首表示式的結果值。輸入格式 輸入在一行內給出不超過30個字元的字首表示式,只包含 ...