编写一个使用递归函数求包含加减乘除括号的算术表达式的值的C语言程序,除了主函数,只使用一个函数
时间: 2023-07-15 10:09:51 浏览: 126
以下是一个使用递归函数求包含加减乘除括号的算术表达式的值的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
int evaluate(char *expr);
int main()
{
char expr[100];
printf("Enter an arithmetic expression: ");
fgets(expr, 100, stdin);
printf("Result: %d\n", evaluate(expr));
return 0;
}
int evaluate(char *expr)
{
int num = 0;
int i = 0;
int sign = 1;
int result = 0;
while (expr[i] != '\0')
{
if (expr[i] == '(')
{
int j = i + 1;
int bracket_count = 1;
while (bracket_count != 0)
{
if (expr[j] == '(')
{
bracket_count++;
}
else if (expr[j] == ')')
{
bracket_count--;
}
j++;
}
num = evaluate(&expr[i+1]);
i = j;
}
else if (expr[i] >= '0' && expr[i] <= '9')
{
num = num * 10 + (expr[i] - '0');
}
else if (expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/')
{
switch (expr[i])
{
case '+':
result += sign * num;
sign = 1;
num = 0;
break;
case '-':
result += sign * num;
sign = -1;
num = 0;
break;
case '*':
num *= evaluate(&expr[i+1]);
i++;
break;
case '/':
num /= evaluate(&expr[i+1]);
i++;
break;
}
}
i++;
}
return result + sign * num;
}
```
该程序首先从标准输入中读取一个算术表达式,然后调用 `evaluate` 函数计算表达式的值,并将结果打印到标准输出中。
`evaluate` 函数接收一个指向字符数组的指针,该字符数组包含一个算术表达式。该函数使用一个循环遍历表达式的每个字符,并根据字符的类型执行不同的操作。如果遇到一个数字字符,函数会将其转换为对应的整数,并将其累加到变量 `num` 中。如果遇到一个加号或减号字符,函数会将当前的 `num` 乘上符号,累加到变量 `result` 中,并将 `num` 重置为 0。如果遇到一个乘号或除号字符,函数会递归调用自身来计算后面的子表达式,并将计算结果与 `num` 相乘或相除。如果遇到一个左括号字符,函数会递归调用自身来计算括号内的子表达式,并将计算结果赋给 `num`。如果遇到一个右括号字符,函数会返回当前的 `num` 值。
该函数使用递归来处理嵌套的括号表达式,这是由于递归可以方便地处理嵌套问题。此外,该函数只使用了一个函数来实现求解算术表达式的功能,这也符合题目要求。
阅读全文