使用【C语言】写【实数算数表达式求值】的代码
时间: 2024-12-30 11:37:39 浏览: 5
在 C 语言中,由于 C 没有内置的解析器来直接处理复杂算术表达式,我们需要手动编写一个简单的表达式求值程序。这通常通过栈数据结构和自定义函数来实现,比如使用逆波兰表示法(Reverse Polish Notation, RPN)。以下是一个简单的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个简单的数字类型
typedef struct {
double value;
} Number;
// 加法操作
Number add(Number a, Number b) {
return (Number){a.value + b.value};
}
// 其他基本操作类似
// 后缀表达式求值函数
Number evaluate(char* tokens) {
char* token = tokens;
Stack* stack = createStack();
while (*token != '\0') {
if (isdigit(*token)) { // 遇到数字,入栈
push(stack, atof(token));
token++;
} else if (*token == '+' || *token == '-') { // 遇到运算符,弹出两个数做运算
Number b = pop(stack);
Number a = pop(stack);
push(stack, (*token == '+') ? add(a, b) : subtract(a, b)); // 根据运算符执行相应操作
token++; // 移动指针到下一个字符
} else { // 遇到非数字或运算符,跳过
token++;
}
}
return pop(stack); // 返回最后的结果
}
int main() {
char* expr = "3.5 2.0 +"; // 示例表达式
Number result = evaluate(expr);
printf("结果: %lf\n", result.value);
return 0;
}
// 这里省略了创建和管理堆栈的辅助函数createStack()和pop/push()
```
注意,这个示例仅支持单精度浮点数和+/-运算,并假设输入的是有效的后缀表达式。在实际应用中,更完整的解决方案可能需要使用词法分析和语法分析库,如 ANTLR 或 Lex/Yacc。
阅读全文