C语言编写一个有优先级的计算器
时间: 2024-10-02 09:02:39 浏览: 36
利用C语言编写的一个计算器
5星 · 资源好评率100%
在C语言中编写一个有优先级的计算器,通常会涉及到语法解析和表达式求值,特别是使用栈的数据结构来处理操作符的优先级。这里是一个简单的示例,我们将使用递归下降解析法来实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct {
char op;
int precedence;
} Operator;
Operator operators[] = {
{'+', 1},
{'-', 1},
{'*', 2},
{'/', 2},
{'^', 3}, // 这里假设 '^' 的优先级高于 '*' 和 '/'
};
double apply_operator(double a, double b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': if (b != 0) return a / b; else printf("Error: Division by zero.\n"); // 防止除以零
default: return 0; // 如果遇到未知运算符,停止解析并返回0
}
}
double calculate_expression(char* expression) {
double value = atof(expression); // 获取第一个数字作为开始
for (int i = 0; expression[i]; i++) {
if (isdigit(expression[i])) continue; // 跳过数字
int j = i;
while (j < strlen(expression) && !isspace(expression[j]) && isdigit(expression[j + 1]) == 0) j++; // 找到下一个空格或非数字位置
double num = atof(expression + i); // 计算右侧的操作数
value = apply_operator(value, num, expression[i]); // 应用运算符
i = j; // 更新指针到下一个字符
}
return value;
}
int main() {
char expression[50];
printf("Enter an expression with priority operators (e.g., 2+3*(4-1)^2): ");
fgets(expression, sizeof(expression), stdin);
expression[strlen(expression) - 1] = '\0'; // 去掉换行符
double result = calculate_expression(expression);
printf("Result: %.2f\n", result);
return 0;
}
阅读全文