Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

【Cプログラミング】配列内の数値の平均値を求める方法|反復処理と再帰処理の2つのアプローチ

配列には n 個の要素が格納されており、この記事ではそれらの数値の平均値を求めるプログラムを、異なる2つの方法で紹介します。

なお、サンプルコードでは説明を分かりやすくするためにC++の標準入出力(cout)を使用していますが、平均値を求めるロジック自体はC言語でも同じ考え方で実装できます。

入力:1 2 3 4 5 6 7
出力:4

解説:配列要素の合計は 1+2+3+4+5+6+7=28 となり、配列の要素数は7です。
したがって、平均値 = 28 ÷ 7 = 4 となります。

平均値の求め方には、主に次の2つの方法があります。

方法1:反復処理(ループ)

この方法では、まずループを使って配列の全要素の合計を求め、その合計を要素の総数で割ることで平均値を計算します。

ここでは、配列 arr[] とそのサイズ n が与えられたものとします。

入力:1 2 3 4 5 6 7
出力:4

解説:配列要素の合計は 1+2+3+4+5+6+7=28、要素数は7のため、平均値 = 28 ÷ 7 = 4 となります。

サンプルコード

#include<iostream>
using namespace std;
int main() {
    int arr[] = { 1, 2, 3, 4, 5, 6, 7 };
    int n = 7;
    int sum = 0;
    for (int i = 0; i < n; i++) {
        sum += arr[i];
    }
    float average = sum / n;
    cout << average;
    return 0;
}

コードのポイント

  • 変数 sum を 0 で初期化し、forループで配列の各要素を先頭から順番に加算していきます。
  • ループが終了した時点で、sum には全要素の合計(28)が格納されています。
  • 合計を要素数 n で割ることで平均値を求め、cout で画面に出力します。

注意:sum と n がどちらも int 型の場合、除算は整数除算として行われ、小数点以下は切り捨てられます。小数点以下の値が必要な場合は、(float)sum / n のように明示的にキャストを行いましょう。

方法2:再帰処理

この方法では、現在処理中の要素のインデックスを追加の引数として渡し、再帰的に合計を計算します。合計が求まった後、それを要素数 n で割ることで平均値を得ます。

ここでは、配列 arr[]、配列のサイズ n、初期インデックス i が与えられたものとします。

入力:1 2 3 4 5
出力:3

解説:配列要素の合計は 1+2+3+4+5=15、要素数は5のため、平均値 = 15 ÷ 5 = 3 となります。

サンプルコード

#include <iostream>
using namespace std;
int avg(int arr[], int i, int n) {
    if (i == n-1) {
        return arr[i];
    }
    if (i == 0) {
        return ((arr[i] + avg(arr, i+1, n)) / n);
    }
    return (arr[i] + avg(arr, i+1, n));
}
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = 5;
    cout << avg(arr, 0, n) << endl;
    return 0;
}

コードのポイント

  • avg 関数は、インデックスが最後の要素(i == n-1)に達すると、その要素の値を返します。これが再帰の終了条件となります。
  • インデックスが 0 の場合、つまり最初の呼び出しでは、合計を要素数 n で割った値を返します。
  • それ以外の場合は、現在の要素の値と、次のインデックスに対する再帰呼び出しの結果を加算して返します。

まとめ

配列の平均値を求める基本は「全要素の合計 ÷ 要素数」です。反復処理はシンプルで理解しやすく、実務でも最もよく使われる方法です。一方、再帰処理はコードを簡潔かつ関数的に書けるのが特徴ですが、要素数が多い場合にはスタックオーバーフローのリスクもあります。目的や規模に応じて、適切な方法を選択するとよいでしょう。

  1. JavaScriptで配列内の素数だけを合計する方法

    本記事では、数値の配列を受け取り、その中に含まれる素数のみの合計を返すJavaScript関数の作成方法について解説します。 実装の方針 この処理を実現するためには、次の2つの関数が必要になります。 isPrime関数: 与えられた数が素数かどうかを判定するヘルパー関数 primeSum関数: 配列の各要素を走査し、素数だけを合計する本体の関数 コード例 実際のコードは以下の通りです。 const arr = [43, 6, 6, 5, 54, 81, 71, 56, 8, 877, 4, 4]; const isPrime = n => {    if (n

  2. C言語のポインタ配列とは?宣言・初期化・アクセス方法を実例付きで解説

    ポインタとは、別の変数のアドレス(メモリ上の場所)を格納するための変数です。C言語においてポインタは非常に重要な概念であり、メモリを直接操作することで効率的なプログラムを作成できます。 ポインタの特徴 メモリ空間を節約できる メモリ位置へ直接アクセスするため、実行速度が速い メモリを効率的に利用でき、動的な割り当て(確保)と解放が可能 リンクリストやツリーなどのデータ構造と組み合わせて使用できる ポインタの宣言と初期化 まず、次のような文を考えてみましょう。 int qty = 179; このとき、変数はメモリ上に値「179」とそのアドレスを持つ形で表現されます。 ポインタの宣言 ポ