问答详情
源自:4-10 循环结构之三种循环比较

标准答案好像有问题

#include <stdio.h>

int main()
{
    int sum = 0;
    int i = 1;
    int flag = 1;
    while(i<=100)
    {
        i++;
        sum += i * flag;
        flag *= -1;
        printf("%d\n", sum);  // 执行的第一步结果是2,是错误的。虽然最终结果是-50没错,但是第一步是sum += i * flag的时候,i是2
    }
    return 0;
}


提问者:慕斯卡2483961 2020-09-25 04:20

个回答

  • qq_慕雪1432908
    2020-10-04 14:17:59

    可是我觉得i++本来的定义就是先读数,再取值,也就是你把i++放在前面也没关系,因为它会先读取1,再取值为2,所以在第一次循环中实际参加的数就是1

  • 慕斯卡2483961
    2020-09-25 04:23:41

    #include <stdio.h>
    // 正确答案应该是这样
    int main()
    {
        int sum = 0;
        int i = 1;
        int flag = 1;
        
        while(i<=100)
        {
            sum += i * flag;
            flag *= -1;
            i++;
            printf("%d\n", sum);
        }
        return 0;
        
    }