算术表达式求值演示,C语言
时间: 2024-09-12 16:15:00 浏览: 38
在C语言中,算术表达式求值通常涉及到基本的算术运算符如加、减、乘、除以及取模等。我们可以使用`eval()`函数或者自定义解析器来动态计算一个字符串形式的表达式的值。这里是一个简单的演示:
```c
#include <stdio.h>
#include <stdlib.h>
double calculate(char* expression) {
char *token;
double num1, num2, result;
token = strtok(expression, "+-*/"); // 分割运算符前后的数字
while (token != NULL) {
if (sscanf(token, "%lf", &num1) == 1) { // 尝试读取双精度浮点数
token = strtok(NULL, "+-*/"); // 继续分割直到遇到下一个运算符
if (token == NULL || sscanf(token, "%lf", &num2) != 1) {
printf("Invalid expression.\n");
return -1; // 非法表达式处理
}
} else {
printf("Invalid token detected.\n");
return -1;
}
switch (strtok(NULL, "+-*/")) { // 根据运算符进行相应的计算
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
if (num2 != 0)
result = num1 / num2;
else
result = 0; // 避免除以零错误
break;
default:
printf("Unknown operator.\n");
return -1;
}
printf("After %s: %.2f\n", token, result); // 打印中间结果
token = strtok(NULL, "+-*/"); // 进行下一次操作
}
return result;
}
int main() {
char expression[] = "5 + 3 * 4 - 7";
double value = calculate(expression);
if (value != -1)
printf("Final result is: %.2f\n", value);
return 0;
}
```
在这个例子中,我们首先通过`strtok()`函数分割输入的字符串,并尝试将每个部分转换成数字。然后,根据找到的运算符进行相应的计算。注意,这只是一个基础的演示,实际应用中可能会更复杂,例如处理括号优先级、负数、浮点数等问题。
阅读全文