【问题标题】:wrong output while printing prime numbers in C在 C 中打印素数时输出错误
【发布时间】:2020-01-01 06:08:55
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[100]; 
    int n=0,m=1,k=0,g=0;
    for(n=0;n<100;n++) //1
    {
        a[n]=m;
        m=m+1;
    }
    int b[50]={2,3}; //2
    g=2;

    for(n=3;n<100;n++) //3
    {
        for(k=0;k<g;k++) //4
        {
            if(a[n]%b[k]==0) //5
                break;
            else if(k=g-1)  //6
            {
                b[g]=a[n];
                g=g+1;
            }
        }
    }
    printf("the prime nos are \n");
    for(m=0;m<50;m++) //7
    {
        printf("%d \n ",b[m]);
    }

    return 0;
}

在这个程序中,我必须打印 1 到 100 之间的素数。要遵循的方法是 - 找出素数,将一个数字除以存储在数组中的先前素数。如果给定的数字在除以任何先前的素数时留下 0 作为余数,则它不是素数。如果不是,它是一个素数并将其添加到数组中。 在程序中 - 我初始化了一个包含 100 个数字的数组,并将 1 到 100 个数字存储在数组 a 中(步骤 1)。 b 是我将存储素数的数组。我在(步骤 2)中存储了 b 的前两个值。在(第 3 步)中,我初始化数组 a 以检查素数。在(第 4 步)中,我初始化数组 b 以划分数组 a 元素。在(第 5 步)中,我设置了条件,如果一个数字给出 0 作为余数,则跳出循环并检查下一个数字。在(第 6 步)中,我设置了条件,即当一个数字不能被前面的素数整除时,并检查我们是否将它除以数组中的最后一个素数,如果条件为真,那么它是素数,我们相应地递增。在(第 7 步)中,我正在打印数组 b 的所有元素。

输出不是素数,而是列出所有奇数。我错在哪里以及如何对其进行编码以保持逻辑完整。

【问题讨论】:

  • 对于初学者,通过使用最佳实践来帮助您自己和他人,使您的代码可读。使用一致的缩进。使用有意义的变量名,而不仅仅是单个字母。一些放置良好的cmets也不会受到伤害。之后,在调试器中运行您的程序并逐行逐行执行 - 最好学习自己发现问题的工具,而不是让其他人为您做。
  • (k=g-1) 应该是 (k==g-1)。注意b[] 中素数的个数不是 50,而是g
  • @user207421 得到正确答案谢谢!
  • @kaylum 我会在提问时记住您的意见。我还将学习使用调试器。
  • 关于:for(n=0;n&lt;100;n++) //1 { a[n]=m; m=m+1; }1 根据定义,不是质数。以下是素数的定义: *素数是大于1的整数,其唯一因数是1和它自己。 *

标签: c arrays primes


【解决方案1】:

k=g-1 更改为k==g-1

这是因为,在 C 语言中,我们使用== 来检查两个表达式是否相等。

【讨论】:

    猜你喜欢
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2012-05-11
    • 1970-01-01
    • 2013-11-10
    • 2021-06-15
    相关资源
    最近更新 更多