为什么我没有得到素数而是将所有数字从2增加到98?

时间:2013-07-19 19:46:22

标签: c if-statement for-loop

# include <stdio.h>

int main()
{
    int i,p,f=1;
    printf("Prime Numbers till 99: \n");
    for (p=2;p<99;p++)
    {
        for (i=2;i<p;i++)
            if(p%i==0)
            {
                f=0;
                break;
            }

        if(f=1)
            printf("%d ",p);
    }
    return 0;
}

为什么我没有得到素数而是将所有数字从2增加到98?

2 个答案:

答案 0 :(得分:3)

这里有两个错误。

  1. if (f=1)需要if (f==1)if (f)。请记住,=是作业; ==是比较。
  2. 您需要在每次循环迭代结束时将f设置回1。在首次输入最内层f - 语句后,0将永远为if,并且只打印第一个素数。

  3. int main() { 
        int i, p, f = 1;
        printf("Prime Numbers till 99: \n");
    
        for (p = 2; p < 99; p++) {      
            for (i = 2; i < p; i++) {
                if (p%i == 0) {
                    f = 0;
                    break;
                }
            }
    
            if (f) {  // here
                printf("%d ", p);
            }
    
            f = 1;  // and here
        }
    
        return 0;
    }
    
    Prime Numbers till 99: 
    2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
    

答案 1 :(得分:1)

if(f=1)应该阅读if(f==1)。赋值总是评估为真。