键盘输入一个算术的运算式子,输出运算结果。这里规定可以接收五个算术运算的符号:+、一、*、/、"(乘方)。输入这五个符号以外的运算符号则提醒出错 请将变量定义为 double 类型 本程序需要从键盘接收一个表达式,根据表达式中的运算符号实现相应的运算并将结果保存下来并输出
时间: 2023-05-21 22:01:12 浏览: 174
好的,我可以回答这个问题。以下是一个示例代码,可以实现输入一个算术运算式子并输出运算结果:
```c++
#include <iostream>
#include <stack>
#include <string>
#include <cmath>
using namespace std;
double calculate(double a, double b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
case '^': return pow(a, b);
default: return 0;
}
}
int main() {
string expr;
getline(cin, expr);
stack<double> nums;
stack<char> ops;
for (int i = 0; i < expr.length(); i++) {
if (isdigit(expr[i])) {
double num = 0;
while (i < expr.length() && isdigit(expr[i])) {
num = num * 10 + (expr[i] - '0');
i++;
}
i--;
nums.push(num);
} else if (expr[i] == '(') {
ops.push(expr[i]);
} else if (expr[i] == ')') {
while (ops.top() != '(') {
double b = nums.top();
nums.pop();
double a = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
nums.push(calculate(a, b, op));
}
ops.pop();
} else if (expr[i] == '+' || expr[i] == '-') {
while (!ops.empty() && ops.top() != '(') {
double b = nums.top();
nums.pop();
double a = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
nums.push(calculate(a, b, op));
}
ops.push(expr[i]);
} else if (expr[i] == '*' || expr[i] == '/') {
while (!ops.empty() && (ops.top() == '*' || ops.top() == '/')) {
double b = nums.top();
nums.pop();
double a = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
nums.push(calculate(a, b, op));
}
ops.push(expr[i]);
} else if (expr[i] == '^') {
ops.push(expr[i]);
} else {
cout << "Error: Invalid operator" << endl;
return 0;
}
}
while (!ops.empty()) {
double b = nums.top();
nums.pop();
double a = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
nums.push(calculate(a, b, op));
}
cout << nums.top() << endl;
return 0;
}
```
这个程序使用了两个栈,一个用来存储数字,一个用来存储运算符。遍历输入的表达式,如果遇到数字则将其压入数字栈中,如果遇到左括号则将其压入运算符栈中,如果遇到右括号则将栈中的运算符和数字进行计算直到遇到左括号,如果遇到加减乘除则将栈中的运算符和数字进行计算直到栈顶的运算符优先级低于当前运算符,如果遇到乘方则将其压入运算符栈中。最后将栈中剩余的运算符和数字进行计算,最终得到表达式的运算结果。
阅读全文