实现一个简单的计算器编写一个C程序,实现一个能够处理多位数运算、括号优先级和多种运算符(如加、减、乘、除、取余、乘方等)的计算器。用判断语句
时间: 2024-12-22 19:16:32 浏览: 2
实现一个简单的计算器需要使用表达式解析库或者递归下降解析算法。在C语言中,我们可以使用`stdio.h`库来获取用户输入,并通过栈或队列来处理运算顺序。以下是一个基本的示例,它并不包括完整的乘方功能和复杂的括号处理,但能展示核心思路:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int precedence(char op) {
if (op == '+' || op == '-') return 1;
if (op == '*' || op == '/') return 2;
return 0; // 没有更高优先级,假设等于0
}
double apply_operator(double num1, double num2, char op) {
switch (op) {
case '+': return num1 + num2;
case '-': return num1 - num2;
case '*': return num1 * num2;
case '/': return num1 / num2; // 要注意除数为零的情况
default: return 0; // 如果不是标准操作符,返回0
}
}
double calculate_expression(char* expression) {
double result = 0;
double temp_num = 0;
int sign = 1;
char current_char;
for (int i = 0; expression[i]; ++i) {
if (isdigit(expression[i])) { // 数字部分
temp_num = temp_num * 10 + expression[i] - '0';
} else if (expression[i] == '(') { // 开始一个新的运算
result = calculate_expression(&expression[i+1]);
i++; // 跳过左括号
} else if (expression[i] == ')') { // 结束当前运算
result += apply_operator(temp_num, sign ? result : 0, sign ? '+' : '-');
temp_num = 0; // 清空数字部分
sign = 1; // 设置下一个运算符前默认为正
i++; // 跳过右括号
} else { // 运算符
while (precedence(current_char) <= precedence(expression[i]) && expression[i - 1] != '(') {
result = apply_operator(result, temp_num, sign);
temp_num = 0;
sign = expression[i] == '-' ? -1 : 1;
i--;
}
expression[i] = current_char; // 移动到下个未处理的运算符
current_char = expression[i];
}
}
result += apply_operator(temp_num, sign ? result : 0, sign); // 最后一次运算
return result;
}
int main() {
char expression[100];
printf("请输入数学表达式(例如: 1+2*(3-4)/5): ");
fgets(expression, sizeof(expression), stdin);
// 去掉换行符
expression[strlen(expression) - 1] = '\0';
double result = calculate_expression(expression);
printf("计算结果: %.2f\n", result);
return 0;
}
```
阅读全文