九度1019

题目描述:
  读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入:
  测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出:
  对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
利用堆栈的思想,遇到+、—入栈,遇到*、/则更新栈尾,最后从前向后递加输出结果
代码如下:
#include<stdio.h>
#define MAX 1000
double stack[MAX];

int main()
{
    int a,tail;
    while(scanf("%d",&a)!=EOF)
    {
        int i;
        char c,c1,c2;
        double ans=0;
        tail=0;
        c=getchar();
        if(a==0&&c!=' ') break;
        stack[tail++]=1.0*a;
        while(scanf("%c %d%c",&c1,&a,&c2)!=EOF)
        {
            if(c1=='+') stack[tail++]=1.0*a;
            else if(c1=='-') stack[tail++]=-1.0*a;
            else if(c1=='*') stack[tail-1]*=a;
            else if(c1=='/') stack[tail-1]/=(double)a;
            if(c2!=' ') break;
        }
        for(i=0;i<tail;i++)
            ans+=stack[i];
        printf("%.2lf\n",ans);
    }
    return 0;
}