用C语言实现简单表达式求值
时间: 2023-05-24 22:05:08 浏览: 74
以下是用C语言实现简单表达式求值的代码示例:
```c
#include <stdio.h>
#include <ctype.h>
/* 定义运算符的优先级 */
int priority(char op) {
switch(op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}
/* 计算两个数的结果 */
int calc(int a, int b, char op) {
switch(op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
return 0;
}
}
/* 对表达式进行求值 */
int evaluate(char *expr) {
char c;
int i, num, a, b, result;
char op, op2;
int num_stack[10];
char op_stack[10];
int num_top = -1, op_top = -1;
for (i = 0; expr[i] != '\0'; i++) {
c = expr[i];
if (isdigit(c)) {
/* 将数字字符转换为数字 */
num = c - '0';
while (isdigit(expr[i + 1])) {
num = num * 10 + expr[i + 1] - '0';
i++;
}
/* 将数字入栈 */
num_stack[++num_top] = num;
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
/* 如果栈顶运算符优先级大于当前运算符,则先计算栈顶运算符 */
while (op_top >= 0 && priority(op_stack[op_top]) >= priority(c)) {
op = op_stack[op_top--];
b = num_stack[num_top--];
a = num_stack[num_top--];
num_stack[++num_top] = calc(a, b, op);
}
/* 当前运算符入栈 */
op_stack[++op_top] = c;
} else if (c == '(') {
/* 左括号入栈 */
op_stack[++op_top] = c;
} else if (c == ')') {
/* 如果遇到右括号,则计算括号内的表达式 */
while (op_stack[op_top] != '(') {
op2 = op_stack[op_top--];
b = num_stack[num_top--];
a = num_stack[num_top--];
num_stack[++num_top] = calc(a, b, op2);
}
/* 弹出左括号 */
op_top--;
}
}
/* 对剩下的运算符逐个计算 */
while (op_top >= 0) {
op = op_stack[op_top--];
b = num_stack[num_top--];
a = num_stack[num_top--];
num_stack[++num_top] = calc(a, b, op);
}
/* 栈顶元素即为最终结果 */
result = num_stack[num_top];
return result;
}
int main() {
char expr[100];
int result;
printf("请输入表达式:");
fgets(expr, 100, stdin);
result = evaluate(expr);
printf("结果为:%d\n", result);
return 0;
}
```
运行结果示例:
```
请输入表达式:(2+3)*4-5/2
结果为:16
```