2017-07-07 64 views
2

我是新来编码,需要知道如何显示我的数组的最大值,最小值,平均值和新的规范化值。我有最大最小和平均工作正确的截至目前,但我很困惑我将如何我的功能显示数组的适当的新值。重点是使用该功能; XI'=(XI-分钟)/(最大值 - 最小值) 我当前的代码如下:数组和通过引用

#include <iostream> 
using namespace std; 

void normalizeMinMaxAvg(double data[], int size,double& min, double& max, double& avg) 
{ 
    max = 0; 
    min = 0; 
    int sum = 0; 
    int i; 
    avg = 0; 

    for (i = 0; i < size; i++) { 
     sum += data[i]; 
     if (max < data[i]) { 
      max = data[i]; 
     } 
     if (min > data[i]) { 
      min = data[i]; 
     } 
    } 
    avg = sum/size; 

    for (i = 0; i < size; i++){ 
     data[i] = (data[i]-min)/(max-min); 
    } 
} 


int main() 
{ 
    double data[] = {-10.0,0.0,20.0,30.0,500.0}; 
    double min, max, avg; 

    normalizeMinMaxAvg (data, 5, min, max, avg); 
    cout << "min = " << min << "\n"; 
    cout << "max = " << max << "\n"; 
    cout << "avg = " << avg << "\n"; 
    cout << data; 
    return 0; 
} 
+2

不要使用原始数组,而是使用'std :: array'或'std :: vector'。 – user0042

+0

很有可能这是学校的工作,那些不会被允许的......但是。 –

+0

@MichaelDorgan是正确的,我们不应该使用这些数据 –

回答

2

您的代码被正确地更新阵列值。但是,为了显示数组值正确使用for loop这样的:

int arrSize = sizeof(data)/sizeof(data[0]); 
for(int i =0; i<arrSize; ++i) 
    cout << data[i]<<" "; 

或者,你也可以使用Vector代替原始阵列像这样的:

vector<double> data ={-10.0,0.0,20.0,30.0,500.0}; 

,并通过它by reference给你的函数。

+1

为什么不简单'for(auto val:data)'? – user0042

+1

完全同意,但问题被标记在C++而不是C++ 11 –

+0

C++ 11是***当前***标准。那为什么这个区别呢? – user0042

1

如果你想“打印”数组您需要遍历每个成员,你已经做了好几次:

for (int i = 0; i < array_size; i++){ 
    cout << data[i] << "\n"; 
} 

你在做什么目前:

cout << data; 

威尔只需打印数组的地址即可。

+0

为什么不简单'for(auto val:data)'? – user0042

+0

@ user0042这取决于C++的版本。两者都很好。 –

0

data只包含数组的地址,在您的情况下,它是指向double的指针,您需要迭代数组并逐个打印每个值。