使用递归编写一个算术表达式求值的C语言函数,要求除了主函数只使用一个函数且只含一个参数
时间: 2023-07-15 10:10:15 浏览: 118
下面是一个使用递归实现的算术表达式求值的C语言函数,它只含有一个参数,没有使用主函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 声明递归函数
int calculate(char *expr);
int main() {
char expr[100];
printf("请输入算术表达式:");
scanf("%s", expr);
int result = calculate(expr);
printf("计算结果为:%d\n", result);
return 0;
}
int calculate(char *expr) {
int num = 0; // 当前数字
int sum = 0; // 总和
char op = '+'; // 当前操作符,默认为加号
while (*expr != '\0') {
if (*expr >= '0' && *expr <= '9') {
// 如果当前字符是数字,累计到num中
num = num * 10 + (*expr - '0');
} else if (*expr == '+' || *expr == '-') {
// 如果当前字符是加号或减号,先计算上一个数字的贡献
if (op == '+') {
sum += num;
} else {
sum -= num;
}
// 更新操作符和数字
op = *expr;
num = 0;
} else if (*expr == '*' || *expr == '/') {
// 如果当前字符是乘号或除号,递归计算后面的表达式
int next_num = calculate(expr + 1);
if (*expr == '*') {
num *= next_num;
} else {
num /= next_num;
}
// 更新指针
while (*expr >= '0' && *expr <= '9') {
expr++;
}
continue;
}
// 更新指针
expr++;
}
// 计算最后一个数字的贡献
if (op == '+') {
sum += num;
} else {
sum -= num;
}
return sum;
}
```
该函数的实现思路是:从左往右遍历表达式,遇到数字就累计到当前数字中,遇到加号或减号就将当前数字的贡献加到总和中,并更新当前操作符和数字,遇到乘号或除号就递归计算后面的表达式,将计算结果和当前数字相乘或相除,然后更新指针。最后计算最后一个数字的贡献并返回总和。
阅读全文