递归实现表达式运算(c语言)+-*/%
时间: 2023-08-05 22:00:57 浏览: 72
递归实现表达式运算需要考虑一个算术表达式的各个元素以及运算符的优先级。下面是一个用C语言实现加减乘除模取模的递归解法的示例代码:
```c
#include <stdio.h>
int calculate(char *exp, int start);
int parseNumber(char *exp, int *start) {
int num = 0;
while (exp[*start] >= '0' && exp[*start] <= '9') {
num = num * 10 + (exp[*start] - '0');
(*start)++;
}
return num;
}
int calculate(char *exp, int start) {
int num1 = parseNumber(exp, &start);
while (exp[start] != '\0' && exp[start] != ')') {
char op = exp[start++];
int num2 = parseNumber(exp, &start);
switch (op) {
case '+':
num1 += num2;
break;
case '-':
num1 -= num2;
break;
case '*':
num1 *= num2;
break;
case '/':
num1 /= num2;
break;
case '%':
num1 %= num2;
break;
default:
printf("Invalid operator\n");
return -1;
}
}
return num1;
}
int main() {
char expression[100];
printf("请输入要计算的表达式:");
scanf("%s", expression);
int result = calculate(expression, 0);
printf("计算结果为:%d\n", result);
return 0;
}
```
以上代码中,函数`parseNumber`用于解析一个数值。函数`calculate`用于递归计算表达式,包括优先级高的乘除取模和优先级低的加减。在主函数中,用户输入一个表达式,然后调用`calculate`函数进行计算,并输出结果。
这个递归实现表达式运算的方法可以解析加减乘除取模运算,并且支持嵌套括号。但需要注意的是,这个实现有一些限制,例如不支持负数和浮点数的运算。如果需要更复杂的功能,可能需要更复杂的实现。