为什么该程序没有显示大于3的数字?

时间:2019-02-23 10:10:34

标签: c

写此文字以找到21000之间的质数。但是它在显示23是质数之后停止。我知道我可以找到如何编写代码以在互联网上找出质数的方法。但是我真的需要知道这里出了什么问题。

#include <stdio.h>

main() {
    int i, j;
    int ifPrime = 1;
    for (i = 2; i < 1000; i++) {
        for (j = 2; j < i; j++) {
            if (i % j == 0) {
                ifPrime = 0;
                break;
            }
        }
        if (ifPrime == 1) {
            printf("%d is prime\n", i);
        }
    }
}

2 个答案:

答案 0 :(得分:3)

int ifPrime=1;

必须位于外部for循环内。在那里,它将为每个i初始化。这对应于自然语言单词“检查数字i是否为质数,首先假设它为质数,然后检查其是否为整数”。您之前的代码说过“检查2到1000是否为质数,首先假设它们是质数”,而这个措词太宽泛了。

代码应为:

int main()
{
    for (int i = 2; i < 1000; i++)
    {
        int ifPrime = 1;
        for (int j = 2; j < i; j++)

我将main替换为int main,因为这是20年以来的要求。 (您不应该从这些旧书中学习编程。)

我将int iint j移到了for循环中,以确保您不会意外地在已定义值的范围之外使用这些变量。

为避免将来出现此错误,建议将is_prime计算提取到一个单独的函数中。这样一来,您将不得不在正确的位置初始化ifPrime

查找此错误原因的另一种方法是使用调试器逐步检查代码,并在每一步问自己:程序在做什么仍然有意义吗?

答案 1 :(得分:3)

在检查单个数字后,您没有将ifPrime设置回1。因此,一旦您获得非non-prime的数字,则ifPrime现在为0,因此if(ifPrime == 1)将永远不会返回true,因此您只会看到2、3为质数

#include <stdio.h>

int main(void) {

    for( int i=2;i<1000;i++)
    {

        int ifPrime = 1;
        for(int j=2;j<i;j++)
        {   
            if(i%j==0)
            {
                ifPrime=0;
                break;
            }
        }
        if(ifPrime==1)
        {
            printf("%d is prime\n",i);
        }

    }
    return 0;
}