2017-07-07 946 views
-3

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

#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; 
} 
+2

是什么,你得到的错误? – Algorithmic

+2

由于你的函数没有返回任何东西,你不能直接从它输出。 – user0042

+0

正在发生的错误是“In function'int main()': 46:52:error:'avg'未在此范围内声明” –

回答

0

您的代码有几个问题。您需要了解passing arguments by reference如何在C++中工作。

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

normalizeMinMaxAvg不返回任何东西 - 注意void返回类型 - 它修改3个已有double变量,因此,如果你要叫它形成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功能也有问题:

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

夫妇的事情,我注意到:

的值存储在数据[]所以你必须使用数据[i]于你的循环检查最小值,最大值,并计算平均值。

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

0

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

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

Min,max和avg不会返回并位于'main()范围。 – woz

+1

@woz他们通过引用传递,函数修改它们 – vu1p3n0x

+3

@woz就像_ @ vu1p3n0x_说的那样。请停止战术downvoting。 – user0042

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; 

你也需要以使用他们在您的main()函数声明变量minmaxavg当你打电话给你normalizeMinMaxAvg功能。

0

三件事:

  1. 你必须通过他们对之前定义最小值,最大值,在main()函数的魅力。
  2. 你不能cout < <函数()如果它不返回任何东西。
  3. 在normalizeMinMaxAvg for循环中,您可以访问i(索引)而不是数据[i](数组索引i下的数据)。
1

几个问题:

  • 成交与空数据阵列情况下第一。
  • minmax设置为数组的第一个元素(不为零)。想想如果这些数字都是负数。最大值是否包含正确答案?
  • 你想找到的最大和最小的元素,所以你必须使用包含的数据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; 
} 
相关问题