14 楼的问题是这样的,这是我在纸上写的
i k b
1 1 0
1 2 -1
2 3 -1
3 4 0
3 5 -1
4 6 -1
5 7 0
5 8 -1
最后在做一次就是8,-2 了
为什么第一次
i k b
1 1 0
第二次i的值还是1?我的意思是第二次的1 2 -1
不太对吧,因为第二次i从2算起了.
#include<stdio.h>
main()
{int i,b,k=0;
for(i=1,i<=5;i++)
{b=i%2;
while(b-->=0) k++;
}
printf("%d,%d",k,b);
}
外边的for循环一共循环5次,每一次循环时i的值分别为:1,2,3,4,5
由于for循环是先判断条件决定是否执行循环体然后再递增控制变量的,条件不满足会直接跳出循环.所以当i的值为6的时候会直接跳出循环体.
所以在循环体中体现出来的i的值只可能由1到5.
然后分析for循环的循环体.
第一句:b=i%2;
分别套用每一次for循环i的值(1到5)
所以每次执行b=i%2;时b的值分别为:1,0,1,0,1
再分析for循环嵌套的while循环,这个循环相对简单,但是有一点比较容易忽略的是在判断条件之前先做b--,虽然做过之后b的值会改变,但必须要在程序中下一次出现b的时候,在判断条件的时候b的值是上一次赋给的.
那么while(b-->=0) k++;的执行结果是当b=1的时候k会增加2,当b=0的时候k会增加1.
那么当for循环结束的时候k的值就是2+1+2+1+2=8
然后我们分析最后一次执行while循环时b的值是什么呢?
当while循环判断条件不成立的时候b的值必然为-1,但是要注意的是在比较之前做了b--
也就是说下次出现的时候b的值为-2
所以当for循环结束之后b的值为-2
程序结束后i的值为6,这是因为for循环是先判断条件决定是否执行循环体然后再递增控制变量的,条件不满足会直接跳出循环.就不会递增控制变量了.也就是说for循环使用i++或者++i效果都差不多.
需要指出的是:
这里有毛病;
∨
for(i=1,i<=5;i++)
这里因该为 ; 因该是发帖者的笔误.
如果为 , 是无法调试通过的.因为不符合for语句格式.
[此贴子已经被作者于2006-9-25 8:38:37编辑过]