C中数组的Max,Min,Avg函数

新手上路,请多包涵

我的任务是编写一个函数,该函数将一个双精度数组、数组的大小以及 3 个称为 min、max 和 avg 的传递引用参数作为参数。我的函数必须:处理数组数据以找到最小值(min),最大值(max),并计算平均值(avg),每个都分配给相应的参考参数,以便调用函数能够看到这些值。我对编码相当陌生,并且对我的错误是下面包含的主要功能感到非常困惑,任何帮助将不胜感激。

 #include <iostream>
using namespace std;

void normalizeMinMaxAvg(double data[], int size,double& min, double&
    max, double& avg)
{
    max = 0;
    min = 0;
    //int amount = size;
    int count = 0;
    int sum = 0;
    int i;
    avg = 0;

    for (i=0; i < size; i++)
    {
        count++;
        sum += i;

        if ( i > max)
        {
            i=max;
        }

        else if (i < min)
        {
            i=min;
        }
    }
    avg = sum/count;
}

int main ()
{
    double data[]={10.0,0.0,20.0,30.0};

    cout << normalizeMinMaxAvg (data, 4, min, max, avg);
    return 0;
}

原文由 Mitchell Lawlor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 951
2 个回答

您的代码有几个问题。您需要了解在 C++ 中 通过引用传递参数的 工作原理。

 void normalizeMinMaxAvg(double data[], int size,double& min, double& max, double& avg)

normalizeMinMaxAvg 不返回任何东西 - 注意 void 返回类型 - 它修改了 3 个已经存在的 main double 变量,所以如果你要调用它 --- 你必须定义这些变量。

 int main()
{
    double data[]={10.0,0.0,20.0,30.0};
    double min = 0, max = 0, avg = 0; //variables defined and initialized here
    //Note the '= 0' on all variables, it's important else they'll have random values
    normalizeMinMaxAvg(data, sizeof(data)/sizeof(data[0]), min, max, avg);

    //Your function has modified min, max, and avg, so you use them here
    std::cout << min << ", " << max << ", " << avg << std::endl;
    return 0;
}

你的 normalizeMinMaxAvg 函数也有问题:

 void normalizeMinMaxAvg(double data[], int size,double& min, double& max, double& avg)
{
    if (size <= 0) //Nothing to do. Might want to add a return error code
        return;

    //0 is not a sensible value for init, what if all your values are negative?
    min = data[0];
    max = data[0];
    avg = 0;

    int sum = 0;

    for (i=0; i < size; i++)
    {
        sum += data[i];
        if ( data[i] > max) { //have to access your data by data[i]
            max=data[i]; //NOT i=max, you're assigning to max
        }

        if (data[i] < min) {
            min=data[i];
        }
    }
    avg = sum/size;
}

原文由 Ramon 发布,翻译遵循 CC BY-SA 3.0 许可协议

只需提供可以传递给该函数的变量,然后输出如下:

 int main ()
{
    double data[]={10.0,0.0,20.0,30.0};
    double min, max, avg;

    normalizeMinMaxAvg (data, 4, min, max, avg);
    cout << "min = " << min << "\n";
    cout << "max = " << max << "\n";
    cout << "avg = " << avg << "\n";
    return 0;
}

同样在您的函数内部,使用数组中的数据来计算 minmax

     if ( data[i] > max)
    {
        max = data[i];
    }

    else if (data[i] < min)
    {
        min = data[i];
    }

原文由 user0042 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏