平均数的计算变得很高。我不明白为什么?

calculation of average number get way to high. I don't get why?

我正在尝试获取数组的平均数,但输出太高以至于它是正确的。我做错了什么?

int count(int arr[]){

int sum;

    //Average
    for(int i=0;i<100; i++)
        sum = sum + arr[i];

    printf("Average:%f \n", sum/100);

}
int main()
{
    int array[100]; //RANDOM NUMBERS 0-900

count(array);

 return 0;
}

使用前需要将sum初始化为零。对于具有自动存储持续时间的变量,C 或 C++ 不会自动为您执行此操作。它需要 "time",而在 C 或 C++ 中,您无需为不需要的东西付费。否则你会得到一个垃圾值(无论它存储在那个内存地址,从技术上讲,使用未初始化的变量是未定义的行为,除了在赋值中)。

你还需要初始化数组,比如

int arr[100]{}; // C++11 or later

int arr[100] = {0}; // C++98 or good old C

然后用值填充它。不要将垃圾值视为 "random numbers",因为您再次遇到未定义的行为并且程序并不完全安全。

未定义的行为(UB):

sum = sum + arr[i];

您使用了上面的sum,但没有初始化。在 C 和 C++ 中读取未初始化变量的值是 UB。

实际上给定你的代码,它甚至再次是 UB,因为数组值 arr[i] 都没有被初始化。

sum 包含 garbage value。初始化变量 sumenter code here。 验证您可以在更新 sum.

之前打印

尝试以下操作:

int count(int arr[]){

int sum = 0; // <==================== initialize to zero

    //Average
    for(int i=0;i<100; i++)
        sum = sum + arr[i];

    printf("Average:%f \n", sum/100);

}
int main()
{
    int array[100]; //RANDOM NUMBERS 0-900

count(array);

 return 0;
}

如果没有这个初始化,局部变量sum可以有任意的初始值。你最终会得到任意大的 sum。这会偏离平均值。

原因是局部变量不会自动初始化为零(与全局变量不同)。