这个程序自己写的有些局限,可惜只能对0~9的四则运算起作用,我正在对它进行改进,希望各位能提出好的意见,谢谢!! #include<stdio.h> #include<math.h> #include<stdlib.h> #include<ctype.h> #define maxism 15 typedef struct stack { char stack[maxism]; int top; }stack; stack *L; char after[maxism]; void initialstack(stack *T) { T->top=0; } void push(stack *T,int x) { T->top++; T->stack[L->top]=x; } void change() { int i=0,j,m=0; char str[maxism],ch; printf("please enter the compute expression(only contained +,-,*,/,(,),begin and end with '#'):\n"); gets(str); i++; ch=str[i]; initialstack(L); while(ch!='#') { switch(ch) { case'(': L->top++; L->stack[L->top]=ch; break; case')': while(L->stack[L->top]!='(') { after[m]=L->stack[L->top]; L->top--; m++; } L->top--; break; case'+': case'-': while(L->top!=0&&L->stack[L->top]!='(') { after[m]=L->stack[L->top]; L->top--; m++; } L->top++; L->stack[L->top]=ch; break; case'*': case'/': while(L->stack[L->top]=='*'||L->stack[L->top]=='/') { after[m]=L->stack[L->top]; L->top--; m++; } L->top++; L->stack[L->top]=ch; break; case' ': break; default: if(ch>='0'&&ch<='9') { after[m]=ch; m++; } else { printf("error!\n"); exit(1); } } i++; ch=str[i]; } while(L->stack[L->top]!=0) { after[m]=L->stack[L->top]; m++; L->top--; } printf("the changed expression is:\n"); for(j=0;j<m;j++) printf("%c",after[j]); after[m]='#'; printf("%c",after[m]); } void compute(stack *L) { int i=0,result,d; char ch; initialstack(L); ch=after[i]; while(ch!='#') { while(ch>='0'&&ch<='9') {d=ch-'0'; push(L,d); i++; ch=after[i]; } switch(ch) { case'+': L->stack[L->top-1]=L->stack[L->top]+L->stack[L->top-1]; L->top--; break; case'-': L->stack[L->top-1]=L->stack[L->top-1]-L->stack[L->top]; L->top--; break; case'*': L->stack[L->top-1]=L->stack[L->top]*L->stack[L->top-1]; L->top--; break; case'/': if(L->stack[L->top-1]==0) { printf("error due to the wrong input format!\n"); exit(0); } else L->stack[L->top-1]=L->stack[L->top-1]/L->stack[L->top]; L->top--; break; default: break; } i++; ch=after[i]; } printf("\n the final result is:%d",L->stack[L->top]); } main() {int result; clrscr(); change(); compute(L); }

评论