(求任何表达式的值)逆波兰表达式

#include"stdio.h"
#define LEN 20

struct  
{
char data[LEN];
int top;
}op;
struct  
{
float data[50];
int top;
}st;
void sum(char *b)
{
void qiu(char *);
char result[50];
char ch;
int j=0;
ch=*b++;
op.top=-1;
while(ch!='\0')
{
  switch(ch)
  {
  case '(':
   op.top++;
   op.data[op.top]=ch;
   break;
  case ')':
   while(op.data[op.top]!='(')
   {
    result[j++]=op.data[op.top];
    op.top--;
   }
   op.top--;  
   break;
  case '-':
  case '+':      
   {
    while(op.top!=-1&&op.data[op.top]!='(')
    {
     result[j++]=op.data[op.top];
     op.top--;
    }
   }
   op.top++;
   op.data[op.top]=ch;          
   break;
  case '*':
  case '/':
   while(op.top!=-1&&op.data[op.top]!='('&&(op.data[op.top]=='*'||op.data[op.top]=='/'))
   {
    result[j++]=op.data[op.top];
    op.top--;
   }
   op.top++;
   op.data[op.top]=ch;
   break;
  case ' ': break;
  default:
    while(ch>='0'&&ch<='9')
    {
     result[j++]=ch;
     ch=*b++;
    }
    b--;
    result[j++]='#';
    break;  
  }
  ch=*b++;
}
while(op.top!=-1)
{
  result[j]=op.data[op.top];j++;
  op.top--;
}
result[j]='\0';
qiu(result);
}
void qiu(char *q)
{
char ch;
float d;
ch=*q++;
st.top=-1;
while(ch!='\0')
{
  switch(ch)
  {
  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-1]*st.data[st.top];
   st.top--;
   break;
  case '/':
   if(st.data[st.top]==0)
   {
    printf("除数不能为零!!");
    break;
   }
   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-1]-st.data[st.top];
   st.top--;
   break;
  default:
   {
    d=0;
    while(ch>='0'&&ch<='9')
    {
     d=10*d+ch-'0';
     ch=*q++;
    }
    st.top++;
    st.data[st.top]=d;
   }break;  
  }
  ch=*q++;
}
printf("结果是:%5.2f\n",st.data[st.top]);
}
void print()
{
int i=0;
for(;i<50;i++,printf("*"));
puts("");
}
void main()
{
void sum(char *);
char a[50];
print();
printf("输入任何的表达式都可以,只能计算加减乘除!\n");
print();
scanf("%s",a);  
sum(a);
}

posted @ 2017-09-22 23:06  lijianzhq  阅读(79)  评论(0)    收藏  举报