【问题标题】:How Do I Translate This Algebraic Expression In C++?如何在 C++ 中翻译这个代数表达式?
【发布时间】:2017-01-23 00:08:21
【问题描述】:

我需要用 C++ 编写并执行一个计算表达式值的程序:

5x^2 + 12y / 3x , 其中 x = 12, y = 9.8

这就是我所拥有的:

int num1 = 12; float num2 = 9.8; float totalResult;
totalResult = 5 * num1 * num2 + 12 * num2 / 3 * num1;

cout << totalResult;

答案是 23.2667,但我得到了错误的结果。

【问题讨论】:

  • 对于一个高效的算法,手动计算,然后让它返回答案。
  • @RamandeepPunia 我已将我的代码包含在问题中。可以看看吗?
  • @4castle 我试试看,谢谢。我已经在问题中包含了我的代码如果你想看看它。
  • 我认为你需要数学课。答案应该是 723.2667 而且你的一小段代码确实有错误
  • @RamandeepPunia 不,答案是 23.2667。我的工作是制作一个小程序来计算上面发布的表达式的值。显然我的代码中有某种数学错误。这就是我想要弄清楚的。

标签: c++ math expression algebra arithmetic-expressions


【解决方案1】:

您的问题是操作顺序(以及num1 * num2 上的拼写错误)。

您建议的正确答案是 23.2667,这只有在您将 / 解释为最后一个操作时才有可能。要强制除法最后发生,请将左侧和右侧放在括号中:

totalResult = (5 * num1 * num1 + 12 * num2) / (3 * num1);

这样它按以下顺序执行:

                 1      2      4    3       6    5
totalResult = (5 * num1 * num1 + 12 * num2) / (3 * num1);

否则,它会按以下顺序执行:

                1      2      6    3      4   5
totalResult = 5 * num1 * num1 + 12 * num2 / 3 * num1;

这是一个使用 JavaScript 的证明:

var num1 = 12; var num2 = 9.8; 
var totalResult = (5 * num1 * num1 + 12 * num2) / (3 * num1);
console.log(totalResult);

Operator Precedence Reference

【讨论】:

  • 应该是5*num1*num1而不是num2
  • @RamandeepPunia 谢谢,我在测试 JavaScript 版本时看到了
  • 感谢您的反馈!我知道这是运算符优先级或类似性质的问题。感谢您提供运算符优先级参考链接。我会花一些时间阅读它。再次感谢您抽出时间来回答我的问题。保重!
猜你喜欢
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 2021-07-25
  • 2010-09-30
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多