问题如下:编写一个函数,提示用户输入一系列正整数,以值 -1 结束。然后该函数必须返回用户输入的最大值和最小值。您可以假设用户在输入 -1 之前至少输入了一个正整数。
所以我想的是创建一个数组来存储所有输入的值。唯一的问题是我不太确定如何声明一个条目数未知的数组,因为显然我不知道用户将在 -1 之前输入多少个整数。
然后对于后面的部分,我想使最大值/最小值=arr[0],然后是index++,一旦arr[index]>maximum或arr[index]
谢谢!
使用诸如 malloc calloc 和 realloc 之类的动态内存分配函数,或者如果您有兴趣做一些真正好的代码,请使用链表。
顺便说一句,是否有必要将所有数字存储在一个数组中???你可以即时检查最小值和最大值???
一个简单的算法是:
int maxval=0, minval = 0;
while(inputval != -1)
{
if(inputval < minval)
minval = inputval;
if(inputval > maxval)
maxval = inputval;
}
您可以使用动态内存分配,尤其是realloc
. 它允许您在每次输入新元素时调整数组的大小
顺便说一句,如果您想从输入中提取最小值和最大值,则不需要将输入参数保存到数组中。
在如何将元素保存到动态数组并提取最小值和最大值之后的任何方式
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++;
}
不幸的是,你不能——至少不能直接。使用 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
}