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

给的前两个参考代码是不是有问题

虽然输出的结果都是-50  但是前两个代码表示的是不是2-3+4-5+……-101


提问者:qq_悲伤可以自行处理_03427709 2016-08-08 15:07

个回答

  • 我改名字了
    2016-08-10 10:46:07
    已采纳

    #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",sum);

        return 0;

    }

    /*如果i++ 在 sum+=i*flag; 中i 的值是2,那么循环过程是,2-3+4-5+6-7+8.。。。。。。

    问题来了,当 i=100时,while(i<=100)判断成立,那么 sum+=i*flag;中 i 的值就是101,再

    乘以flag.这时slag为负1.因为每逢 i 的值为奇数时flag中都为负1.那么101为负值。-101.

    你写一个程序。计算2-3+4-5+6-7+8-9。。。。。直到100。计算结果。再减去101.

    我可以告诉你结果。也是-50.

  • 我改名字了
    2016-08-10 11:08:27

    从最后两个程序中 i++位置变化 结果也不同。

    得出结论。虽然本题中两种算法得出结果都是-50

    但是 结果是偶然的。

    老师之所以这么做 ,我想他是故意的,没有问题就不会有答案 。

    谢谢提问者,找出了问题  !!!!

  • 我改名字了
    2016-08-10 11:03:40

    #include<stdio.h>

    int main()

    {

        int sum=0;

        int i=1;

        int flag=1;

        while(i<=10)

        {

            i++;

            sum+=i*flag;

            flag*=-2;

        printf("i=%d\t",i);

        printf("sum=%d\n",sum);

        }

        printf("sum=%d",sum);

        return 0;

    }


  • 我改名字了
    2016-08-10 11:02:45

    #include<stdio.h>

    int main()

    {

        int sum=0;

        int i=1;

        int flag=1;

        while(i<=10)

        {

            sum+=i*flag;

            flag*=-2;

            i++;

        printf("i=%d\t",i);

        printf("sum=%d\n",sum);

        }

        printf("sum=%d",sum);

        return 0;

    }


  • 我改名字了
    2016-08-10 10:55:42

    #include<stdio.h>

    int main()

    {

        int sum=0;

        int i=1;

        int flag=1;

        while(i<=100)

        {

            i++;

            sum+=i*flag;

            flag*=-1;

        printf("i=%d\t",i);

        printf("sum=%d\n",sum);

        }

        printf("sum=%d",sum);

        return 0;

    }


  • 我改名字了
    2016-08-10 10:53:03

    #include<stdio.h>

    int main()

    {

        int sum=0;

        int i=1;

        int flag=1;

        while(i<=100)

        {

            sum+=i*flag;

            flag*=-1;

            i++;

        printf("i=%d\t",i);

        printf("sum=%d\n",sum);

        }

        printf("sum=%d",sum);

        return 0;

    }


  • 我改名字了
    2016-08-10 10:23:01

    我想明白了你们看看对不对。


  • 大学狗
    2016-08-09 17:05:15

    我在vs2013调试了下,结果都是-50,我和你考虑的一样,我觉得代码i++;应该放在flag*=-1;后。

  • qq_悲伤可以自行处理_03427709
    2016-08-09 12:03:06

    57a9558e000143c505000203.jpg

    57a9558f000192d203700424.jpg

    凑三个字

  • 大学狗
    2016-08-08 22:06:30

    这是哪期的?额。。

  • 基尔
    2016-08-08 19:59:06

    ?不是这期问题啊