c语言写一个表达式求值,
时间: 2024-08-14 10:04:57 浏览: 103
在C语言中,编写一个简单的表达式求值程序通常涉及到解析字符串形式的数学表达式,并计算其结果。这通常涉及两个步骤:语法分析(解析表达式)和实际的数值计算。这里是一个基础的示例,使用递归函数来处理加减乘除操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_TOKEN_SIZE 50
// 定义操作符优先级
enum { PLUS = 1, MINUS, TIMES, DIVIDE };
int precedence(char op) {
return (op == '+' || op == '-') ? PLUS : (op == '*' || op == '/') ? MINUS : -1;
}
double apply_operator(double num1, double num2, char op) {
switch (op) {
case '+':
return num1 + num2;
case '- num2;
case '*':
return num1 * num2;
case '/':
if (num2 != 0)
return num1 / num2;
else
printf("Error: Division by zero.\n");
return 0; // 添加错误处理,避免程序崩溃
default:
return 0; // 非法操作符
}
}
double evaluate_expression(const char* expression) {
int i = 0;
double num = 0;
double result = 0;
char op = '+';
while (expression[i]) {
if (isdigit(expression[i])) {
num = num * 10 + (expression[i] - '0');
i++;
while (isdigit(expression[i])) {
num *= 10;
num += expression[i++] - '0';
}
} else if (expression[i] == '(') {
i++; // 跳过左括号
} else if (expression[i] == ')') {
if (op != '+' && op != '-') {
result = apply_operator(result, num, op);
num = 0;
}
i++;
op = '+'; // 结束运算后恢复到默认加法
} else {
if (op == '+')
num = result;
result = apply_operator(result, num, op);
num = 0;
i++;
op = expression[i]; // 更新当前操作符
}
}
// 将剩余的数字作为最后一个操作数
if (op != '+' && op != '-') {
result = apply_operator(result, num, op);
}
return result;
}
int main() {
const char* expr = "4 + 5 * (7 - 2)";
double result = evaluate_expression(expr);
printf("The result of the expression is: %.2lf\n", result);
return 0;
}
```
这个示例只处理了最简单的算术表达式,实际应用中你可能需要更复杂的解析算法来支持更多功能,如括号、幂、函数等。
阅读全文