有点看不懂这个C程序,

来源:百度知道 编辑:UC知道 时间:2024/06/23 03:36:48
编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k各素数存入xx所指的数组中。
答案:

void fun(int m, int k, int xx[])
{
int g=0,I,j,flag=1;
for(i=m+1;i<m*m;i++)
{
for(j=0;j<I;j++)
{
if(i%j!=0)
flag=1;
else
{
flag=0;
break;
}
}
if (flag==1 && j>=i) ?
{
if (k>=0)
{
xx[g++]=i;
k--;
}
else
break;
}
}
}

for(j=0;j<I;j++)这句中,j<i的,然而if (flag==1 && j>=i)中,j>=i,这是为什么??看不懂,请高手帮忙解答一下。谢谢

我想程序是担心m的值可能小于或等于-1,一旦m<=-1,那么i=m+1,那么i<=0,而外层循环i<=m*m这个条件有一定成立所以一定进入循环,接着到内层循环却不符合循环条件而直接跳过内层循环,而flag的初始值就是1,如果没有j>=i这个条件,就会符合判断的条件,而结果却不是我们要的结果。
所以我们希望计算一定要经过内层循环才可以,所以设定了j>=i,因为经过循环的话j一定会等于i的。因为内层循环进行到最后一次循环的是后因为i==j不符合循环条件才跳出循环的。

如果循环 for ( j = 0; j < i; j++ ) 中间没有 break
当最后 j == i 时,不满足条件 j < i,循环退出
此时 j 的值和 i 相等,j >= i 的结果为真