使用递归函数编写C语言算术表达式求值程序
时间: 2024-05-10 22:15:42 浏览: 134
以下是使用递归函数编写C语言算术表达式求值程序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int get_value(char* expr);
int get_term(char* expr, int* index);
int get_factor(char* expr, int* index);
int main() {
char expr[100];
printf("Enter an arithmetic expression: ");
scanf("%s", expr);
int value = get_value(expr);
printf("Result: %d\n", value);
return 0;
}
// 递归函数求值
int get_value(char* expr) {
int index = 0;
int value = get_term(expr, &index);
while (expr[index] != '\0') {
char op = expr[index];
if (op == '+') {
index++;
value += get_term(expr, &index);
} else if (op == '-') {
index++;
value -= get_term(expr, &index);
} else {
printf("Invalid operator: %c\n", op);
exit(1);
}
}
return value;
}
// 获取项
int get_term(char* expr, int* index) {
int value = get_factor(expr, index);
while (expr[*index] != '\0') {
char op = expr[*index];
if (op == '*') {
(*index)++;
value *= get_factor(expr, index);
} else if (op == '/') {
(*index)++;
int factor = get_factor(expr, index);
if (factor == 0) {
printf("Division by zero!\n");
exit(1);
}
value /= factor;
} else {
break;
}
}
return value;
}
// 获取因子
int get_factor(char* expr, int* index) {
int value = 0;
if (expr[*index] == '(') {
(*index)++;
value = get_value(expr);
if (expr[*index] != ')') {
printf("Missing closing parenthesis!\n");
exit(1);
}
(*index)++;
} else if (isdigit(expr[*index])) {
while (isdigit(expr[*index])) {
value = value * 10 + (expr[*index] - '0');
(*index)++;
}
} else {
printf("Invalid character: %c\n", expr[*index]);
exit(1);
}
return value;
}
```
这个程序可以处理带有加减乘除运算符和括号的算术表达式。它使用了三个递归函数,分别用于求整个表达式的值、获取一个项的值和获取一个因子的值。其中,`get_value()` 函数调用 `get_term()` 函数来获取每个项的值,然后根据运算符进行加法或减法运算。`get_term()` 函数调用 `get_factor()` 函数来获取每个因子的值,然后根据运算符进行乘法或除法运算。`get_factor()` 函数根据当前字符是数字还是左括号,分别获取数字或者递归计算括号内的表达式的值。
阅读全文