用程序实现求解表达式的值,例如输入1+2*3-16/2,则输出为-1,用c语言
时间: 2024-10-18 10:18:42 浏览: 35
在C语言中,计算表达式并返回其值通常需要借助栈数据结构来模拟运算过程,因为算术运算符的优先级和结合性是固定的。这里是一个简单的例子,使用递归函数和临时变量来处理这个问题:
```c
#include <stdio.h>
// 计算两个操作数之间的结果
int calculate(int a, int op, int b) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
// 需要注意除法,防止除数为零
if (b != 0)
return a / b;
else
printf("Error: Division by zero is not allowed.\n");
return 0; // 返回错误标记
default:
printf("Invalid operator.\n");
return 0; // 同样返回错误标记
}
}
// 解析和计算表达式
int evaluate_expression(char *expression) {
int num = 0, result = 0, i = 0, prev_char = '+';
while (expression[i]) {
if (expression[i] == ' ') continue;
if (isdigit(expression[i])) {
while (isdigit(expression[++i])) {
num = num * 10 + expression[i] - '0';
}
result = calculate(result, prev_char, num);
num = 0; // 重置num
} else {
prev_char = expression[i];
}
i++; // 跳过运算符
}
return calculate(result, prev_char, num); // 如果还有剩余的数字,最后再做一次计算
}
int main() {
char expression[] = "1+2*3-16/2";
int result = evaluate_expression(expression);
if (result != 0)
printf("The value of the expression is: %d\n", result);
return 0;
}
```
运行上述程序会输出 `-1`。注意,这个实现并不包含完整的错误检查(如括号匹配、非法字符等),实际应用中你需要更全面的解析和错误处理。
阅读全文