C++数组的最大值、最小值、平均值函数
Max, Min, Avg function for an array in C++
我的任务是编写一个函数,该函数将一个双精度数组、数组大小和 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;
}
同样在您的函数中使用数组中的数据来计算min
和max
:
if ( data[i] > max)
{
max = data[i];
}
else if (data[i] < min)
{
min = data[i];
}
几个问题:
- 首先处理空数据数组的情况。
- 将
min
和max
设置为数组的第一个元素(不设置为零(。想想如果数字都是负数怎么办。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()
函数上声明变量min
、max
和avg
,以便在调用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 个元素。
三件事:
- 在传递它们之前,您必须在main((函数中定义min,max,avg。
- 如果函数((不返回任何内容,则无法<<函数((进行cout。
- 在 normalizeMinMaxAvg for 循环中,您可以访问 i(索引(而不是 data[i](数组数据中索引 i 下的数据(。
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- 如何使用函数std::min()来计算最小值
- 如何将最小值和最大值放入函数中
- C++数组的最大值、最小值、平均值函数
- 使用函数从数组中索引最小值的问题
- C++中的通用最小值和最大 lambda 函数
- C++递归函数,使用高和低查找数组中的最小值
- 尝试使用在数组中找到最小值的函数来按升序排序数组
- 使用 lambda 函数查找 std::unordered_map 中的最小值
- 我如何使用此二叉搜索函数的修改后的最大/最小值创建新数组
- 函数,它接受三个参数:指向双数组的指针、指向最小值的指针和指向最大值元素的指针
- 试图通过函数查找数组的最大值和最小值,其中数组值由用户输入
- C++为向量制作最小值和最大值函数
- C++函数从列表中查找最小值.此函数是否正确,因为返回的迭代器失效
- 从函数返回最小值作为指针
- 从函数中寻找最小值的启发式算法
- 重载函数最小值和模板
- 需要帮助编写一个函数来查找n维数组中的最大值和最小值