我想知道代码中的错误逻辑在哪里,我怀疑这是我的循环无法在打印质数之前完全运行的原因,但我似乎无法解决它。我曾尝试每次将变量fcount重新初始化为0,但是结果“素数”不正确。我对该程序的目标是让用户输入数字N可以从1循环到N,并在其间打印所有素数。如果有人可以帮助指出我的逻辑错误以及任何可能的解决方案,我将非常感激。
#include <stdio.h>
int main(void) {
int i,j,n, fcount = 0;
printf("Enter number n:\n");
scanf("%d",&n);
printf("prime numbers are:\n");
for (i=1; i < n; i++)
{
for (j = i; j > 0; j--)
{
if (i%j == 0)
{
fcount++;
// at some point every number will have fcount =2
fcount = 0;
}
}
}
if (fcount == 2)
{
printf("%d\n",i);
}
return 0;
}
答案 0 :(得分:2)
这不是测试素数的非常有效的方法,但是该方法有效。但是,您有两个错误:
i
,fcount
必须从0开始,因此fcount = 0
应该是该循环中的第一件事。fcount == 2
测试i
,而不仅仅是在最后一次测试,因此请将测试移到i
的循环中。关于您的代码的一些观察结果:
fcount
可以位于i
上的循环本地。循环变量i
和j
可以直接在循环头中声明。将所有这些放在一起:
#include <stdio.h>
int main(void)
{
int n;
printf("Enter number n:\n");
scanf("%d",&n);
// Should test for input errors ...
printf("prime numbers are:\n");
for (int i = 1; i < n; i++) {
int fcount = 0;
for (int j = i; j > 0; j--) {
if (i % j == 0) {
fcount++;
}
}
if (fcount == 2) {
printf("%d\n", i);
}
}
return 0;
}