i++是先用i进行输出,然后i值才加1的
你说的是++i
实际是先输出10,然后i加上1为11,继续循环,i/=2使得i变为5,输出5,然后i变为6,再循环i为3,输出3,i为4,再循环i为2,输出2,i为3,再循环i为1,,不满足i>1条件,循环结束
最终输出为10 5 3 2
你邏輯錯誤
這個迴圈沒有宣告任何 i=(i+1) / 2
他這寫法 i/=2 意思是 i=i / 2
这就得说道i++和++i的概念了,i++是先赋值给别人,再给自己赋值,而你输出的print里面只有i++,此时i还没有被赋值,所以i=10,当循环体对i进行除2的时候,i此时才是11,11/2取整就等于5了,5++就等于6,6/2=3,3+1=4,4/2=2,最后i<1跳出循环。
如果这个题目里面输出的是++i,结果就跟你想的一样了,因为++i是先赋值,后使用,而i++是先使用后赋值
你主要是前置++和后置++的关系没有搞清楚,这方面你不用担心,我专门做了一个专题。
http://t.csdn.cn/ZhYiT
这里面包含了所有前置和后置的问题
顺序:i = 10; i > 1; printf("%d",i++) ==> 10; i++ = 11 ; i /= 2; 11 /= 2 ==> 5;
5 > 1; printf("%d",i++) ==> 5; i++ = 6; i /= 2; 6 /= 2 ==> 3;
3 > 1; printf("%d",i++) ==> 3 ; i++ = 4; i /= 2; 4 /= 2 ==> 2;
2 > 1; printf("%d",i++) ==> 2 ; i++ = 3; i /= 2; 3 /=2 ==> 1;
1 > 1;条件不满足,退出循环。
for(条件1;条件2;条件3){
循环体4
}
执行的循环: 1243 243 243 ....直到条件2为假则退出循环
又看到你了。
其实没那么复杂,你这样记。。。
i++,是先把i 取出来,再++
++i,是先把i 自加,再取出来
带到你的代码,printf 函数要打印 i,使用了i++,记住先取出来,那就是先打印i,然后 ++