このページの解説は 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) {
+= array[i];
result }
return result;
}
int average(const int* array, size_t size)
{
(size > 0);
assertreturn sum(array, size) / size;
}
int main(void)
{
const int array[] = {0, 1, 2, 3, 4};
("%d\n", average(array, SIZE_OF_ARRAY(array)));
printf}
実行結果:
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) {
+= array[i];
result }
return result;
}
double average(const int* array, size_t size)
{
(size > 0);
assertreturn (double)sum(array, size) / size;
}
int main(void)
{
const int array[] = {1, 2, 4, 5, 9};
("%lf\n", average(array, SIZE_OF_ARRAY(array)));
printf}
実行結果:
4.2
合計を求める部分は整数型のままでも良いですが、要素数で除算を行う際に、実数型を使う必要があります。このサンプルプログラムでは、sum関数が返した結果を double型にキャストすることで、double型同士の除算になるようにしています(第21章)。
return 0;
を削除(C言語編全体でのコードの統一)新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |