我有一个函数可以计算数组中偶数的算术平均值。
int func(int *x, int length)
{
float even_sum = 0;
int even_num;
int i;
float result;
for (i = 0; i<length; i++)
{
if (x[i] % 2 == 0)
{
even_sum = even_sum + x[i];
even_num++;
}
}
result = even_sum/even_num;
return result;
}
给出一个数组1 2 2 1
我期望得到2作为平均值,但我一直得到0作为结果。我的代码中的错误在哪里?
答案 0 :(得分:2)
int func(int *x, int length)
{
float even_sum = 0;
int even_num; // <-- uninitialized, could be anything!
int i;
float result;
for (i = 0; i<length; i++)
{
if (x[i] % 2 == 0)
{
even_sum = even_sum + x[i];
even_num++; // <-- adding 1 to anything yields undefined behavior
}
}
result = even_sum/even_num; // <-- even more undefined behavior
return result;
}
您初始化了一些但不是所有变量。最好养成将变量设置为合理起始值的习惯,就像使用float even_sum = 0;
答案 1 :(得分:1)
初始化even_num=0
如果你没有初始化变量,他们可能有垃圾值。
在您的情况下,even_num
有一个巨大的值,大于even_sum
,导致您的结果为0
。
答案 2 :(得分:1)
@Pbd是正确的。如果您安装了最新版本的gcc
并在编译时使用命令行标志-Wall -Wextra -Wshadow
,它将为您提供未初始化值的警告。
答案 3 :(得分:-1)
我认为代码中唯一的问题是当你将int数组传递给这个函数时。除此之外一切都很好。我通过初始化&#39; x&#39;来运行代码。数组,它工作正常。