在for循环中使用逻辑运算符的条件

时间:2014-12-13 17:39:38

标签: c for-loop conditional-statements

我在C中编写了程序,用于通过Sieve of Eratosthene找到素数(这是Kochan的6-8练习,C第4版编程)。它工作得很好。

#include <stdio.h>

int main(void) {
    int prime[151], i, j;

    for(i = 2; i < 151; ++i)
        prime[i] = i;
    for(i = 2; i <= 150; ++i) 
        if(prime[i])
            for(j = i+i; j <= 150; j += i)
                prime[j] = 0;
    for(i = 2; i < 150; ++i)
        if(prime[i])
            printf("%i ", prime[i]);
    printf("\n");
    return 0;
}

但在我达到这种形式的代码之前,我尝试使用for循环:

for(i = 2; prime[i] && i < 150; ++i)

如果声明和我认为需要以与第一个变体相同的方式工作,那个表单一个接一个地保存。但它在3号后停止! 谁能解释一下为什么for循环中的那个条件会这样?

P.S。是的,我知道这个程序的算法并不是最好的。

2 个答案:

答案 0 :(得分:2)

不,他们不一样:

  • 原始循环跳过所有非素数并继续前进。
  • 建议的替换在遇到第一个非素数时立即终止(因为prime[i]将变为false,循环将停止)。

答案 1 :(得分:0)

for循环的中间部分,就像while,而不是if。因此,只要找到prime[i]0的位置并将其编入索引,循环就会终止。