C语言 数组未知个数 怎么声明
有一道题是让将一个无序数列转换成有序数列。但是这个数列是用户输入的,是命令提示行的程序,怎么确定数组元素的个数,难道要让用户先输入要写入多少个数?输入一个很大的数,这种方...
有一道题是让将一个无序数列转换成有序数列。但是这个数列是用户输入的,是命令提示行的程序,怎么确定数组元素的个数,难道要让用户先输入要写入多少个数?
输入一个很大的数,这种方法不可行,因为要排序,多余的数默认是0,也会参加排序的。
要怎么办啊。还有怎么确定用户是输入结束,还是要输入另一个数。 展开
输入一个很大的数,这种方法不可行,因为要排序,多余的数默认是0,也会参加排序的。
要怎么办啊。还有怎么确定用户是输入结束,还是要输入另一个数。 展开
6个回答
展开全部
C语言在数组个数未知的情况下,根据应用情况不同,有三种方式。
1,数组元素总数未知,但是需要存储的内容是已知的。
其实这是一种变相的已知个数,只是编程者不去计算总个数,把这个工作交给系统来做。这时可以通过数组个数留空,显式初始化数组进行声明。
比如
char s[] = "this is a test string";
就是初始化了这样一个数组s,其空间个数隐式的由初始化字符串决定。
2,数组元素总数未知,但最大规模已知。
比如不知道数组的总个数,但是确定不会超过100个,那么就可以定义一个100个元素的数组,供存储调用。
3,动态分配数组。
通过malloc函数,可以动态的分配数组,然后记录下当前分配的数组元素个数,并使用该数组。当数组空间不足时,可以通过realloc函数,重新分配空间,扩大数组元素个数。
比如
int size = 100;
int *p = (int *)malloc(sizeof(int) * 100); // 初始化分配100个元素空间。用size保存当前数组规模。
p = realloc(sizeof(int)*(size + 100), p);//当空间不足时,增加100个元素。
size+=100;//需要注意的是,必须同步维护size的大小,否则会出错。
1,数组元素总数未知,但是需要存储的内容是已知的。
其实这是一种变相的已知个数,只是编程者不去计算总个数,把这个工作交给系统来做。这时可以通过数组个数留空,显式初始化数组进行声明。
比如
char s[] = "this is a test string";
就是初始化了这样一个数组s,其空间个数隐式的由初始化字符串决定。
2,数组元素总数未知,但最大规模已知。
比如不知道数组的总个数,但是确定不会超过100个,那么就可以定义一个100个元素的数组,供存储调用。
3,动态分配数组。
通过malloc函数,可以动态的分配数组,然后记录下当前分配的数组元素个数,并使用该数组。当数组空间不足时,可以通过realloc函数,重新分配空间,扩大数组元素个数。
比如
int size = 100;
int *p = (int *)malloc(sizeof(int) * 100); // 初始化分配100个元素空间。用size保存当前数组规模。
p = realloc(sizeof(int)*(size + 100), p);//当空间不足时,增加100个元素。
size+=100;//需要注意的是,必须同步维护size的大小,否则会出错。
展开全部
比如这样:
printf("请输入一些整数(最后一个数字以#结束):\n");
int i=0,k;
for(k=i;k<=i;k++){
scanf("%d",&a[i]);
if(getchar()=='#')
continue;
i++;
}
这时“i”就是最后输入数字的下标(个数-1);
不过原来的数组声明时[]里必须写一个整形常量,那是为了申请空间;
不过你排序的时候,只用最后一个输入数据的小标就可以了,那样它们(那些0)就不会参加排序了~~~
^_^ ~~
printf("请输入一些整数(最后一个数字以#结束):\n");
int i=0,k;
for(k=i;k<=i;k++){
scanf("%d",&a[i]);
if(getchar()=='#')
continue;
i++;
}
这时“i”就是最后输入数字的下标(个数-1);
不过原来的数组声明时[]里必须写一个整形常量,那是为了申请空间;
不过你排序的时候,只用最后一个输入数据的小标就可以了,那样它们(那些0)就不会参加排序了~~~
^_^ ~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用一个在你要输入的数的范围之外的数来表示输入结束.如果你要输入的数遍及全部整数,那就只有让用户先输入要写入多少个数了.
声明的话,既可以声明一个足够大的数组,也可以用一个指针变量和一个整型变量来实现动态数组.
比如int *a,n;
scanf("%d",&n);
a=(int *)malloc(sizeof(int)*n);
声明的话,既可以声明一个足够大的数组,也可以用一个指针变量和一个整型变量来实现动态数组.
比如int *a,n;
scanf("%d",&n);
a=(int *)malloc(sizeof(int)*n);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以通过sizeof函数先求出数组的长度,例如:
int a[50];
int len = sizeof(a)/sizeof(a[0]);
那么len就是数组的长度了
int a[50];
int len = sizeof(a)/sizeof(a[0]);
那么len就是数组的长度了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询