作业帮 > 综合 > 作业

C语言的一道提void primenum(int m,int k,int array[]){ int value = m

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/08/07 22:21:36
C语言的一道提
void primenum(int m,int k,int array[])
{ int value = m+1;
int half,n = 0,i;
while(1)
{ half = value/2;
for (i=2; i half)
{ array[n] = value;
n++;
}
if (n >= k)
break;
value++;
}
}
这个是求数字m之后k个素数的程序,我就不是很明白那个i在这里面的作用,还有能不能请大虾详细讲解一下几个循环语句的具体作用,那个break结束循环结束的是哪一个循环?感激不尽
C语言的一道提void primenum(int m,int k,int array[]){ int value = m
1. for (i=2; i= k)
break;
再问: 谢谢这位,麻烦我还有一点点不明白。break 退出for循环后,接着怎么执行呢?是又从for开始进行i++?但是前面不是规定了ihalf)呢?我有点糊涂,麻烦详解一下,会追加奖金~谢谢
再答: break出for之后,for就不再执行,i++也不执行,而是执行后面的语句if (i > half)。 有一点你可能混淆了,for循环体的大小,for循环体只有如下几句话, for (i=2; i half)不属于for循环体。如果用这种方式写代码,你的程序会更清晰一些 for (i=2; i half) { array[n] = value; n++; }
再问: 哦,我明白了,break直接跳出了整个for循环。接着执行后面那个if (i > half),但是这里面的i应该是由上面那个for循环赋过值以后的啊,怎么会大于half呢? 我真的弄不清楚。。。麻烦再解答一下下。。谢谢了
再答: 首先搞清楚if (i > half)干了什么事情,其实它是把value为素数记录到array中去,不是素数不用记录 然后就是for循环的两种退出条件了,就是我开始答复的第1点和第2点, 第1点如果是break退出for循环,表明这不是一个素数,所以i肯定小于half,那么它肯定不满足if (i > half),所以不会执行if (i > half)中的内容,也就不会把value记录到array中。这正是我们需要的啊“不是素数不用记” 另一种退出for循环是i++到 i >half了,不满足循环的判定条件了。此时表明value是一个素数,所以必须被记录。然后呢,你就可以看到它满足if (i > half),所以执行if (i > half)中的内容,记录vaule到array中