第五周專案5 字尾表示式 棧

2021-07-24 13:39:03 字數 2070 閱讀 7751

問題及**:

/*     

檔名稱:ysx.cpp

作 者:於蘇顯

完成日期:2023年11月12日

版 本 號:v1.0

問題描述:利用sqstack.h中棧的基本運算,實現將乙個算術表示式轉換為對應的字尾表示式的演算法。

例如,輸入(56-20)/(4+2)

輸出字尾表示式::56#20#-4#2#+/ 和 運算結果:6

要求在數字後加#。

輸入描述:算術表示式

程式輸出:字尾表示式 和 對字尾表示式求值的結果

*/

利用順序棧演算法庫求字尾表示式和運算結果

#include "sqstack.h"

#include int wrong=0; //判斷表示式是否正確(全域性變數)

struct //定義運算子優先順序

lpri= ,,,,,,},//左運算子為棧頂運算子

rpri= ,,,,,,};//右運算子為表示式運算子

//若遇到')'(優先順序為1)將'('後入棧的運算子依次出棧

bool match(char *s) //判斷括號是否匹配}}

if(stackempty(p)&&match==1)

return true;

else

return false;

}int leftpri(char op) //求左運算子op的優先順序

int rightpri(char op) //求右運算子op的優先順序

bool inop(char ch) //判斷是否為運算子

int precede(char op1,char op2) //比較運算子優先順序

postexp[i++]=*exp++;

first++;

}postexp[i++]='#'; //用#標識乙個數值串結束

}else//出現除了運算子和數字以外的字元,表示式錯誤

}pop(opstack, ch);

while (ch!='=') //此時exp掃瞄完畢,退棧到'='為止

postexp[i]='\0'; //給postexp表示式新增結束標識

destroystack(opstack);

}double compvalue(char postexp)

st;int f;

double d;

char ch;

int t=0;

st.top=-1;

ch=postexp[t++];

while (ch)//postexp字串未掃瞄完時迴圈

else //小數情況}}

st.data[++st.top]=d;

}ch=postexp[t++];

}return st.data[st.top];

}int main()

else//表示式錯誤

printf("表示式有誤\n");

return 0;

}

執行結果:

知識點總結:使用了順序棧演算法庫,括號是否匹配,熟練了字尾表示式的轉換和求值方法。

學習心得:在老師給出的原始**的基礎上加了些功能,可以實現小數的運算,能判斷出錯誤的表示式和錯誤的書寫方式。

第五周專案5 字尾表示式

問題 檔名稱 專案5.cpp 作 者 陳晨 完成日期 2016年9月25日 版 本 號 v1.0 問題描述 利用sqstack.h中棧的基本運算,實現將乙個中綴表示式轉換為對應的字尾表達 式的演算法。例如,輸入 56 20 4 2 輸出字尾表示式 56 20 4 2 要求 在數字後加 輸入描述 字首...

第五周專案5 字尾表示式

檔名稱 專案5.cpp 作 者 高金豔 完成日期 2016年9月27日 版 本 號 v1.0 問題描述 利用sqstack.h中棧的基本運算,實現將乙個中綴表示式轉換為對應的字尾表達 式的演算法。例如,輸入 56 20 4 2 輸出字尾表示式 56 20 4 2 要求 在數字後加 輸入描述 字首表示...

第五周專案5 字尾表示式

問題 檔名稱 專案5.cpp 作 者 楊雅鑫 完成日期 2016年9月28日 版 本 號 v1.0 問題描述 利用sqstack.h中棧的基本運算,實現將乙個中綴表示式轉換為對應的字尾表達 式的演算法。例如,輸入 56 20 4 2 輸出字尾表示式 56 20 4 2 要求 在數字後加 輸入描述 字...