C++数组的最大值、最小值、平均值函数

Max, Min, Avg function for an array in C++

本文关键字:最小值 函数 平均值 最大值 数组 C++      更新时间:2023-10-16

我的任务是编写一个函数,该函数将一个双精度数组、数组大小和 3 个称为 min、max 和 avg 的按引用传递参数作为参数。 我的函数必须:处理数组数据以找到最小值(最小值(,最大值(最大值(,并计算平均值(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;
}

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

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

几个问题:

  • 首先处理空数据数组的情况。
  • 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;
}

您的问题是您没有访问数组的数据。相反,您使用的是迭代变量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;

此外,您需要在main()函数上声明变量minmaxavg,以便在调用normalizeMinMaxAvg函数时使用它们。

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

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

normalizeMinMaxAvg不返回任何内容 - 请注意void返回类型 - 它修改了 3 个已经存在的double变量,所以如果你要称之为 formmain你必须定义这些变量。

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

我注意到的几件事:

这些值存储在 data[] 中,因此您必须在循环中使用 data[i] 来检查最小值、最大值并计算平均值。

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

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

三件事:

  1. 在传递它们之前,您必须在main((函数中定义min,max,avg。
  2. 如果函数((不返回任何内容,则无法<<函数((进行cout。
  3. 在 normalizeMinMaxAvg for 循环中,您可以访问 i(索引(而不是 data[i](数组数据中索引 i 下的数据(。