问题如下: 编写一个提示用户输入一系列正整数的函数,以值-1结束。然后,该函数必须返回用户输入的最大值和最小值。您可以假设用户在输入-1之前输入至少一个正整数。
所以我想的是创建一个数组来存储输入的所有值。唯一的问题是我不太确定如何声明一个具有未知数量条目的数组,因为很明显我不知道用户在-1之前输入了多少个整数。
然后对于后一部分,我想最大/最小= arr [0],然后索引++,一旦arr [index]> maximum或arr [index]
谢谢!
答案 0 :(得分:2)
使用动态内存分配函数,如malloc calloc和realloc 或者如果你有兴趣做一些真正好的代码使用链表。
BTW是否有必要将所有数字存储在数组中?你可以在飞行中检查最小值和最大值???
一个简单的算法将是:
int maxval=0, minval = 0;
while(inputval != -1)
{
if(inputval < minval)
minval = inputval;
if(inputval > maxval)
maxval = inputval;
}
答案 1 :(得分:0)
不幸的是,你不能 - 至少不能直接。使用malloc()可以分配一个具有可变长度的数组,并且可以使用它来继续分配更多空间。例如
int* numbers = malloc(sizeof(int)*how_many);
if (!numbers) {
//error
}
//do stuff.
在您的示例中,您可以执行类似
的操作while(not_done) {
if( array-is-full ) {
how_many *= 2;
int* new_numbers = (int*)malloc(sizeof(int)*how_many);
for(int i = 0; i < index;i++)
new_numbers[i] = numbers[i];
free(numbers);
numbers = new_numbers;
}
//read user input
//stick it into the array
}
答案 2 :(得分:0)
您可以使用动态内存分配,尤其是realloc
。它允许您在每次输入新元素时调整数组大小
BTW如果要从输入中提取最小值和最大值,则无需将输入参数保存到数组中。
如何将元素保存到动态数组并提取min和max
之后的任何方式int min = -1;
int max = -1;
int i = 0;
int *array=malloc(sizof(int));
while (scanf("%d", &x)>0 && x>0)
{
if(i>0)
realloc(array, (i+1)*sizeof(int));
else {
min = x;
max = x;
}
array[i] = x;
if (x>max) max = x;
if (x<min) min = x;
i++;
}