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

时间:2017-07-07 16:01:31

标签: c++ arrays

我的任务是编写一个函数,该函数将参数作为双精度数组,数组的大小,然后是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;
}

7 个答案:

答案 0 :(得分:2)

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

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];
    }

答案 1 :(得分:1)

您的问题是您没有访问阵列的数据。相反,您正在使用迭代变量i。基本上,在normalizeMinMaxAvg函数上,您应该在for循环中执行此操作:

for (i=0; i < size; i++){
    //count++;  - no need for it, you already have size!
    sum += data[i];
    if ( max > data[i]){
        max = data[i];
    }
    if (min < data[i]){
        min = data[i];
    }
}
avg = sum/size;

您还需要在min函数中声明变量maxavgmain(),以便在调用normalizeMinMaxAvg函数时使用它们

答案 2 :(得分:1)

几个问题:

  • 首先处理空数据数组。
  • minmax设置为数组的第一个元素(不是零)。想想如果这些数字都是负面的话会怎么样。 max会包含正确答案吗?
  • 您想要找到最大和最小元素,因此您必须使用data

    中包含的数据
    if ( data[i] > max){
        max=data[i];
    }
    

    同样适用于最小案例。

  • normalizeMinMaxAvg未返回,因此您无法在cout表达式中使用它。您可以直接打印参数。

以下是您的代码的工作版本。

void normalizeMinMaxAvg(double data[], int size,double& min, double& 
    max, double& avg)
{
    if(size<=0)
        return;
    min= max = data[0];

    int count = 0;
    double sum = 0;
    int i;
    avg = 0;

    for (i=1; i < size; i++)
    {
        count++;
        sum += data[i];

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

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

int main () 
{
    double data[]={10.0,0.0,20.0,30.0};
    double min,max,avg;
    normalizeMinMaxAvg (data, 4, min, max, avg);
    cout<<min<<"  "<<max<<" "<<avg<<endl;
    return 0;
}

答案 3 :(得分:0)

我发现了一些事情:

值存储在data []中,因此您必须使用循环中的data [i]来检查min,max和计算平均值。

此外,您希望将min初始化为最大double值,以便将其替换为数据中的实际最小值。

答案 4 :(得分:0)

您需要引用数组中的项目。所以它不应该仅仅是我,这只是一个数字。应该是数据[i]。这将引用数组数据的第i个元素。

答案 5 :(得分:0)

三件事:

  1. 您必须在传递main()函数之前定义min,max,avg。
  2. 你不能小丑&lt;&lt; function()如果它没有返回任何东西。
  3. 在normalizeMinMaxAvg for循环中,您可以访问i(索引)而不是data [i](数组数据中索引i下的数据)。

答案 6 :(得分:0)

您的代码存在一些问题。您需要了解passing arguments by reference在C ++中的工作原理。

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

normalizeMinMaxAvg没有返回任何内容 - 请注意void返回类型 - 它会修改3个已存在的double变量,因此如果您打算将其称为{{1}你必须定义那些变量。

main

您的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