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

トップページC言語編逆引き

このページの概要 🔗

このページの解説は C99 をベースとしています

以下は目次です。

目的 🔗

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

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

基本的にはやり方は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)));
}

実行結果:

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("%lf\n", average(array, SIZE_OF_ARRAY(array)));
}

実行結果:

4.2

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


参考リンク 🔗


更新履歴 🔗

 新規作成。



逆引きのトップページへ

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る