使用c语言实现算术表达式求值
时间: 2024-10-27 17:01:03 浏览: 14
C语言实现算术表达式的求值
使用C语言实现算术表达式求值,可以采用递归解析法或者栈的方法,这里简单讲解栈的方式,它涉及到词法分析、语法分析和运算符优先级处理。你可以创建一个`expr_eval`函数,接受一个字符串表示的表达式作为输入。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Token {
char type; // 区分数字、运算符、左括号、右括号等
union {
double num; // 数字类型
char* str; // 字符串类型
} value;
} Token;
Token read_token(char *str); // 读取一个token
double evaluate_expression(Token *tokens, int start, int end); // 主函数,处理表达式的求值
// 递归解析表达式,处理运算符优先级
double apply_operator(double left, char op, double right) {
switch (op) {
case '+':
return left + right;
case '-':
return left - right;
case '*':
return left * right;
case '/':
return left / right;
default:
printf("Invalid operator!\n");
exit(1);
}
}
Token read_token(char *str) {
// 实现从字符串中识别和返回token的功能...
}
double evaluate_expression(Token *tokens, int start, int end) {
if (start >= end) {
if (tokens[start].type == ' ') continue; // 跳过空格
return tokens[start].value.num; // 如果剩余的是数字直接返回
}
double result = evaluate_expression(tokens, start + 1, end); // 处理右部
while (start < end && tokens[start].type != ')') { // 有未处理的运算符
double right = result;
result = apply_operator(result, tokens[start].type, evaluate_expression(tokens, start + 1, end));
start++;
}
return result;
}
int main() {
char expr[] = "2 + 3 * (4 - 1)";
Token *tokens = read_token(expr);
double result = evaluate_expression(tokens, 0, strlen(expr));
printf("Result: %.2f\n", result);
free(tokens);
return 0;
}
```
阅读全文