后缀表达式求值C代码
时间: 2024-11-28 09:16:05 浏览: 39
后缀表达式求值(c语言版)
后缀表达式也称为逆波兰表示法(RPN,Reverse Polish Notation),是一种不需要括号的数学表达式表示方法。在C语言中计算后缀表达式的求值通常通过栈数据结构来实现。
以下是一个简单的C代码示例,用于求解后缀表达式的值:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义运算符优先级
#define PRECEDENCE(op) ((op)=='+' || (op)=='-' ? 1 : ((op)=='*' || (op)=='/' ? 2 : 0))
// 判断是否已经是数字
int isdigit(char c) {
return (c >= '0' && c <= '9');
}
// 解析并计算后缀表达式
double evaluatePostfix(char* expression) {
double stack[100], result = 0;
int top = -1;
for (char *token = expression; *token != '\0'; token++) {
if (isdigit(*token)) { // 如果是数字,直接入栈
char num[5];
num[4] = '\0';
while (isdigit(*token)) {
num[top++] = *token++;
}
stack[++top] = atof(num);
} else { // 如果是运算符,处理栈
while (top > 0 && PRECEDENCE(*token) <= PRECEDENCE(stack[top])) {
double op2 = stack[top--];
switch (*token) {
case '+':
stack[top++] = op1 + op2;
break;
case '-':
stack[top++] = op1 - op2;
break;
case '*':
stack[top++] = op1 * op2;
break;
case '/':
stack[top++] = op1 / op2;
break;
default:
break;
}
}
stack[top++] = *token; // 将运算符入栈
}
}
// 处理剩余的运算
while (top > 0) {
double op2 = stack[top--];
switch (stack[top]) {
case '+':
stack[top++] = op1 + op2;
break;
case '-':
stack[top++] = op1 - op2;
break;
case '*':
stack[top++] = op1 * op2;
break;
case '/':
stack[top++] = op1 / op2;
break;
}
}
return stack[0];
}
int main() {
char expression[] = "2 3 + 4 *";
printf("Result: %.2f\n", evaluatePostfix(expression));
return 0;
}
```
这个程序首先初始化一个空栈,然后遍历输入的后缀表达式。对于遇到的每个数字,它会入栈;而对于运算符,它会检查栈顶是否有更高的优先级运算符,如果没有则执行该运算符。最后,主函数中演示了如何使用这个函数计算"2 3 + 4 *"的值。
阅读全文