求c中数组的平均值、最大值和最小值



我正在尝试获取数组的最小值和最大值。由用户创建的数组。我一直得到Segmentation fault (core dumped)。我不知道我哪里做错了。

#include <stdio.h>
int main(void){
int n, i;
double sum = 0.0, array[n], avg;
printf("Enter the size of the array:");
scanf("%d", &n);
for (i=0; i<n; ++i){
printf("Enter the number for position %d: ", i + 1);
scanf("%i", &n);
sum += n;
}
avg = (double) sum / n;
printf("Average = %.2fn", avg);

double largest = array[0], smallest = array[0];
for (i = 0; i < n; i++){
if (array[i] > largest)
{
largest = array[i];
}
else if (array[i] < smallest)
{
smallest = array[i];
}
}
printf("The smallest is %lf and the largest is %lf!n", smallest, largest);    
}

编辑:解决了这个问题后,我发现我也无法获得最小和最大的值。我一直都给0.000000。我该如何解决?我尝试将double更改为float,但没有成功。。

您在初始化n之前编写了array[n]。这将调用未定义的行为来使用未初始化的非静态局部变量n的(不确定(值。

数组分配必须在读取n之后。它将是这样的:

int n, i;
double sum = 0.0, avg;
printf("Enter the size of the array:");
scanf("%d", &n);
double array[n];

@MikeCAT完全正确。。。

但是,如果使用c89或c90标准,则无法从用户那里获取数据,然后声明数组。当你试图编译它时,可能会得到这样的消息:

ISO C90/C89 forbids mixed declarations and code in C

您将能够使用malloc或calloc动态分配它。

我知道你没有使用这个标准,但我还是写了它,所以如果有人看到这个,它可以防止可能的问题。。

如果你不知道你使用哪种c标准,请检查你的编译说明-ansi";或";std=c99";标志,表示您使用c89或c90标准。

相关内容

  • 没有找到相关文章

最新更新