用栈做一个四则混合运算计算器程序
时间: 2024-02-14 11:08:12 浏览: 116
好的,栈是一种后进先出的数据结构,可以用来实现四则混合运算计算器程序。具体实现步骤如下:
1. 定义一个栈来存储数字和运算符,可以使用数组或链表来实现。
2. 读入待计算的表达式,遇到数字直接入栈,遇到运算符则与栈顶元素进行比较,如果栈顶元素优先级比当前运算符高,则将栈顶元素弹出并进行运算,将结果再入栈,直到栈顶元素优先级比当前运算符低或相等为止,然后将当前运算符入栈。
3. 遇到左括号直接入栈,遇到右括号则将栈中元素弹出并进行运算,直到遇到左括号为止,左括号也要被弹出。
4. 最后将栈中剩余的元素弹出并进行运算,直到栈为空,得到计算结果。
下面是一个示例代码(使用数组实现栈):
```
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 100; // 栈的最大容量
int stk[MAXN], top = -1; // 定义栈和栈顶指针
// 判断运算符优先级,返回1表示栈顶元素优先级高,返回0表示相等或低
int priority(char ch) {
if (ch == '+' || ch == '-') return 1;
if (ch == '*' || ch == '/') return 2;
return 0;
}
// 计算两个数的运算结果
int calculate(int a, int b, char op) {
if (op == '+') return a + b;
if (op == '-') return a - b;
if (op == '*') return a * b;
if (op == '/') return a / b;
return 0; // 不会执行到这里
}
int main() {
char s[MAXN]; // 存储表达式
cin >> s;
int len = strlen(s);
for (int i = 0; i < len; i++) {
if (s[i] >= '0' && s[i] <= '9') { // 数字直接入栈
int num = s[i] - '0';
while (i + 1 < len && s[i + 1] >= '0' && s[i + 1] <= '9') {
num = num * 10 + s[i + 1] - '0';
i++;
}
stk[++top] = num;
} else if (s[i] == '(') { // 左括号直接入栈
stk[++top] = s[i];
} else if (s[i] == ')') { // 右括号弹出栈中元素并计算
while (top > 0 && stk[top] != '(') {
int b = stk[top--];
char op = stk[top--];
int a = stk[top--];
stk[++top] = calculate(a, b, op);
}
top--; // 弹出左括号
} else { // 运算符比较优先级
while (top > 0 && priority(stk[top]) >= priority(s[i])) {
int b = stk[top--];
char op = stk[top--];
int a = stk[top--];
stk[++top] = calculate(a, b, op);
}
stk[++top] = s[i]; // 当前运算符入栈
}
}
while (top > 0) { // 栈中剩余元素计算
int b = stk[top--];
char op = stk[top--];
int a = stk[top--];
stk[++top] = calculate(a, b, op);
}
cout << stk[0] << endl; // 输出计算结果
return 0;
}
```
注意:本程序只支持整数的四则混合运算,不支持负数、小数、括号内的特殊运算等情况,仅供参考。
阅读全文