答:
输入并读取第一个数字,然后再判断第一个数字以及紧接着的字符,如果是0和'\n'(回车是表示输入结束的标志),那么跳出循环体即可。之后两两输入,再读取。如果读取到‘*’的话,那么就可以进行乘法运算,并将结果保存在前一个数字中,除法同理。而如果读取到‘+’的话,由于运算符优先级的问题,那么我们就需要把‘+’运算符一起读取的数字存储起来,存储在上一位读取到的数字并存储的下一位即可,而'-'号的话,可以将减法运算统一转换成加法运算。直到字符读取到‘\n’则表示读取结束。
代码的执行过程如下所示。
#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
int main()
{
char b;
double n,t,st[maxn];
while(scanf("%lf%c",&n,&b)!=EOF)
{
double ans=0;
int top=0;
char c;
if(n==0&&b=='\n')
{
break;
}
st[++top]=n;
while(scanf("%c%lf",&c,&n)!=EOF)
{
switch(c)
{
case '+':st[++top]=n;break;
case '-':st[++top]=-1*n;break;
case '*':st[top]=st[top]*n;break;
case '/':st[top]=st[top]/n;break;
}
b=getchar();
if(b=='\n')
{
break;
}
}
for(int i=1;i<=top;i++)
{
ans+=st[i];
}
printf("%.2lf\n",ans);
}
return 0;
}