問題及**:
/*
檔名稱: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 要求 在數字後加 輸入描述 字...