如何解决根据需要更改数组的大小: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;
}
我的问题是
- 由于我是竞争性编程的新手,我不知道哪种方法会消耗更少的内存,哪种方法会消耗更少的时间。我想知道哪种方法比另一种更好。 如果可能,如果您能想到任何新方法,请随时添加新方法。
- 我们可以使用此处使用的 malloc(0) 吗
- 如何进一步提高此特定代码的可读性。我读了一些关于它的文章。但无法得到任何正确的理解。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。