为什么此代码输出1?

时间:2018-06-26 01:42:27

标签: c++

我试图逐行找出此C ++代码。 谁能为我解释一下?为什么输出为1?

int main() {
     int sum = 0;
     for (int i=0; i<10; i++)
           if (sum%2==0)
              sum += i; 
           else
              continue;
     cout << sum << endl;
}

3 个答案:

答案 0 :(得分:2)

该代码可以粗略地翻译成英文:

  

从零开始求和,然后,对于且仅当当前和为偶数时,才将0到9之间的每个数字加到总和中。

因此,您将总和加零(因为当前总和为偶数),之后总和仍为零(因此为偶数)。

然后,您将一个加到总和(因为当前总和是偶数),之后总和将为一(因此为奇数)。

然后,您将永远不会再添加任何东西(因为它很奇怪,并且会保持不变,因为您没有添加任何东西)。

这就是为什么要输出一个。


您可能会发现,简单地修改程序以输出其“思维”内容更具指导意义。以下更改有望使它更容易理解:

#include <iostream>
using namespace std;

int main(void) {
    int sum = 0;
    for (int i = 0; i < 10; i++) {
        cout << "Processing " << i
             << ", sum is " << sum
             << ((sum % 2 == 0) ? " (even):" : " (odd): ");
        if (sum % 2 == 0) {
            sum += i;
            cout << "adding " << i << " to get " << sum;
        } else {
            cout << "leaving at " << sum;
        }
        cout << '\n';
    }
    cout << "Final value is " << sum << '\n';
}

运行该代码将向您显示过程中的步骤:

Processing 0, sum is 0 (even): adding 0 to get 0
Processing 1, sum is 0 (even): adding 1 to get 1
Processing 2, sum is 1 (odd):  leaving at 1
Processing 3, sum is 1 (odd):  leaving at 1
Processing 4, sum is 1 (odd):  leaving at 1
Processing 5, sum is 1 (odd):  leaving at 1
Processing 6, sum is 1 (odd):  leaving at 1
Processing 7, sum is 1 (odd):  leaving at 1
Processing 8, sum is 1 (odd):  leaving at 1
Processing 9, sum is 1 (odd):  leaving at 1
Final value is 1

答案 1 :(得分:0)

我创建了一个表,试图模拟调试步骤,以便您了解代码的逻辑并查看为什么将结果评估为1

debug steps

推荐:学习如何调试。根据您使用的IDE,它们使用不同的方法调试代码。当您想了解代码的执行方式时,调试会派上用场。

关于您的代码:

  • 尝试在可能的情况下使用花括号,这可以帮助您的代码更简洁,更易懂;

  • 否则,继续:您不需要此行代码,因为在其他条件之后循环中无可跳过;

答案 2 :(得分:0)

交换比较结果

observable

@RequestMapping(value = "/authenticate", method = RequestMethod.POST)
@ResponseBody
public AuthenticateDto dashboard(@RequestParam("userName") String username,@RequestParam("pwd") String pwd) throws IOException
    { 
    return new AuthenticateDto(service.authenticate(username,pwd));

}

会很有意义。 这将得出偶数0 + 2 + 4 + 6 + 8-> 20