问答详情
源自:4-6 循环结构之while循环

while循环体内语句执行的顺序

#include <stdio.h>
int main()
{
    int i,sum=0;
    i=1;
    while( i<=100 ) //循环条件应该是什么呢?
    {
        sum=sum+i;  //这里是不是应该改变循环变量的值
  i++;
    }
    printf("100以内所有整数之和为:%d\n", sum);
    return 0;
}


#include <stdio.h>
int main()
{
    int i,sum=0;
    i=1;
    while( i<=100 ) //循环条件应该是什么呢?
    {
  i++;
        sum=sum+i;  //这里是不是应该改变循环变量的值
    }
    printf("100以内所有整数之和为:%d\n", sum);
    return 0;
}

以上两段代码有什么区别吗

提问者:慕粉4179841 2016-11-06 21:47

个回答

  • 蜀山妖道
    2017-02-03 01:47:23

    楼主可以把100改成3以内整数求和,然后单步把i和sum的答案写到纸上就明白了。

    例如:

        int sum=0;
        int i=1;
        while(i<=3)
        {
            i++;
            sum=sum+i;
            //i++;
        }
        printf("3以内所有整数和为:%d\n",sum);

    正确输入答案应该是:6

    此时,用i++在前,会得到错误的值,因为:

    第一次循环(此时i=1,可以进入循环):

    i=2 (i=i+1   i=2)
    0+2=2 (sum = sum +i)
    第二次循环(此时i=2,可以进入循环):
    i=3(i=i+1   i=3)

    2+3=5
    第三次循环(此时i=3,可以进入循环):
    i=4
    5+4=9

    明显比正确答案大,而且如楼上所述,还少算了i=1的情况。

    正确写法是i++在sum=sum+i后边。从编程顺序也可以理解,先求和,在递增,再求和。


  • 路过无痕
    2016-11-06 22:14:19

    #include <stdio.h> 
    int main() 
    { 
        int i,sum=0; 
        i=1; 
        while( i<100 ) //循环条件应该是什么呢? 
        { 
            sum=sum+i;  //这里是不是应该改变循环变量的值 
            i++;
        } 
        printf("100以内所有整数之和为:%d\n", sum); 
        return 0; 
    }
    
    #include <stdio.h> 
    int main() 
    { 
        int i,sum=0; 
        i=1; 
        while( i<100 ) //循环条件应该是什么呢?(100以内的数是从1~99,不包含100. ) 
        { 
            i++;//从这里已经改变i的值了,下面已经开始从2开始计算了,这样就少算了1的值了
            sum=sum+i;  //这里是不是应该改变循环变量的值
        } 
        printf("100以内所有整数之和为:%d\n", sum); 
        return 0; 
    }


  • 路过无痕
    2016-11-06 22:07:38

    #include <stdio.h> 
    int main() 
    { 
        int i,sum=0; 
        i=1; 
        while( i<100 ) //循环条件应该是什么呢? 
        { 
            sum=sum+i;  //这里是不是应该改变循环变量的值 
            i++;
        } 
        printf("100以内所有整数之和为:%d\n", sum); 
        return 0; 
    }