【发布时间】:2015-02-12 05:35:18
【问题描述】:
我用 Eratosthene 的 Sieve 用 C 语言编写了寻找素数的程序(这是 Kochan 中的练习 6-8,Programming in C 4th edition)。它工作得很好。
#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)
该表单通过删除 if 语句保存位置,我认为需要以与第一个变体相同的方式工作。但它在数字 3 之后停止! 谁能解释一下为什么 for 循环中的条件会这样工作?
附:是的,我知道这个程序的算法不是最好的。
【问题讨论】:
-
旁注:您也可以将
prime[i] = i更改为prime[i] = 1并将printf("%i ", prime[i])更改为printf("%i ", i)。
标签: c for-loop conditional-statements