比平均值高多少个数字[C ++]

时间:2019-05-13 08:31:56

标签: c++ arrays numbers average

我用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
}

4 个答案:

答案 0 :(得分:10)

这应该是一条评论,但我的代表次数不够:(

  • df = pd.DataFrame(data) df = df.apply(lambda x:x.words_result['words'],axis=1).to_frame(name='words_result') # df = df.pop('words_result').str.extract(r'(?P<office_name>[\x00-\x7F]+)?(?P<company_name>[\u4e00-\u9fff]+.*$)') df[['office_name','company_name']] = df.pop('words_result').str.extract(r'([\x00-\x7F]+)?([\u4e00-\u9fff]+.*$)') print(df) office_name company_name 0 05B01 企商联登记注册代理事务所(通合伙) 1 Unit-D 608 华夏启商(企业管理有限公司) 2 NaN 中睿智诚商业管理有限公司 3 17/F(1706) 美泰德商务咨询有限公司 4 A2006~A2007 新曙光会计服务有限公司 5 2906-10 建筑与室内设计师网 6 NaN 中建瑞达 更改为aboveAverage
  • void aboveAverage(int age[], int n, double avg)函数返回avg
  • printAverage代码的最后一部分更改为

    main

希望这会有所帮助!

答案 1 :(得分:4)

您有两种使用代码的解决方案:

您可以调用printAverage()avg中初始化aboveAverage()

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

或者您用aboveAverage()计算平均值后,在参数printAverage()中传递平均值:

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

答案 2 :(得分:2)

如果您使用标准库,则可以使用两行代码来做到这一点:

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>,而无需更改任何代码。

答案 3 :(得分:-1)

如果创建全局静态变量,则每个函数都可以访问它:

主要功能或其他所有功能

static int counter = 0;

您也可以通过引用将其传递,然后对原始变量进行每次更改:

myfunction(&count);//calling the function

void myfunction(int *counter){
}