使用递归编写一个包含加减乘除和括号的算术表达式求值的C语言程序,只使用含一个参数的函数
时间: 2023-06-24 15:03:37 浏览: 105
编译原理 表达式求值 我们老师写的
5星 · 资源好评率100%
以下是使用递归实现的算术表达式求值程序:
```c
#include <stdio.h>
int evaluate(char *exp);
int main() {
char exp[100];
printf("Enter an arithmetic expression: ");
scanf("%s", exp);
printf("Result: %d\n", evaluate(exp));
return 0;
}
int evaluate(char *exp) {
int num = 0;
int res = 0;
char op = '+';
while (*exp) {
if (*exp >= '0' && *exp <= '9') {
num = num * 10 + (*exp - '0');
} else if (*exp == '(') {
num = evaluate(exp + 1);
exp++;
} else if (*exp == ')') {
break;
} else {
if (op == '+') {
res += num;
} else if (op == '-') {
res -= num;
} else if (op == '*') {
res *= num;
} else if (op == '/') {
res /= num;
}
num = 0;
op = *exp;
}
exp++;
}
if (op == '+') {
res += num;
} else if (op == '-') {
res -= num;
} else if (op == '*') {
res *= num;
} else if (op == '/') {
res /= num;
}
return res;
}
```
该程序定义了一个名为 `evaluate` 的递归函数,该函数接收一个字符串参数 `exp`,表示待求值的算术表达式。该函数使用一个循环遍历表达式中的每个字符,并根据当前字符的类型执行不同的操作:
- 如果当前字符是数字,则将其转换为整数,并将其加入当前的数字中;
- 如果当前字符是左括号,则递归调用 `evaluate` 函数来求解括号内的表达式;
- 如果当前字符是右括号,则退出循环,返回当前结果;
- 如果当前字符是运算符,则根据上一个运算符执行相应的运算,并更新当前运算符和数字。
最后,返回计算结果。
需要注意的是,该实现假定输入的算术表达式是合法的,并且不支持负数。
阅读全文