首页 > 技术文章 > 接上个例子1-100之间能被三整除的流程步骤详解。

Yang-bin 2014-02-12 14:31 原文

上个例子为1-100之间所有能被3整除的数字之和,今天这个笔记将详细记录这个代码的流程。

假设将if语句开始到printf 用{}括起来,看看这段代码是怎样进行运算的。

int main(void)
{
    int i,sum = 0;
    for(i=3;i<=10;++i)
    {
       if(i%3 == 0)
       sum = sum +i;
       printf("sum=%d\n", sum);
       
    }

  system("pause");
  return 0;
}

输出结果为:

sum=3
sum=3
sum=3
sum=9
sum=9
sum=9
sum=18
sum=18

为什么将printf放进{}内会得出这样的运算结果呢?

解析详细步骤如下:

首先,自己计算一下,3-10会循环几次,++i 就是i+1 每次+1 那么i=3 < 10成立 循环一次,++i就是i+1,得出i=4;小于10成立再次循环 ++i 得出i=5;小于10再次循环++i得6,继续循环一直到i=10时<=10 等于10成立,再次循环至++i,这时i=11,11<=10不成立,for循环停止。

所以得出上述数字为:

3 4 5 6 7 8 9 10 11 //上述代码输出的结果为3  3  3  9  9  9  18  18

看一下为什么会是这个结果。步骤如下。

i=3为第一步,i<=10为第二步,若成立执行第三步,第三步是 if(i%3==0),如果i被三整除余数为0,执行第四步sum=sum+i,然后执行第五步输出printf,最后循环至++i第六步。

顺序步骤为(以下将用步骤序号表示)

  • 1----i=3
  • 2----i<=10
  • 3----if(i%3==0)
  • 4----sum=sum+i
  • 5----printf("%d\n", sum)
  • 6----++i

然后依次对上述步骤计算,当i=3时,且第二步i<=10成立,执行第三步,3能被3整除余数为0,执行第四步,sum=sum+i,sum=0,i=3,得出结果0+3,sum=3,输出。

所以

3   4   5   6   7   8   9   10   11 //sum=0,i=3,所以sum+i,sum为3

3

sum=3输出后执行第六步的++1,这时候i=4,<=10成立,执行步骤3,4被3整除余数不等于0,所以不执行4,直接执行5输出,这时候sum依然等于3,

3   4   5   6   7   8   9   10   11 //sum=3,4不能被3整除所以i=4

3   3

i=4执行5输出后sum为3,继续循环至6,++i后,i=4++i变成5,<=10成立,执行3,5不能被3整除,不执行4,执行5输出,这时候sum继续为3,i=5

3   4   5   6   7   8   9   10   11 //sum=3,5不能被3整除 i=5

3   3   3

i=5继续循环第六步,++i后,i=6,执行2,小于等于10成立,执行3,被3整除余数为0,执行4,sum=sum+i,sum=3,i=6,3+6=9,第5步输出sum的值为9,继续循环第六步的++i

3   4   5   6   7   8   9   10   11 //sum=3,6能被3整除 i=6,sum+i=9

3   3   3   9

i=6循环到第六步的++i时,i变成了7,执行步骤2小于等于10成立,执行3,7被3整除余数不为0,不执行4,执行5输出,这时候sum=9,执行第六步++i

3   4   5   6   7   8   9   10   11 //sum=9,7不能被3整除 i=7

3   3   3   9   9

i=7 执行第六步++i后,i=8,执行2时小于等于10成立,执行3,8被3整除余数不为0,不执行4,执行5输出,sum还是9,执行6,++i

3   4   5   6   7   8   9   10   11 //sum=9,8不能被3整除 i=8

3   3   3   9   9   9

i=8,执行6后,i=9,执行2小于等于10成立,执行3,9被3整除余数=0成立,执行4,sum=sum+i,sum是9,i 现在也是9,所以sum=9+9,执行5输出sum的结果为18,执行6,++i

3   4   5   6   7   8    9     10   11 //sum=18,9能被3整除 i=9,执行4,sum=sum+i

3   3   3   9   9   9   18

i=9,执行6,++i,i变成了10,执行2,10<=10 等于10成立,执行3,10不能被3整除,不执行4,执行5输出,sum是18,执行6,++i

3   4   5   6   7   8    9     10   11 //sum=18,10不能被3整除 i=10

3   3   3   9   9   9   18    18

i=10,执行6的++i后变成了11,执行2,11<=10不成立,此次for循环结束……

得出结果

3   4   5   6   7   8    9     10   11 //i=11时,<=10不成立循环结束不再执行。

3   3   3   9   9   9   18    18

以上便是,sum=3 sum =3 sum=3 sum=9 sum=9 sum=9 sum=18 sum=18的具体运算步骤。

标记:

i%3==0 意思为i被3整除的余数==0 成立为真,否则为假。如3%3的余数为0,4除3余数不为0.

如若该语句我有理解错误,还望看到此博的朋友给与正确的解释。

附图(iPad笔记)

推荐阅读