【问题标题】:how to create an array that stores prime numbers?如何创建一个存储素数的数组?
【发布时间】:2020-12-20 09:33:57
【问题描述】:

用户给定一个由 8 个整数组成的数组, 程序应该打印出每个输入的素数。 输入一些数字后程序停止,我不知道为什么。 你能告诉我我做错了什么吗? 代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
  
int main()
{
    const int N=8;
    int i, j, count, x;
    int arr[N];
    int prime[N];
    j = 2;
    for(i = 0; i < N; i++)
    {
        printf("Enter a number %d:", i + 1);
        scanf("%d", &arr[i]);
        if (arr[i] == 1)
        {   
            prime[i] = arr[i];
            count++;
        }
        else
        {
            do
            {
                x=arr[i] % j;
                if (x != 0)
                    j++;
                else 
                    break;
            }
            while(true);
            if(arr[i] == j)
            {
                prime[i] = arr[i];
                count++;
            }
        }
    }
            
    for (i = 0; i < count; i++)
        printf("%dth prime number:%d\n", i + 1, prime[i]);  
    
    getch();
    
    return 0;
}

【问题讨论】:

    标签: arrays c primes


    【解决方案1】:

    如果用户输入的整数小于前一个整数,您的程序将进入无限循环。您可能打算在 else 子句中初始化 j,就在 do-while 循环之前。

    还请注意,您应该检查 scanf 的返回值,以确保实际输入了一个整数。

    【讨论】:

    • @Augustkarlstorm 现在可以工作,但即使没有输入,也总是在第 4 个素数中打印出 0。例如:第 1 个素数:1 第 2 个素数:7 第 3 个素数:73 第 4 个素数数:0 第 5 个素数:5
    • @NomeAcaso 对程序进行故障排除的最简单方法是插入打印语句,该语句在代码的不同位置打印变量。
    【解决方案2】:

    我使用一个布尔函数来检查数组中的元素是否为素数,然后我像这样填充素数数组:

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    
    bool Prime(int);
    
    int main()
    {
        int N;
        do
        {
           printf("Give me the number of numbers :");
           scanf("%d",&N);
        }while(N<1);//in your array must be minimum 1 element
        int prime[N];
        int arr[N];
        int j=0;
    
        for(int i=0;i<N;i++)
        {
           do
           {
               printf("Enter a number %d:",i+1);
               scanf("%d", &arr[i]);
           }while(arr[i]<0); //you can write while(arr[i]>1) and you just write if(Prime(arr[i])==true)
    
           if(arr[i]!=1&&arr[i]!=0&&Prime(arr[i])==true)
           {
              prime[j]=arr[i];
              j++;
           }
       }
       printf("\n\n");
       for(int p=0;p<j;p++)
       {
           printf("%d th prime number:%d\n",p+1,prime[p]);
       }
      return 0;
    }
    
    
    bool Prime(int n)
    {
        for(int i=2;i<=(n/2);i++)
        {
             if(n%i==0)
             {
                 return false;
             }
        }
        return true;
    }
    

    【讨论】:

    • 感谢这个解决方案,我之前考虑过使用一个函数,但它不起作用,顺便说一句,我可以不用它,我只需要更改 if 语句中的索引。
    猜你喜欢
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 2017-07-07
    • 1970-01-01
    • 2023-03-30
    • 2018-07-02
    相关资源
    最近更新 更多