C++中 += 和 + - * / 的优先级

假设我们写这样一段程序:

 int a = 3, b = 4, c = 100;
    a += b - c;
    cout << a << endl;
这样输出的结果是-93.这个很难看出来到底是先算的+= 还是先算的b - c,因为这两种顺序结构都是-93.但是我们可以这样改一下:

 int a = 3, b = 4, c = 100;
    a *= b - c;
    cout << a << endl;

这样的结果是-288,这样就可以很清晰的判断出到底是哪个优先级高了.也就是说是先计算了后面的,然后才计算前面的.

类似也其他的-= 也是这样了.

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,我可以帮您实现这个计算器。您需要使用Dev-C++集成开发环境,以便在Windows上编写和运行C++代码。以下是一个基本的框架,您可以根据您的需求进行修改和扩展: ```c++ #include <iostream> #include <stack> #include <string> using namespace std; // 判断一个字符是否为操作符 bool isOperator(char c) { return c == '+' || c == '-' || c == '*' || c == '/'; } // 获取操作符的优先级 int getPriority(char op) { if (op == '+' || op == '-') { return 1; } else if (op == '*' || op == '/') { return 2; } else { return 0; } } // 计算两个数的结果 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; default: return 0; } } // 计算缀表达式的值 double evaluate(string expr) { stack<double> operandStack; // 操作数栈 stack<char> operatorStack; // 操作符栈 for (int i = 0; i < expr.length(); i++) { char c = expr[i]; if (isdigit(c)) { // 如果是数字,压入操作数栈 int j = i; while (j < expr.length() && (isdigit(expr[j]) || expr[j] == '.')) { j++; } operandStack.push(stod(expr.substr(i, j - i))); // 将字符串转换为浮点数 i = j - 1; } else if (isOperator(c)) { // 如果是操作符 while (!operatorStack.empty() && isOperator(operatorStack.top()) && getPriority(operatorStack.top()) >= getPriority(c)) { // 如果操作符栈顶的操作符优先级大于等于当前操作符,就弹出栈顶操作符并计算 double b = operandStack.top(); operandStack.pop(); double a = operandStack.top(); operandStack.pop(); char op = operatorStack.top(); operatorStack.pop(); operandStack.push(calculate(a, b, op)); } operatorStack.push(c); // 将当前操作符压入操作符栈 } else if (c == '(') { // 如果是左括号,压入操作符栈 operatorStack.push(c); } else if (c == ')') { // 如果是右括号,弹出操作符栈的操作符并计算,直到遇到左括号 while (!operatorStack.empty() && operatorStack.top() != '(') { double b = operandStack.top(); operandStack.pop(); double a = operandStack.top(); operandStack.pop(); char op = operatorStack.top(); operatorStack.pop(); operandStack.push(calculate(a, b, op)); } operatorStack.pop(); // 弹出左括号 } } // 处理剩余的操作符 while (!operatorStack.empty()) { double b = operandStack.top(); operandStack.pop(); double a = operandStack.top(); operandStack.pop(); char op = operatorStack.top(); operatorStack.pop(); operandStack.push(calculate(a, b, op)); } return operandStack.top(); // 返回最终结果 } int main() { string expr; cout << "请输入一个包含加减乘除和括号的缀表达式:" << endl; cin >> expr; double result = evaluate(expr); cout << "计算结果为:" << result << endl; return 0; } ``` 这个程序可以接受用户输入一个包含加减乘除和括号的缀表达式,并计算它的值。您可以根据需要进行扩展,例如添加GUI界面和输入框,以便用户可以通过单击按钮输入表达式。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值