正文

简单的四则运算(栈的应用)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);
}




阅读(4914) | 评论(0)


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

评论

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