为什么我的数字数组的平均值不正确?

时间:2018-09-13 02:02:11

标签: c arrays pointers

我编写了一种方法(通过指针)获取数组及其大小以计算平均值。我对指针还是比较陌生的。我试图删除整个代码中的引用运算符,直到将其编译到该点为止,但返回的值不是必需的。例如,如果我传入的数组大小为3,然后我的数组值为{1、2、3},但我闭着眼睛,我可以告诉你平均值应该为2。但是我的代码返回2.666666667。相反,我将2.6666 ... 7乘以3,等于3。这使我认为我在某个地方,将2修改为数组,例如{1,2,3,2},但是我目前尚不确定。如果有人对指针/简单算术有任何经验,我将不胜感激您的建议,因为再次,我是指针和这种按地址引用的新手。谢谢!

double *Average(double *arr, int size)
    {
        double *avg;
        avg = (double *)malloc(sizeof(double));

        *avg = 0;

        int i;
        for (i = 0; i < size; i++)
        {
            *avg = *avg + arr[i];
        }

        *avg = *avg / (double) size;

        printf("The average of the array: %f\n", *avg);
        return avg;
}

如何从main调用该方法:

else if (choice == 'C' || choice == 'c')
{
    int count;

    printf("How many numbers do you want to use in the array?\n> ");
    scanf("%d", &count);

    double *arr;
    arr = (double *)malloc(sizeof(double) * count);

    int i;
    for (i = 0; i < count; i++)
    {

        printf("Please enter a number (%d of %d)\n> ", i + 1, count);
        scanf("%lf", &arr[i]);
    }

    Min(arr, count);

    Max(arr, count);

    Average(arr, count);
}

测试:

  • 平均({1,3,5},3)
      

    预计:3,得到:4.333333

  • 平均({1,1,1},3)
      

    预期:1,得到:1

  • 平均({1,2,3,4,5,6,7,8,9},9)
      

    预计:5,得到:5.888889

每个用户请求另外两个方法:

double *Min(double *arr, int size)
{
    double *min = &arr[0];
    int i;
    for (int i = 1; i < size; i++)
    {
        if (arr[i] < *min)
        {
        *min = arr[i];
        }
    }

    printf("Smallest number in array: %f\n", *min);
    return min;
}

double *Max(double *arr, int size)
{
    double *max = &arr[0];
    int i;
    for (int i = 1; i < size; i++)
    {
        if (arr[i] > *max)
        {
            *max = arr[i];
        }
    }

    printf("Largest number in array: %f\n", *max);
    return max;
}

1 个答案:

答案 0 :(得分:2)

问题在这里,请更正此问题:

        *max = arr[i];

您正在将*max的{​​{1}}更改为数组的最大值或最小值。因此,当arr[0]函数获取数组时,它不是您输入的数组,而是被更改了。例如:

Average()

数组变为:

        Max({1,3,5})=5

正确的平均水平是:

        arr={5,3,5}