#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;}
}
表达式求解
最新推荐文章于 2022-11-26 16:44:11 发布