我编写了以下程序来显示最多150的所有素数。它根本没有执行。这有什么不妥?
# include <stdio.h>
int main(void)
{
int p[150], i, j;
for (i = 2; i < 150; i++)
p[i] = 0;
i = 2;
while (i < 150){
if (p[i] == 0)
printf("%i ", i);
for (j = 1; i*j <= 150; j++)
p[i*j] = 1;
i++;
}
return 0;
}
答案 0 :(得分:4)
p[i*j]
。当i*j <= 150
等于150(即一个一个)时,条件i*j
将评估为真。它应该是i*j < 150
。fflush(stdout)
。p[2]
的值被错误地设置为1.但是,你的程序仍会打印2,但那是因为你的循环在更改p[i*j]
的值之前打印了数字。总而言之,数字可以正确打印,但数组中的值并不完全正确。答案 1 :(得分:1)
i*j <= 150
不正确,应为i*j < 150
,因为p
数组包含从0
到149
的元素。由于这个原因,程序陷入无限循环。
编辑:此答案的其余部分不正确,因此我已将其删除。
答案 2 :(得分:0)
作为学习练习,尝试添加一些printf来了解您的程序的功能。
另外请记住,正如jweyrich所说,没有\ n的printf将不会输出任何内容,直到(可能)程序退出。