#include#define maxsize 50//定义最大的量struct{ char data[maxsize]; int top;}op;void trans(char exp[],char postexp[])//讲先序变为中序{ char ch; int i=0,j=0; ch=exp[i];i++; op.top=-1; while(ch!='\0') { switch (ch) { case '(': op.top++; op.data[op.top]=ch; break; case '+': case '-': while (op.top!=-1 && op.data[op.top]!='(') { postexp[j]=op.data[op.top]; j++; op.top--; } op.top++;op.data[op.top]=ch; break; case ')': while (op.data[op.top]!='(') { postexp[j]=op.data[op.top]; j++; op.top--; } op.top--; break; case '*': case '/': while (op.top!=-1 && op.data[op.top]!='(' && (op.data[op.top]=='*' || op.data[op.top]=='/')) { postexp[j]=op.data[op.top];j++; op.top--; } op.top++;op.data[op.top]=ch; break; case ' ':break; default: while(ch>'0'&&ch<'9') { postexp[j]=ch;j++; ch=exp[i];i++; } i--; postexp[j]='#';j++; } ch=exp[i];i++; } while(op.top!=-1) { postexp[j]=op.data[op.top];j++; op.top--; } postexp[j]='\0';}struct { float data[maxsize]; int top;}st;//********逆波兰式*********//int copputer(char postexp[])//{ int i=0; char ch; st.top=-1; ch=postexp[i]; float a=0.0; while (ch!='\0') { switch (ch) { case '+': st.data[st.top-1]=st.data[st.top]+st.data[st.top-1]; st.top--; break; case '-': st.data[st.top-1]=st.data[st.top-1]-st.data[st.top]; st.top--; break; case '*': st.data[st.top-1]=st.data[st.top]*st.data[st.top-1]; st.top--; break; case '/': st.data[st.top-1]=st.data[st.top-1]/st.data[st.top]; st.top--; break; case '#': break; default: a=0; while(ch>='0'&&ch<='9') { a=a*10+ch-'0'; i++;ch=postexp[i]; } i--; st.top++; st.data[st.top]=a; } i++;ch=postexp[i]; } printf("%f\n",st.data[st.top]); return st.data[st.top]; }//*****主函数****//int main(){ char exp[15]="(8+2-(1-3))"; char postexp[20]="\0"; trans(exp,postexp); copputer(postexp);}