我的任务是编写一个函数,该函数将参数作为双精度数组,数组的大小,然后是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;
}
答案 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;
}
同样在您的函数内部使用数组中的数据来计算min
和max
:
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
函数中声明变量max
,avg
和main()
,以便在调用normalizeMinMaxAvg
函数时使用它们
答案 2 :(得分:1)
几个问题:
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;
}
答案 3 :(得分:0)
我发现了一些事情:
值存储在data []中,因此您必须使用循环中的data [i]来检查min,max和计算平均值。
此外,您希望将min初始化为最大double值,以便将其替换为数据中的实际最小值。
答案 4 :(得分:0)
您需要引用数组中的项目。所以它不应该仅仅是我,这只是一个数字。应该是数据[i]。这将引用数组数据的第i个元素。
答案 5 :(得分:0)
三件事:
答案 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