簡體   English   中英

比平均值高多少個數字 [C++]

[英]How many numbers higher than average [C++]

我用 30 個隨機數填充了一個數組並計算了平均值。 我想顯示有多少數字高於平均值。 我嘗試創建一個函數“aboveAverage”並檢查數字是否高於平均值,而不僅僅是增加計數“num_over_average++”。 問題是我不知道如何將值“avg”從函數傳遞到另一個函數。

#include <iostream>
#include <ctime>
using namespace std;

const int n = 30;

void fillArray(int age[], int n) {
    srand(time(NULL));
    for (int index = 0; index < n; index++) {
        age[index] = (rand() % 81) + 8;     
    }
}

void printArray(int age[], int n) {
    for (int index = 0; index < n; index++) {
        cout << age[index] << endl;
    }
}

double printAverage(int age[], int n) {
    double sum;
    double avg = 0.0;
    for (int i = 0; i < n; i++) {
        sum = sum + age[i];
    }
    avg = ((double) sum) / n;
    cout <<  avg << endl;
    return avg;
}

void aboveAverage(int age[], int n) {
    double avg;
    int num_over_average = 0;
    for(int i = 0; i < n; i++){
            if(age[i] > avg) {
                num_over_average++;
            }
        }
    cout<<num_over_average;
}
int main(int argc, char *argv[]) {
    int age[n];

    fillArray(age, n);
    cout << "array: " << endl;
    printArray(age, n);
    cout << endl;

    aboveAverage(age, n);

    //example: Days above average: 16
}

這應該是評論,但我沒有足夠的代表:(

  • 變化aboveAveragevoid aboveAverage(int age[], int n, double avg)
  • printAverage函數返回avg
  • main代碼的最后一部分更改為

    double avg; avg = printAverage(age, n); aboveAverage(age, n, avg);

希望這可以幫助!

您有兩種使用您的代碼的解決方案:

您要么調用printAverage()以在aboveAverage()初始化avg

void aboveAverage(int age[], int n) {
    double avg = printAverage();
    ...
}

或者你在傳遞參數的平均aboveAverage()已經與計算之后printAverage()

void aboveAverage(int age[], int n, double avg) {
    ...
}

如果你使用標准庫,你可以用兩行代碼來做到這一點:

double average = std::accumulate(std::begin(age), std::end(age), 0.0) / std::size(age);
int above_average = std::count_if(std::begin(age), std::end(age),
    [average](double value) { return average < value; });

好吧,你可以把它算作三行。

與問題中的代碼相比,這種方法的一個主要優點是您可以將容器類型更改為vector<double>而無需更改任何代碼。

嗯很簡單,但取決於你的情況,我會詳細說明。 我的情況是它是更大函數的一部分 (do-somthing()) 您可以像這樣計算平均值並將其傳遞給您的“aboveAverage”函數並打印它:

double n_average = printAverage(nArr_ages, n_agesArraySize);

aboveAverage(nArr_ages,  n_agesArraySize, n_averag);

我自己可能會將 printAverage 函數重寫為兩個函數,一個返回基於數組的平均值,另一個不同時打印它,因為它違反了單一職責的 SOLID 原則,並且函數名稱應准確反映它的內容確實,在這種情況下,可能會使用 calculateAverage 或 getAverageAge 或任何其他適當的名稱(嘗試將您的函數命名為英語,這樣您的代碼就會像一首歌一樣讀起來。

例如:

const size_t n = 30;

double calculateAverage(int nArr_ages[], int n_agesArraySize) {
    double sum = 0.0;
    double avg = 0.0;
    for (int indexInArray = 0; indexInArray < n_agesArraySize; indexInArray++) {
        sum = sum + age[indexInArray];
    }
    average = ((double) sum) / n_agesArraySize;
    return average;
}

int aboveAverageCells(int ages[], int n_agesArraySize ) {
    double average = calculateAverage(ages, n);
    int num_over_average = 0;
    for(int indexInArray = 0;  indexInArray < n_agesArraySize; indexInArray++) {
            if(ages[indexInArray] > avg) {
                num_over_average++;
            }
    }
    return num_over_average;
}

現在只需按順序調用它們,將返回值保存到 main 函數中的局部變量中,並在 main 中使用 cout 進行本地打印。

作為旁注,下次可能會為數組大小的常量和局部函數變量選擇不同的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM