编写一个求包含加减乘除括号的算术表达式的值的C语言程序,使用递归,使用一个函数
时间: 2023-07-15 12:10:04 浏览: 99
带括号的算术表达式计算程序
5星 · 资源好评率100%
好的,以下是使用递归方式实现的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 计算算术表达式的值
double calculate(char* expression);
// 计算括号内的表达式的值
double evaluate(char* expression);
int main() {
char expression[100];
printf("请输入包含加减乘除括号的算术表达式:\n");
fgets(expression, 100, stdin);
expression[strlen(expression) - 1] = '\0'; // 去掉字符串末尾的换行符
double result = calculate(expression);
printf("结果为:%.2f\n", result);
return 0;
}
double calculate(char* expression) {
int i;
double result = 0;
char* temp = expression;
while (*temp != '\0') {
if (*temp == '(') {
// 找到和当前左括号对应的右括号的位置
int count = 1; // 左括号数量
char* temp2 = temp + 1;
while (*temp2 != '\0') {
if (*temp2 == '(') {
count++;
} else if (*temp2 == ')') {
count--;
if (count == 0) {
break;
}
}
temp2++;
}
// 计算括号内的表达式的值
char* sub_expression = (char*)malloc(temp2 - temp);
strncpy(sub_expression, temp + 1, temp2 - temp - 1);
sub_expression[temp2 - temp - 1] = '\0';
result = evaluate(sub_expression);
free(sub_expression);
// 替换括号内的表达式
int len = strlen(expression) - (temp2 - temp) + 1;
memmove(temp, temp2 + 1, len);
expression[strlen(expression) - (temp2 - temp) + 1] = '\0';
// 递归计算括号外的表达式
return result + calculate(expression);
} else {
temp++;
}
}
// 没有括号了,直接计算表达式的值
return evaluate(expression);
}
double evaluate(char* expression) {
int i;
double result = 0;
char operator = '+';
for (i = 0; i < strlen(expression); i++) {
if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/') {
operator = expression[i];
} else {
double num = expression[i] - '0';
while (i < strlen(expression) - 1 && expression[i + 1] >= '0' && expression[i + 1] <= '9') {
i++;
num = num * 10 + (expression[i] - '0');
}
switch (operator) {
case '+':
result += num;
break;
case '-':
result -= num;
break;
case '*':
result *= num;
break;
case '/':
result /= num;
break;
}
}
}
return result;
}
```
使用方法:
1. 编译代码:`gcc -o calc calc.c`
2. 运行程序:`./calc`,输入包含加减乘除括号的算术表达式,例如:`(1+2)*(3-4)/5`,然后按回车键即可看到计算结果。
阅读全文