C 编程:使用关系运算符 - 小于 vs 小于等于



我正在研究一个教科书问题,我在下面写了这段代码来识别用户输入的正数下面的所有素数:

#include <stdio.h>
int main(void)
{
    int j, input, notaprime;
    scanf_s("%d", &input);
    printf("List of prime numbers:n");
    for (; input >= 2; input--)
    {
        notaprime = 0;
        for (j = 2; j < input; j++) //OR (for(j = 2; j*j <= input; j++)
        {
            if ((input % j) == 0)
            {
                notaprime = 1;
                break;
            }
            else
            {
                ;
            }
        }
        if (notaprime)
        {
            ;
        }
        else
        {
            printf("%dn", input);
        }
    }
    return 0;
}

当输入 30 作为输入时,输出如下:

30
List of prime numbers:
29
23
19
17
13
11
7
5
3
2
Press any key to continue . . .

但是,当我将内部 for 循环中的关系运算符从:

        for (j = 2; j < input; j++)

自:

        for (j = 2; j <= input; j++) //Changed from less than to less than equals

以下内容将成为输入值 30 的输出:

30
List of prime numbers:
Press any key to continue . . .

现在,质数不再打印,但我想不出任何合乎逻辑的原因。我现在想到这应该有效的可能原因,我的大脑很痛。请帮忙。谢谢!

我在代码块 16.01 和 Visual Studio Community 2015 上尝试过这个。输出是相同的。

代码中存在逻辑错误

我们知道素数是除以 1 或自身

的数字

当你做for (j = 2; j < input; j++)时,你检查下面的所有数字,而不是input哪个是正确的。

但是当你做for (j = 2; j <= input; j++)你检查到input

由于每个数字每次都被自身除(input % j) == 0,因此notaprime = 1;语句为真,因此不会产生输出

相关内容

  • 没有找到相关文章

最新更新