[英]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
}
這應該是評論,但我沒有足夠的代表:(
aboveAverage
到void 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.