for ( int i=10; i> 1; i /=2 ) {
printf("%d ", i++);
}
这个程序为什么输出结果是10 5 3 2呢?
不应该是10 5 2吗?5/2之后等于2.5 因为是int所以直接变成2 迷茫了
执行顺序如下,i=10 ;i>1;print;i++;这个时候是i=11;i/=2;print 5,i=6;i/=2=3下面的一样
,这样你搞清楚了没,输出结果是没有错误的。是因为你有一个i++
逻辑是这样的:
i=10;
printf("%d",i++) //打印完10以后i=11,因为执行了i++
然后i=i/2 //此时i=5
printf("%d",i++)//打印完5以后i=6,理由同上
i=i/2 //此时i=3
第一次循环 i=10 i++ 后 11
第二次循环 i=5 i++ 后 6
第三次循环 i=3 i++ 后 4
第四次循环 i=2 i++ 后 3
第五次循环 i=1 终止
5.0/2才等于2.5
你说的那个5/2 是错误的 其实你说的那个时候是6/2
for(; ;)循环先执行第一个语句,再判断循环条件是否成立,最后执行第三个语句。
所以每次限制型i++再执行/
第一次循环 i=10 i++ 后 11
第二次循环 i=5 i++ 后 6
第三次循环 i=3 i++ 后 4
第四次循环 i=2 i++ 后 3
第五次循环 i=1 终止
5.0/2才等于2.5