微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据需要更改数组的大小:C

如何解决根据需要更改数组的大小:C

这个程序是找出所有的素数并将它们存储在一个数组中。在获取特定范围内的质数的确切数量之前,我不想通过定义固定数组来占用不必要的内存。我还想让这段代码能够在 C89 中运行,因此,可变大小的数组在这里是不可能的。 这是我为此找到的两种方法代码

#include<stdio.h>
#include<stdlib.h>
struct prime{
    int *arr;
    int count;
};
int prmchk();
struct prime method1();
struct prime method2();
int main()
{
    int min,max;
    int i,j;
    struct prime p[2];
    printf("Enter limits of range..\n");
    printf("min: ");
    scanf("%d",&min);
    printf("max: ");
    scanf("%d",&max);

    p[0] = method1(min,max);
    p[1] = method2(min,max);

    for(i = 0; i < 2; i++)                 //to test the results by printing them
    {                                      //has nothing to do with the problem
        printf("result of method %d: ",i+1);
        for(j = 0; j < p[i].count; j++)
            printf("%d ",p[i].arr[j]);
        printf("\n");
    }
}
struct prime method1(int min,int max)        //function starts
{
    struct prime pf;
    int i;
    int temparr[10000];         //No 2 consecutive no.s can be prime numbers simulteneously
    int pcount = 0;
    for(i = min; i <= max; i++)
    {
        if(prmchk(i) == 1)
        temparr[pcount++] = i;       //
    }

    pf.arr = (int*) malloc(pcount * sizeof(int));

    for(i = 0; i < pcount; i++)
    {
        pf.arr[i] = temparr[i];
    }
    pf.count = pcount;
    return pf;
}
struct prime method2(int min,int max)
{
    struct prime pf;
    pf.arr = (int*) malloc(0);
    int i;
    int pcount = 0;
    for(i = min; i < max; i++)
    {
        if(prmchk(i) == 1)
        {
            pf.arr = (int*) realloc(pf.arr,++pcount*sizeof(int));
            pf.arr[pcount-1] = i;
        }
    }
        pf.count = pcount;
        return pf;
}
int prmchk(int num)
{
    int i;

    if(num == 1)
    return 0;
    if(num == 2)
    return 1;
    for(i = 2; i < num; i++)
    {
        if(num%i == 0)
        return 0;
   }
   return 1;
}

我的问题是

  1. 由于我是竞争性编程的新手,我不知道哪种方法会消耗更少的内存,哪种方法会消耗更少的时间。我想知道哪种方法比另一种更好。 如果可能,如果您能想到任何新方法,请随时添加方法
  2. 我们可以使用此处使用的 malloc(0) 吗
  3. 如何进一步提高此特定代码的可读性。我读了一些关于它的文章。但无法得到任何正确的理解。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。