c语言计算器
模拟简单运算器的工作,可以支持带括号的数学表达式计算,遵循数学运算的优先级规则:
先计算括号内的运算;
其次计算乘除法;
最后计算加减法。
#include <stdio.h>
#include <stdlib.h>
int calc(int num1, int num2, char op) {
switch(op) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
return num1 / num2;
default:
return 0;
}
}
int main() {
int num1 = 0, num2 = 0, result = 0;
char op = 0;
char c = getchar();
// 先读取一个数字
if(c >= '0' && c <= '9') {
num1 = c - '0';
}
else {
printf("ERROR");
return 0;
}
// 读取运算符和数字,进行计算
while((c = getchar()) != '\n') {
if(c == '(') { // 如果是左括号,递归计算括号内的表达式
num2 = main();
}
else if(c >= '0' && c <= '9') { // 如果是数字,直接计算
num2 = c - '0';
}
else if(c == '+' || c == '-') { // 如果是加减法,直接计算
result = calc(num1, num2, op);
num1 = result;
num2 = 0;
op = c;
}
else if(c == '*' || c == '/') { // 如果是乘除法,判断上一个运算符是否是乘除法
if(op == '*' || op == '/') { // 如果上一个运算符是乘除法,直接计算
result = calc(num1, num2, op);
num1 = result;
num2 = 0;
op = c;
}
else { // 如果上一个运算符是加减法,先缓存下来
num1 = num2;
num2 = 0;
op = c;
}
}
else if(c == ')') { // 如果是右括号,返回括号内计算的结果
result = calc(num1, num2, op);
return result;
}
}
// 计算最终结果
result = calc(num1, num2, op);
printf("%d", result);
return 0;
}
(2+3)*4-5/2=17