50平方电缆报价:C高手帮我解释一下吧!有点菜^_^

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/07 11:52:00
该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。

int fun(int lim, int aa[MAX])
{
int i,j,k=0;
for(i=2;i<=lim;i++)
{
for(j=2;j<i;j++)
if(i%j==0) break;
if(j>=i)
aa[k++]=i;
}
return k;
}
请问一下,在第二个for循环中,已定义j<i;下面的条件语句中又怎么有可能(j>=i);这是怎么会事啊?
特别说明:这个函数没错的哦!

执行第二个for的条件是没有从break跳出循环,那么此时j=i;也就是说明在比i小的数里不存在i的因子.所以i是质数.而程序中写成f(j>=i)是一般编程的习惯,使程序更健壮.

for(j=2;j<i;j++)
if(i%j==0) break;
这两个是一起的,下面的属于外面的循环

if(j>=i)
aa[k++]=i;
这个语句可以改成
if(j==i)
aa[k++]=i;
因为无论如何j>i是不可能的。因为for(j=2;j<i;j++)中已经限制j<i了,若j==i则说明,该循环执行完了,也就是没有执行 if(i%j==0) break语句,所以是素数。否则j<i,不是素数。

一个循环如果不加{}代表只是他下边那条语句是他的循环体
如果你想把if(j>=1) 就在for下边加{}

当最后一次循环j = i-1 时,如果满足i%j!==0,则执行j++,这样j 等于了i,不满足循环条件(j<i),推出了循环,说明此数满足题目条件.if(j>=i)这个条件在这个程序中与if(j == i)是等价的!