上个例子为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笔记)