让大家帮个忙。
我编的这个题程序 运行不出来。谁能帮我改改!
#include<iostream.h> #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define OVERFLOW -2; #define ERROR -1; #define STACK_INIT_SIZE 100; #define STACKINCREMENT 10; typedef int Status; #define OK 1; typedef struct{ char * base; char * top; int stacksize; }SqStack1; typedef struct{ double * base; double * top; int stacksize; }SqStack2; Status InitStack1(SqStack1 &S){ S.base=(char *) malloc (STACK_INIT_SIZE*sizeof(char)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; }//InitStack Status InitStack2(SqStack2 &S){ S.base=(double *)malloc(STACK_INIT_SIZE*sizeof(double)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; }//InitStack Status Push1 (SqStack1 &S,char e){ if(S.top-S.base>=S.stacksize){ S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char)); if(!S.base)exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return OK; }//Push Status Push2 (SqStack2 &S,double e){ if(S.top-S.base>=S.stacksize){ S.base=(double *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(double)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return OK; }//Push Status Pop1(SqStack1 &S,char &e){ if(S.top==S.base) return ERROR; e=*(--S.top); return OK; }//Pop Status Pop2(SqStack2 &S,double &e){ if(S.top==S.base) return ERROR; e=*(--S.top); return OK; }//Pop int bi_jiao(char a,char b) { if((a=='#')&&(b=='*')) return 1; if((a=='*')&&(b=='(')) return 1; if((a=='(')&&(b=='-')) return 1; if((a=='-')&&(b=='/')) return 1; if((a=='/')&&(b==')')) return 3; if((a=='-')&&(b==')')) return 3; if((a=='(')&&(b==')')) return 2; if((a=='*')&&(b=='+')) return 3; if((a=='#')&&(b=='+')) return 1; if((a=='+')&&(b=='#')) return 3; if((a=='#')&&(b=='#')) return 2; } double yun_suan(double z,char that,double w) { if(that=='+') return z+w; if(that=='-') return z-w; if(that=='*') return z*w; if(that=='/') return z/w; }
void main() { SqStack1 OPTR; SqStack2 OPTD; int i(0),j(0); char x,y; double w,z,number; char a[8]; a[0]='#'; a[1]='*'; a[2]='('; a[3]='-'; a[4]='/'; a[5]=')'; a[6]='+'; a[7]='#'; double b[7]={327.45,0,256.78,32.54,2.3,0,26.32}; InitStack1(OPTR); InitStack2(OPTD); Push1(OPTR,a[i]);i++; Push2(OPTD,b[j]);j++; Push1(OPTR,a[i]);i++; for(int m(0);m<0;m++) { number=bi_jiao(*(OPTR.top-2),*(OPTR.top-1)); if(number==1) { if(b[j]!=0) Push2(OPTD,b[j]); j++; Push1(OPTR,a[i]);i++; } if(number==2) { Pop1(OPTR,x); Pop1(OPTR,x); if(OPTR.top==OPTR.base) break;//END if(b[j]!=0) Push2(OPTD,b[j]); j++; Push1(OPTR,a[i]);i++; } if(number==3) { Pop1(OPTR,x); Pop1(OPTR,y); Push1(OPTR,x); Pop2(OPTD,w); Pop2(OPTD,z); w=yun_suan(z,x,w); Push2(OPTD,w); } } cout<<*(OPTD.base)<<endl; }