用C语言设计一个程序,实现简单整数的四则运算(运算对象不小于0),包括加减乘除和小括号
时间: 2024-05-02 21:21:11 浏览: 115
以下是一个简单的整数四则运算程序,支持加减乘除和小括号。
```c
#include <stdio.h>
#include <stdlib.h>
int priority(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case '(':
return 0;
default:
return -1;
}
}
int calculate(int a, int b, char op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
return 0;
}
int main() {
char expr[100];
scanf("%s", expr);
int nums[100];
char ops[100];
int num_top = -1;
int op_top = -1;
int i = 0;
while (expr[i] != '\0') {
if (expr[i] >= '0' && expr[i] <= '9') {
int num = 0;
while (expr[i] >= '0' && expr[i] <= '9') {
num = num * 10 + expr[i] - '0';
i++;
}
num_top++;
nums[num_top] = num;
} else if (expr[i] == '(') {
op_top++;
ops[op_top] = '(';
i++;
} else if (expr[i] == ')') {
while (ops[op_top] != '(') {
int b = nums[num_top];
num_top--;
int a = nums[num_top];
num_top--;
char op = ops[op_top];
op_top--;
int result = calculate(a, b, op);
num_top++;
nums[num_top] = result;
}
op_top--;
i++;
} else {
while (op_top >= 0 && priority(ops[op_top]) >= priority(expr[i])) {
int b = nums[num_top];
num_top--;
int a = nums[num_top];
num_top--;
char op = ops[op_top];
op_top--;
int result = calculate(a, b, op);
num_top++;
nums[num_top] = result;
}
op_top++;
ops[op_top] = expr[i];
i++;
}
}
while (op_top >= 0) {
int b = nums[num_top];
num_top--;
int a = nums[num_top];
num_top--;
char op = ops[op_top];
op_top--;
int result = calculate(a, b, op);
num_top++;
nums[num_top] = result;
}
printf("%d\n", nums[0]);
return 0;
}
```
该程序的基本思路是使用两个栈,一个存储数字,一个存储运算符。遍历表达式中的每个字符,如果是数字,则将其转换为整数并入栈;如果是左括号,则将其入栈;如果是右括号,则不断从栈中取出数字和运算符,直到遇到左括号为止,然后将计算结果入栈;如果是运算符,则不断从栈中取出数字和运算符,直到栈顶的运算符优先级小于当前运算符为止,然后将计算结果入栈。最终,栈中只剩下一个数字,即为表达式的值。
阅读全文