for(i=100;i;i-=30);执行几次?

来源:百度知道 编辑:UC知道 时间:2024/05/31 15:22:07
70 40 10 -20 -50…… 不是该是无限么?

对于整形数来说由于-32768后就是32767,一个循环是65536个数。
65536除以30,商2184),余数是16
而我们从100减下去,减三次我们得到10(记为头三次)
从余数16以及上面得到的10,我得可以知道16*5+10=90刚好是30的整数倍(这个记为尾三次)。
也就是说要减5个循环,再加上六次(头三次以及尾三次)
所以总次数为
2184*5+6=10926次。

如果为for(i=100;i;i-=32)的话,估计就是死循环了。因为65536是32的倍数,剩下的那个4(100-32*3)就没法减掉了。

如果是
short int i;
执行 10926次。

如果是
long int i;

执行 715827886 次.

run 一下就知道了。

#include<stdlib.h>
#include<stdio.h>

void main()
{
long int k=0;
// long int i;
short int i;
for(i=100;i;i-=30)
{
k=k+1;
};
printf("%d ",k);
}

无数次,因为for中的第二个i是循环结束条件,为0是循环结束,而i的值是100,70,40,10,-20,-50每次减30到不了0,循环就停不下来!

C的布尔型是,非0即1
i不会等于0,应该是死循环

你确定那语句能通过编译吗?我感觉不能,这一句i;i这个变量到底是做什么的,不知道!要去掉i,这句无限循环。

wacs5分析得很对,不错。