【问题标题】:Why am i not getting the prime numbers instead getting all the numbers from 2 to 98? [closed]为什么我没有得到质数,而是得到 2 到 98 的所有数字? [关闭]
【发布时间】:2013-07-19 19:46:21
【问题描述】:
# 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 的所有数字?

【问题讨论】:

  • 这个问题似乎是题外话,因为它是基于一个错字,并且与未来的读者无关。
  • @JoshCaswell 比那个错别字略多,但你是对的,它可能与未来的任何人都没有太大关系。
  • 这种类型的多个错误实际上只会降低有用性的可能性,@arshajii,因为其他人进行相同组合的机会会下降。
  • @JoshCaswell 我同意,并投票决定关闭。
  • 如果你可能会使用if(1==f) 而不是if(f==1),那么拼写错误的= 而不是== 将给出错误阅读:Variable assignment in “if” condition

标签: c if-statement for-loop


【解决方案1】:

这里有两个错误。

  1. if (f=1) 必须是 if (f==1) 或只是 if (f)。记住,= 是赋值; == 是比较。
  2. 您需要在每次循环迭代结束时将f 设置回1。否则,在最里面的if 语句首次输入后,f 将永远是0,并且只会打印第一个质数。

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;
}
质数直到 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

【讨论】:

    【解决方案2】:

    if(f=1) 应为 if(f==1)。赋值始终评估为真。

    【讨论】:

    • 伙计们弄错了,除了 f 中的条件运算符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2013-07-15
    相关资源
    最近更新 更多