使用递归编写一个包含加减乘除和括号的算术表达式求值的C语言程序
时间: 2023-06-24 22:03:44 浏览: 149
以下是一个基于递归的算术表达式求值的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int index = 0; // 全局索引变量
char* expression; // 存储表达式的字符串
int evaluateExpression();
int evaluateTerm();
int evaluateFactor();
int main() {
expression = (char*)malloc(sizeof(char) * 100); // 为表达式字符串分配内存空间
printf("请输入一个包含加减乘除和括号的算术表达式:\n");
scanf("%s", expression);
printf("表达式的结果是:%d\n", evaluateExpression()); // 调用 evaluateExpression() 函数求值
free(expression); // 释放内存空间
return 0;
}
// 函数 evaluateExpression() 对表达式进行求值
int evaluateExpression() {
int value = evaluateTerm(); // 调用 evaluateTerm() 函数求出左操作数的值
while (expression[index] == '+' || expression[index] == '-') { // 遍历表达式中的运算符
char operator = expression[index++]; // 获取当前运算符
int term = evaluateTerm(); // 调用 evaluateTerm() 函数求出右操作数的值
if (operator == '+') {
value += term; // 执行加法运算
} else {
value -= term; // 执行减法运算
}
}
return value;
}
// 函数 evaluateTerm() 对表达式中的乘除运算进行求值
int evaluateTerm() {
int value = evaluateFactor(); // 调用 evaluateFactor() 函数求出左操作数的值
while (expression[index] == '*' || expression[index] == '/') { // 遍历表达式中的运算符
char operator = expression[index++]; // 获取当前运算符
int factor = evaluateFactor(); // 调用 evaluateFactor() 函数求出右操作数的值
if (operator == '*') {
value *= factor; // 执行乘法运算
} else {
value /= factor; // 执行除法运算
}
}
return value;
}
// 函数 evaluateFactor() 对表达式中的因子进行求值
int evaluateFactor() {
int value;
if (expression[index] == '(') { // 如果当前字符是左括号,则调用 evaluateExpression() 函数求出括号内的表达式的值
index++;
value = evaluateExpression();
index++; // 跳过右括号
} else { // 否则,当前字符为数字字符,将其转换成整数类型
value = 0;
while (isdigit(expression[index])) { // 遍历数字字符
value = value * 10 + (expression[index] - '0'); // 将字符转换成数字
index++;
}
}
return value;
}
```
这个程序使用了三个递归函数,分别是 `evaluateExpression()`、`evaluateTerm()` 和 `evaluateFactor()`,分别对表达式、乘除运算和因子进行求值。程序首先读入一个包含加减乘除和括号的算术表达式,然后调用 `evaluateExpression()` 函数对表达式进行求值,并返回结果。在 `evaluateExpression()` 函数中,程序首先调用 `evaluateTerm()` 函数求出左操作数的值,然后遍历表达式中的运算符,执行加法或减法运算。在 `evaluateTerm()` 函数中,程序首先调用 `evaluateFactor()` 函数求出左操作数的值,然后遍历表达式中的运算符,执行乘法或除法运算。在 `evaluateFactor()` 函数中,程序首先判断当前字符是左括号还是数字字符,如果是左括号,则调用 `evaluateExpression()` 函数求出括号内的表达式的值,否则将当前字符转换成整数类型。