平均数的计算变得很高。我不明白为什么?
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
。这会偏离平均值。
原因是局部变量不会自动初始化为零(与全局变量不同)。
我正在尝试获取数组的平均数,但输出太高以至于它是正确的。我做错了什么?
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
。这会偏离平均值。
原因是局部变量不会自动初始化为零(与全局变量不同)。