先頭へ戻る

平均値を求める | Programming Place Plus C言語編 逆引き

Programming Place Plus トップページ -- C言語編 -- 逆引き

先頭へ戻る

この章の概要

この章の概要です。

目的

要素が数値の配列があるとき、その要素の値の平均値を求めたいとします。

方法①(合計を求めて、要素数で割る)

基本的にはやり方は1つで、合計を求めて、要素数で割るだけです。
合計を求める方法は、「合計を求める」で、 要素数を求める方法は「要素数を求める」で説明していますから、 それらの組み合わせで実現できます。

#include <assert.h>
#include <stdio.h>

#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

int sum(const int* array, size_t size)
{
    int result = 0;
    for (size_t i = 0; i < size; ++i) {
        result += array[i];
    }
    return result;
}

int average(const int* array, size_t size)
{
    assert(size > 0);
    return sum(array, size) / size;
}

int main(void)
{
    const int array[] = {0, 1, 2, 3, 4};

    printf("%d\n", average(array, SIZE_OF_ARRAY(array)));

    return 0;
}

実行結果:

2

要素数で割るときに、ゼロ除算にならないように注意してください。 ここでは、assertマクロで検出しています。

なお、整数型の値の平均値を、実数で得たい場合は、double型などで計算を行う必要があります。

#include <assert.h>
#include <stdio.h>

#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

int sum(const int* array, size_t size)
{
    int result = 0;
    for (size_t i = 0; i < size; ++i) {
        result += array[i];
    }
    return result;
}

double average(const int* array, size_t size)
{
    assert(size > 0);
    return (double)sum(array, size) / size;
}

int main(void)
{
    const int array[] = {1, 2, 4, 5, 9};

    printf("%f\n", average(array, SIZE_OF_ARRAY(array)));

    return 0;
}

実行結果:

4.2

合計を求める部分は整数型のままでも良いですが、要素数で除算を行う際に、実数型を使う必要があります。 このサンプルプログラムでは、sum関数が返した結果を double型にキャストすることで、 double型同士の除算になるようにしています(第21章)。


参考リンク


更新履歴

'2017/6/1 新規作成。



逆引きのトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー