我很难理解下面的代码。它是来自Kochan的 C in C 编程的程序6.10。它生成一个素数表。
#include <stdio.h>
#include <stdbool.h>
int main(void)
{
int p, d;
bool isPrime;`
// loops through 2 to 50
for ( p = 2; p <= 50; p++ )
{
isPrime = true;
for ( d = 2; d < p; d++)
if ( p % d == 0 )
isPrime = false;
// prints prime number
if ( isPrime != false )
printf(" %i ", p);
}
printf("\n");
return 0;
}
前面的代码输出:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
你能解释为什么内部for
循环
for ( d = 2; d < p; d++)
还在执行吗?我的理解是d = 2和p = 2;因此,d&lt; p不再适用。
答案 0 :(得分:2)
确实d < p
在外循环的第一次迭代中不成立,但在下一次迭代中,p
的值为3.
当for
为2时,内部p
循环不会执行。p
&gt;时会执行2。
答案 1 :(得分:1)
我认为您的代码正在按预期运行。
p=2
和d=2
,
for ( d = 2; d < p; d++)
if ( p % d == 0 )
isPrime = false;
此for
循环未执行,isPrime
仍为True
,因此会打印printf(" %i ", p);
注意强>
如果上述for
循环已针对p=2
和d=2
执行,则
if ( p % d == 0 )
isPrime = false;
这种情况应该是真的,isPrime
本来是False
,printf(" %i ", p);
也不会执行。