当p == 2

时间:2015-09-06 11:08:36

标签: c

我很难理解下面的代码。它是来自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不再适用。

2 个答案:

答案 0 :(得分:2)

确实d < p在外循环的第一次迭代中不成立,但在下一次迭代中,p的值为3.

for为2时,内部p循环不会执行。p&gt;时会执行2。

答案 1 :(得分:1)

我认为您的代码正在按预期运行。

p=2d=2

for ( d = 2; d < p; d++)
        if ( p % d == 0 )
            isPrime = false;

for循环未执行,isPrime仍为True,因此会打印printf(" %i ", p);

注意

如果上述for循环已针对p=2d=2执行,则

if ( p % d == 0 )
    isPrime = false;

这种情况应该是真的,isPrime本来是Falseprintf(" %i ", p);也不会执行。