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

i++放在运算首位的问题

这里有个疑问,i++放在前面,在进行计算sum,因为前面不是已经定义过i=1,那么第一步计算不就成了sum=sum-2了?而且无论i++放在首位还是末位都是一样的-50,我的理解是i++放在首位不是应该少+一个1了吗,求解,困惑中

提问者:hello_瓜牛 2016-11-06 11:57

个回答

  • 慕后端3326841
    2016-11-29 01:03:16

    题目是计算1-2+3-4+...-100的值,

    对比三个答案,while和do-while是先自加,再求和;而 for循环是先求和,再自加,明显计算是有区别的。

    while和do-while循环把i++放在前面,实际运算的是2-3+4-5+...-101,值虽然也为-50,却不对。

    for循环运算的是1-2+3-4+...-100,值为-50,正确。


    以while循环为例,查看每次i自加及sum求和的值。

    #include <stdio.h>
    int main()
    {
         int sum = 0;  
        int i = 1;    
        int flag = 1;
        while(i<=100)
        {
            i++;
            sum+=i*flag;
            printf("%d* %d= %d\n",i,flag,sum);      //查看每次i自加及sum求和的值
            flag*=-1;
        }
        printf("%d\n",sum);
        return 0;
    }



  • Morricone
    2016-11-09 19:12:08

    确实是少加一个 1 ,用for的话参考代码是正确的 ,个人认为 前面用do和do...while是有误的

  • 慕粉4320481
    2016-11-06 22:03:33

    i++是先输出再加1,所以应该是先输出1,但是此时电脑里面记下来的应该是2;所以第一次是1,没有错的。第二次电脑输出2,但是记录下来的是3。。。

  • hello_瓜牛
    2016-11-06 12:16:28

    我觉得题目有问题,首先i++放在第一位,此时i值不是应该是2,第一次运算就直接成了sum=2,而不是1了,如果i++放在末位,应该就对了吧,而且放在首位是从2计算到101啊,直接编一个全+到5的,按照i++放在首位得到20,放在末位就得到15,所以我觉得网友那些给的i++放在首位的答案是错的,有点偷换概念的感觉,虽然答案都是-50.