正文

简单的四则运算(栈的应用)2005-05-01 13:01:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/jay0518/817.html

分享到:

这个程序自己写的有些局限,可惜只能对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); }

阅读(4945) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册