用c语言写一个前缀表达式求值
时间: 2024-10-20 14:08:45 浏览: 32
前缀表达式,也称为逆波兰表示法(Reverse Polish Notation,RPN),是一种运算符位于操作数之后的数学表达式表示方式。为了计算前缀表达式的值,你可以编写一个简单的C语言函数,使用栈的数据结构来存储操作数并逐个处理运算符。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX stack_size
typedef struct {
int top;
double data[MAX];
} Stack;
// 判断字符是否为数字或运算符
int isOperator(char op) {
return (op >= '0' && op <= '9') || op == '+' || op == '-' || op == '*' || op == '/';
}
// 入栈操作
void push(Stack *s, char val) {
s->data[s->top++] = val - '0'; // 减去 '0' 转换成整数值
}
// 出栈操作
double pop(Stack *s) {
if (s->top > 0)
return --s->top, s->data[s->top];
else
return 0; // 返回0表示栈空
}
// 求值函数,递归处理前缀表达式
double evaluatePrefix(char* exp) {
Stack s;
s.top = -1;
for (char* token = exp; *token != '\0'; ++token) {
if (isOperator(*token)) {
double right = pop(&s);
double left = pop(&s);
switch (*token) {
case '+': push(&s, left + right); break;
case '-': push(&s, left - right); break;
case '*': push(&s, left * right); break;
case '/': push(&s, left / right); break;
}
} else {
push(&s, *token - '0');
}
}
return pop(&s); // 返回最终结果
}
int main() {
char exp[] = "2 3 + 4 *"; // 前缀表达式示例
printf("The result of the expression '%s' is %lf\n", exp, evaluatePrefix(exp));
return 0;
}
```
阅读全文