我正在阅读一本名为C编程的书,由Stephen G. Kochan编写,第7章练习7,我只涉及变量,数据类型,算术表达式,程序循环,决策制定和使用数组,没有别的。< / p>
这个问题要求我们使用名为 Sieve of Erastosthenes 的算法显示前150个素数,其步骤如下所示 步骤1:定义整数数组P.将所有元素P [i]设置为0,2 <= i <= n 第2步:将i设置为2 第3步:如果我&gt; n,算法终止。 步骤4:如果P [i]为0,则i为素数。 步骤5:对于j的所有正整数值,使得i j <= n,将P [i j]设置为1 步骤6:将1添加到i并转到步骤3.
我理解算法但是当我尝试实现它时,它只是返回0。
//Sieve of Erastosthenes
#include <stdio.h>
int main (void)
{
int i, j, P[151];
for (i = 2; i <= 150; ++i)
P[i] = 0;
for (i = 2; i <= 150; ++i ){
if (P[i] = 0)
printf ("%i ", P[i]);
for (j = 1; j*i <= 150; ++j)
P[i*j] = 1;
}
return 0;
}
此外,我知道我必须在我的程序中包含头文件以使用 bool ,我是否需要添加任何内容才能使用 double ?
答案 0 :(得分:2)
此:
if (P[i] = 0)
不是测试,它是一项任务(当然会产生一个由if
测试的值,但实际表达式不是测试。)
C具有=
用于分配,==
用于相等测试。启用更多编译器警告。
答案 1 :(得分:0)
有几件事:
练习是列出最多150个素数(不是前150个素数)。
每个答案都会得到0,因为这段代码
if (P[i] = 0)
printf ("%i ", P[i]);
应改为阅读
if ( P[i] == 0 )
printf ("%i ", i);
你想打印i - 循环索引值 - 而不是数组元素P [i]的值。