7-4 求前缀表达式的值 (25 分)

    xiaoxiao2025-05-22  57

    此问题的关键在于怎么存放待计算的数据(包括计算过程中的中间结果)以及怎样从输入字符串中分解出运算符和数据。

    C语言版本: 

    #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Node { double Data[1000]; int top; }*Stack; double Calculate(double a, double b, char c) { switch (c) { case '+': return a + b; case '-':return a - b; case '*':return a * b; case'/':return a / b; } } void Push(Stack S, double a) { S->Data[++S->top] = a; } double Pop(Stack S) { return S->Data[S->top--]; } int IsEmpty(Stack S) { if (S->top == -1) return 1; return 0; } int main() { char s[1000]; int len,i; double a, b, res; fgets(s, 1000,stdin); Stack S; S = (Stack)malloc(sizeof(struct Node)); S->top = -1; len = strlen(s); for (i = len - 1; i >= 0; i--) { if (((s[i] - '0') >= 0) && ((s[i] - '0') <= 9)) { a = s[i] - '0'; i--; while (s[i] != ' '&&i >= 0) { a = 10 * (s[i] - '0') + a; i--; } Push(S, a); } else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') { if (!IsEmpty(S)) { a = Pop(S); } else { printf("ERROR\n"); return 0; } if (!IsEmpty(S)) b = Pop(S); else { printf("ERROR\n"); return 0; } if (s[i] == '/'&&b == 0) { printf("ERROR\n"); return 0; } res = Calculate(a, b, s[i]); Push(S, res); } } printf("%.1f", res); return 0; }

     

     

    最新回复(0)