编写一个包含加减乘除括号的算术表达式求值的C语言程序,使用递归,一个函数参数
时间: 2023-07-15 14:10:18 浏览: 124
用c语言编写的加减乘除计算器程序.docx
以下是一个使用递归的C语言程序,可以处理包含加减乘除括号的算术表达式求值:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
// 定义全局变量,记录当前读入的字符和位置
char currentChar;
int currentPosition;
// 从输入字符串中读取下一个字符
void getNextChar(char* input) {
currentChar = input[currentPosition++];
}
// 递归函数,用于求解一个表达式的值
int evalExpression(char* input) {
int result = evalTerm(input); // 先求解第一个因子的值
while (currentChar == '+' || currentChar == '-') {
char op = currentChar;
getNextChar(input);
int term = evalTerm(input); // 再求解下一个因子的值
if (op == '+') {
result += term;
} else {
result -= term;
}
}
return result;
}
// 递归函数,用于求解一个项的值
int evalTerm(char* input) {
int result = evalFactor(input); // 先求解第一个因子的值
while (currentChar == '*' || currentChar == '/') {
char op = currentChar;
getNextChar(input);
int factor = evalFactor(input); // 再求解下一个因子的值
if (op == '*') {
result *= factor;
} else {
result /= factor;
}
}
return result;
}
// 递归函数,用于求解一个因子的值
int evalFactor(char* input) {
int result;
if (currentChar == '(') { // 如果当前字符是左括号,需要递归处理括号内的表达式
getNextChar(input); // 读取下一个字符
result = evalExpression(input); // 求解括号内的表达式的值
if (currentChar != ')') { // 括号没有正确闭合,报错并退出程序
printf("Error: missing ')'\n");
exit(1);
}
getNextChar(input); // 读取下一个字符
} else { // 如果当前字符不是左括号,那么就是数字
int start = currentPosition - 1;
while (isdigit(currentChar)) {
getNextChar(input);
}
int end = currentPosition - 1;
if (start == end) { // 没有读入任何数字,报错并退出程序
printf("Error: expected number\n");
exit(1);
}
result = atoi(input + start); // 将读入的数字字符串转换为整数
}
return result;
}
// 主函数,用于测试程序
int main() {
char input[100];
printf("Enter an expression: ");
fgets(input, sizeof(input), stdin);
currentPosition = 0;
getNextChar(input);
int result = evalExpression(input);
if (currentChar != '\0') { // 还有未处理的字符,报错并退出程序
printf("Error: unexpected character '%c'\n", currentChar);
exit(1);
}
printf("Result = %d\n", result);
return 0;
}
```
该程序的基本思路是:从输入字符串中读取一个字符,然后根据当前字符是数字、加号、减号、乘号、除号还是左括号分别进行处理,使用递归的方式求解整个表达式的值。注意,为了方便起见,该程序没有考虑负数的情况,也没有实现浮点数的运算。
阅读全文