繁体   English   中英

数组和按引用传递

[英]Arrays and Pass-By-Reference

我是编码新手,需要知道如何显示数组的Max,Min,Avg和新的标准化值。 到目前为止,我的max min和avg正常工作,但是我对如何让函数显示正确的数组新值感到非常困惑。 关键是要使用功能; xi'=(xi-min)/(max-min)我当前的代码如下:

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

您的代码正确更新了数组值。 但是要正确显示数组值,请使用for loop如下所示:

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

另外,您可以使用向量代替原始数组,如下所示:

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

并通过by reference将其传递给您的函数。

如果要“打印”数组,则需要遍历每个成员,因为您已经做过几次了:

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

您目前正在做什么:

cout << data;

将只打印数组的地址。

data仅保存数组的地址,在您的情况下,该地址是double的指针,您需要迭代数组并单独打印出每个值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM