#include <stdio.h> #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); }