表达式求解

#include"stdio.h"
void trans(char *exp,char postexp[])
{
 struct
 { char data[200];
  int top;
 }op;
 int i=0;
 op.top=-1;
 while (*exp!='/0')
 {
  switch(*exp)
  {
  case '(':
   op.top++;op.data[op.top]=*exp;
   exp++;
   break;
  case ')':
   while (op.data[op.top]!='(')
   {
    postexp[i++]=op.data[op.top];
    op.top--;
   }
   op.top--;
   exp++;
   break;
  case '+':case '-':
   while (op.top!=-1&&op.data[op.top]!='(')
   {
    postexp[i++]=op.data[op.top];
    op.top--;
   }
   op.top++;op.data[op.top]=*exp;
   exp++;
   break;
  case '*':case '/':
   while (op.data[op.top]=='*'||op.data[op.top]=='/')
   {
    postexp[i++]=op.data[op.top];
    op.top--;
   }
   op.top++;op.data[op.top]=*exp;
   exp++;
   break;
   case ' ':exp++;break;
  default :
   while (*exp>='0'&&*exp<='9')
   { postexp[i++]=*exp;
    exp++;
   }
   postexp[i++]='#';
  }
 }
 while (op.top!=-1)
 {
  postexp[i++]=op.data[op.top];
  op.top--;
 }
 postexp[i]='/0';
}
//********************************************************
float compvalue(char *postexp)
{
 struct
 { float data[20];
  int top;
 }st;
 float d,a,b,c;
 st.top=-1;
 while (*postexp!='/0')
 { switch (*postexp)
  {
   case '+':
    a=st.data[st.top];
    st.top--;
    b=st.data[st.top];
    st.top--;
    c=a+b;st.top++;
    st.data[st.top]=c;
    break;
   case '-':
    a=st.data[st.top];
    st.top--;
    b=st.data[st.top];
    st.top--;c=b-a;
    st.top++;
    st.data[st.top]=c;
    break;
   case '*':
    a=st.data[st.top];
    st.top--;
    b=st.data[st.top];
    st.top--;
    c=a*b;
    st.top++;
    st.data[st.top]=c;
    break;
   case '/':
    a=st.data[st.top];
    st.top--;
    b=st.data[st.top];
    st.top--;
    if (a!=0)
    {
     c=b/a;
     st.top++;
     st.data[st.top]=c;
    }
    else
    { puts("除数不能为〇/n");
     system("pause");
     exit(0);
    }
    break;
   default:
    d=0;
    while (*postexp>='0'&&*postexp<='9')
    {
     d=d*10+*postexp-'0';
     postexp++;
    }
    st.top++;
    st.data[st.top]=d;
    break;
  }
  postexp++;
 }
 return (st.data[st.top]);
}
//***************************************
  
void main()
{
 char exp[20];char postexp[20];int i;
hook: printf("请输入您要计算的表达式:/n");
 scanf("%s",exp);
 
 trans(exp,postexp);
 printf("中缀表达式:%s/n后缀表达式:%s/n表达式的值:%g/n",
 exp,postexp,compvalue(postexp));
 printf("Do you wanna try again?/nYes(1)::No(2)/n") ;
    scanf("%d",&i);
      if(i==1) goto hook;
      else if (i==2)
       {
       puts("BYE-BYE!");
       getch();
       exit(0);
       }
      else
       {printf("Are you understanding?Please enter a number '1'or '2'just okey?") ;goto hook;}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值