后缀表达式求值c语言源代码
时间: 2024-10-18 14:10:28 浏览: 30
C 后缀表达式求值的源代码
后缀表达式,也称为逆波兰表示法(RPN,Reverse Polish Notation),是一种数学运算符优先级表示法,它将操作数放在操作符前面,不需要括号来确定运算顺序。在C语言中,可以编写一个简单的函数来计算后缀表达式的值。
这是一个基本的C语言源代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stack>
int is_number(char* token) {
int i;
for (i = 0; token[i] != '\0'; i++)
if (!isdigit(token[i]) && token[i] != '.')
return 0;
return 1;
}
double get_number(char* token) {
double num = 0;
int i = 0;
while (isdigit(token[i])) {
num = num * 10 + (token[i] - '0');
i++;
}
return num;
}
double eval_postfix(char** tokens, int length) {
stack<double> values;
for (int i = 0; i < length; i++) {
if (is_number(tokens[i])) {
values.push(get_number(tokens[i]));
} else {
double op2 = values.top(); values.pop();
double op1 = values.top(); values.pop();
switch (*tokens[i]) {
case '+': values.push(op1 + op2); break;
case '-': values.push(op1 - op2); break;
case '*': values.push(op1 * op2); break;
case '/': values.push(op1 / op2); break;
// 根据需要添加其他运算符
}
}
}
return values.top();
}
int main() {
char* expr[] = {"2", "1", "+", "3", "*"};
int len = sizeof(expr) / sizeof(expr[0]);
printf("Result of %s: %.2lf\n", expr, eval_postfix(expr, len));
return 0;
}
```
这个程序首先检查每个令牌是否是数字,如果是则将其转换为double并压入栈中。如果遇到运算符,则从栈顶取出两个元素,执行相应的运算,并将结果推回栈。最后栈中剩下的唯一元素就是整个表达式的值。
阅读全文