该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
}
else
s=a/b;break; }
return s;
} int EvalExpres() //表达式求解函数
{
int a,b,i=0,s=0;
char c[80],r;
InitStack2(&N);
Push2(&N,'#');
InitStack1(&M);
printf(" 请输入表达式并以‘#’结束:");
gets(c);
while(c[i]!='#'||GetTop(&N)!='#')
{
if(!In(c[i])) //判断读入的字符不是运算符 是则进栈
{ if(c[i]>='0'&&c[i]<='9')
{
s+=c[i]-'0';
while(!In(c[++i])) //此处实现的功能为当输入的数字为多位数时
{ s*=10;
s+=c[i]-'0';
}
Push(&M,s+'0');
s = 0;
}
else
{
printf("输入的表达式有误!\n");
return 0;
}
}
else
switch(Proceed(GetTop(&N),c[i])) //此函数用来比较读取的运算符和栈顶运算符的优先级
{
case '
Push2(&N,c[i]);
i++;
break;
case '=': //遇到匹配的小括号时则去掉他
Pop2(&N);
i++;
break;
case '>': //栈顶的优先级低则出栈并将结果写入栈内
r = Pop2(&N);
a = Pop2(&M)-'0';
b = Pop2(&M)-'0';
Push1(&M,Operate(a,r,b)) ;
break;
}
}
return (GetTop(&M)-'0'); //返回运算结果 } int main()
{
int result=EvalExpres();
printf("计算结果是:%d\n", result);
}