以下控制表达式是否在for循环中递增?

时间:2012-01-02 23:51:50

标签: c for-loop

在下面的代码中,在最里面的循环中,当d< p true ,p%d == 0 false , 变量d是递增还是递增被跳过?

// Program to generate a table of prime numbers

#include <stdio.h>

int main (void)
{
    int p, d;
    _Bool isPrime;

    for ( p = 2; p <= 50; ++p ) {
        isPrime = 1;

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

            if ( isPrime != 0 )
                printf ("%i  ", p);
    }
    printf ("\n");
    return 0;
}

2 个答案:

答案 0 :(得分:3)

在调试器下逐步执行:)

您可以从代码中看到“d”仅在“for”循环中递增。

您将在调试器下看到时刻d&gt; = p,然后“++ d”未被执行。

PS: 我重新格式化了代码,使缩进反映了实际的逻辑:

int main (void)
{
    int p, d;
    _Bool isPrime;

    for ( p = 2; p <= 50; ++p ) {
        isPrime = 1;

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

        if ( isPrime != 0 )
            printf ("%i  ", p);
    }
    printf ("\n");
    return 0;
}

答案 1 :(得分:1)

当d < p为真,则d递增。这是唯一重要的条件,而不是模数是否有值。

也不重要,但为什么不在循环中声明d和p

int p = 2; p <= 50; ++p

int d = 2; d < p; ++d 

并不重要,但如果你不打算在循环之后使用它们,那么限制变量的范围是很好的