c语言计算器先计算乘除法再计算加减法
时间: 2023-07-13 10:03:59 浏览: 147
计算器(实现先算乘除后算加减功能+C语言源码)
4星 · 用户满意度95%
好的,可以通过以下步骤实现:
1. 从用户输入中读取一个表达式字符串。
2. 对表达式字符串进行分割,将其中的数字和操作符分开。
3. 对操作符进行优先级排序,将乘除法的操作符放在加减法操作符之前。
4. 对分割后的表达式进行计算,先计算乘除法,再计算加减法。
5. 输出计算结果。
下面是一个简单的C语言计算器的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义操作符优先级
int precedence(char op) {
if (op == '*' || op == '/') {
return 2;
} else if (op == '+' || op == '-') {
return 1;
} else {
return 0;
}
}
// 计算表达式的值
int calculate(char *expr) {
int i;
int num1, num2, result;
char op, *end;
// 初始化栈
int stack_size = strlen(expr);
int *stack = (int*) malloc(stack_size * sizeof(int));
int top = -1;
// 逐个处理表达式中的数字和操作符
for (i = 0; i < strlen(expr); i++) {
if (expr[i] >= '0' && expr[i] <= '9') {
// 如果是数字,则入栈
stack[++top] = strtol(&expr[i], &end, 10);
i += end - &expr[i] - 1;
} else {
// 如果是操作符,则进行计算
while (top > 0 && precedence(expr[i]) <= precedence(expr[i-1])) {
num2 = stack[top--];
op = expr[top--];
num1 = stack[top--];
switch (op) {
case '+':
stack[++top] = num1 + num2;
break;
case '-':
stack[++top] = num1 - num2;
break;
case '*':
stack[++top] = num1 * num2;
break;
case '/':
stack[++top] = num1 / num2;
break;
}
}
// 将操作符入栈
stack[++top] = expr[i];
}
}
// 处理最后一个数字
stack[++top] = strtol(&expr[i], &end, 10);
// 依次计算栈中的表达式
while (top > 0) {
num2 = stack[top--];
op = stack[top--];
num1 = stack[top--];
switch (op) {
case '+':
stack[++top] = num1 + num2;
break;
case '-':
stack[++top] = num1 - num2;
break;
case '*':
stack[++top] = num1 * num2;
break;
case '/':
stack[++top] = num1 / num2;
break;
}
}
// 获取计算结果
result = stack[0];
free(stack);
return result;
}
int main() {
char expr[100];
printf("请输入一个表达式:");
scanf("%s", expr);
int result = calculate(expr);
printf("计算结果为:%d\n", result);
return 0;
}
```
示例运行结果:
```
请输入一个表达式:2+3*4-5/2
计算结果为:12
```
阅读全文