2.编写程序exp.cpp,利用栈操作求解表达式(83 -30)/(7+5)的值。
时间: 2024-11-13 22:40:15 浏览: 18
为了编写一个程序来计算表达式的值,我们可以使用栈数据结构来模拟运算符优先级解析算法(也称为逆波兰表示法,即后缀表达式)。首先,我们需要一个栈来保存操作数,以及两个指针,一个指向待处理的输入表达式,另一个用于移动到下一个数字。下面是`exp.cpp`的一个简单实现:
```cpp
#include <iostream>
#include <stack>
#include <string>
#include <sstream>
using namespace std;
// 计算后缀表达式
double evaluate_postfix(const string& expression) {
stack<double> nums; // 栈存储操作数
string tokenized_expression = expression;
istringstream iss(tokenized_expression);
char op;
while (iss >> op) {
if (isdigit(op)) {
double num;
iss >> num;
nums.push(num);
} else {
double b = nums.top(); nums.pop();
double a = nums.top(); nums.pop();
switch (op) {
case '+': nums.push(a + b); break;
case '-': nums.push(a - b); break;
case '*': nums.push(a * b); break;
case '/': nums.push(a / b); break;
default: cerr << "未知运算符: " << op << endl;
}
}
}
return nums.top();
}
int main() {
string expression = "(83 - 30) / (7 + 5)";
cout << "表达式 (83 - 30) / (7 + 5) 的值: " << evaluate_postfix(expression) << endl;
return 0;
}
```
在这个程序中,我们首先将表达式转换为字符串流,然后遍历每个字符。如果是数字,我们就把它压入栈中;如果遇到运算符,就从栈中弹出两个操作数,并根据运算符执行相应的计算,结果再压回栈中。最后,栈中剩下的唯一元素就是表达式的值。
阅读全文