C ++ - 乘法/加法,两个整数,然后确定它们是偶数还是奇数

时间:2016-01-18 16:45:45

标签: c++ integer multiplication addition

我遇到一个简单程序的问题,该程序将乘以2个整数并打印输出,确定它是偶数还是奇数。它还将在开头添加2个整数输入,并在下一行中执行相同操作。乘法工作正常,如果产品是偶数或奇数,则显示。但是,添加不是这样做的,我不明白为什么。这是我的代码:

#include <iostream>
using namespace std;

int main (){
    int a, b;
    cout << "Please enter an integer: ";
    cin >> a;

    cout << "Please enter another integer: ";
    cin >> b;

    if (a*b %2== 0){
        cout << "The product of " << a << " and " << b << " is " << (a*b)
                                                       << " and is even." << endl;
    }
    else {
        cout << "The product of " << a << " and " << b << " is " << (a*b)
                                                        << " and is odd." << endl;
    };

    if (a+b %2== 0){
        cout << "The sum of " << a << " and " << b << " is " << (a+b)
                                                        << " and is even." << endl;
    }
    else {
        cout << "The sum of " << a << " and " << b << " is " << (a+b)
                                                        << " and is odd." << endl;
    }
    return (0);
}

非常感谢任何帮助和解释。谢谢!

3 个答案:

答案 0 :(得分:7)

Operator Precedence

基本上,%会在+之前处理,所以您的测试:

if (a+b % 2 == 0)

就像

一样
if (a + (b%2) == 0)
除非b均为 a0,否则

并不是很有意义,并且很少会成为现实。

与乘法(*/%)相关的所有操作具有相同的优先级,并且从左到右处理,因此

if (a*b % 2 == 0)

运行正常,如:

if ((a*b) % 2 == 0)

恰好是你真正的意思。

但是,在与添加(+-)相关的操作之前处理这些乘法运算。因此,%会在+之前分组,从而导致您的具体问题。

你可能已经了解了学校的操作顺序,例如我被教导BODMAS。相同的规则适用于C ++。

就我个人而言,我发现最好在任何类型的复合表达中使用括号,即使它不是绝对必要的。它可以使代码更容易阅读,而不是试图记住你头脑中的所有规则。所以我更喜欢:

if ((a*b) % 2 == 0) // ...
if ((a+b) % 2 == 0) // ...

即使第一个中的额外括号并非真正需要。

答案 1 :(得分:3)

Operator precedence%来自+所以

a+b %2== 0

实际上是

a + (b % 2) == 0

您需要使用()

打包添加内容
(a + b) % 2 == 0

答案 2 :(得分:1)

可能的操作顺序。

为了确保您的代码按照您的意图行事,您可能希望像这样重写:

if (((a*b) %2)== 0){
cout << "The product of " << a << " and " << b << " is " << (a*b) << " and is even." << endl;
}
else {
cout << "The product of " << a << " and " << b << " is " << (a*b) << " and is odd." << endl;
};

if (((a+b) %2)== 0){
cout << "The sum of " << a << " and " << b << " is " << (a+b) << " and is even." << endl;
}
else {
cout << "The sum of " << a << " and " << b << " is " << (a+b) << " and is odd." << endl;
}

然后,您可以逐步删除括号,直到您确信代码可读但仍然正确。