見出し画像

No.19 配列について(2)

今回は、C言語の配列について解説します。

前回の記事をまだ見ていない方は、下記のリンクからぜひ見てください。
前回の記事を見てからこの記事を見ると理解しやすいです。↓

また、わからない点があればぜひコメントお願いします。
わかりやすいように更新させていただきます。

要素数を指定せずに初期化する

配列を宣言と同時に初期化する場合は要素数を省略することができます。この場合は初期値として指定した値の数が要素数となります。

記述の仕方

要素数を指定せずに初期化する場合は次のように記述します。↓

データ型 配列名[] = {値0, 値1, ...};

具体的には次のように記述します。↓

int num[] = {5, 10, 8};

要素数が省略されているので、この配列の要素数は初期化で指定した値の数である 3個となります。

多次元配列について

多次元配列とは?

多次元配列とは、一次元配列を複数使用することで平面や立体のように、データを表や立方体のように配置するものです。

多次元配列のイメージ

  • 一次元配列: 線状に並んだ部屋(各部屋に1つのデータ)

  • 二次元配列: 表のように並んだ部屋(各部屋に1つのデータ)

  • 三次元配列: 立方体のように並んだ部屋(各部屋に1つのデータ)

上の図のように、行と列でデータを整理できるのが二次元配列です。三次元配列になると、この表が積み重なったようなイメージになります。

多次元配列の宣言

多次元配列は次のように書きます。↓

データ型 配列名[次元1のサイズ][次元2のサイズ][...]
  • データ型: 配列に格納するデータの型(int, double, charなど)

  • 配列名: 配列の名前

  • 次元1のサイズ, 次元2のサイズ, ...: 各次元の要素数

二次元配列の例

最もよく使われるのは二次元配列です。例えば、成績表を考えると、生徒(行)と科目(列)の組み合わせで成績を格納できます。↓

int scores[3][5]; // 3人の生徒、5科目の成績を格納する配列
  • scores[0] [0] は1人目の生徒の1科目目の成績

  • scores[2] [4] は3人目の生徒の5科目目の成績

多次元配列の初期化

二次元配列の初期化は一次元配列と同じく、中括弧 { } で囲んで、各行の要素をカンマで区切ります。↓

int scores[3][5] = {
    {80, 90, 75, 85, 95},
    {70, 80, 85, 90, 80},
    {90, 95, 80, 85, 90}
};

また、三次元配列では次のようになります。↓

int array[2][3][4] = {
    {{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
     {{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}},
    {{{25, 26, 27, 28}, {29, 30, 31, 32}, {33, 34, 35, 36}},
     {{37, 38, 39, 40}, {41, 42, 43, 44}, {45, 46, 47, 48}}}
};

要素に要素を入れているのがわかると思います。

多次元配列へのアクセス

printf("1人目の生徒の1科目目の成績は%d点です。\n", scores[0][0]);

配列名 [行] [列] の形で要素にアクセスします。

3人の生徒の5科目の成績を管理し、1人目の生徒の1科目目の成績を出力するプログラム。↓

#include <stdio.h>

int main() {
    int scores[3][5] = {
        {80, 90, 75, 85, 95},
        {70, 80, 85, 90, 80},
        {90, 95, 80, 85, 90}
    };

    // 1人目の生徒の1科目目の成績を出力
    printf("1人目の生徒の1科目目の成績は%d点です。\n", scores[0][0]);
    
    return 0;
}
  • scores [3] [5] は、3人の生徒、5科目の成績を格納する2次元配列です。

  • scores [i] [j] で、i 番目の生徒の j 番目の科目の成績にアクセスできます。

問題

  • 5人の生徒の、3つの科目の試験結果を二次元配列に格納してください。試験結果は任意の点数にしてください。

  • 各生徒の平均点を計算し、表示してください。

  • 全体の平均点を計算し、表示してください。

回答例

#include <stdio.h>

int main() {
    int scores[5][3] = {
        {80, 75, 90},
        {65, 85, 70},
        {92, 88, 95},
        {78, 72, 86},
        {85, 90, 82}
    };
    int i, j, sum, total_sum = 0;
    double average, total_average;

    for (i = 0; i < 5; i++) {
        sum = 0;
        for (j = 0; j < 3; j++) {
            sum += scores[i][j];
            total_sum += scores[i][j]; // 全体の合計を計算
        }
        average = (double)sum / 3;
        printf("生徒%dの平均点: %.2f\n", i+1, average);
    }

    // 全体の平均点の計算
    total_average = (double)total_sum / (5 * 3);
    printf("全体の平均点: %.2f\n", total_average);

    return 0;
}

解説

  • 二次元配列の宣言と初期化 : scores 配列に各生徒の3科目の得点データを格納します。

  • 生徒ごとの平均点計算 :

    • 各生徒の得点の合計を計算し、科目数で割って平均点を算出します。

    • 各生徒の合計点を total_sum に足し合わせて、全体の合計を計算します。

  • 全体の平均点計算 :

    • 全体の合計点を、生徒数と科目数の積で割って、全体の平均点を算出します。

今回は以上です。


いいなと思ったら応援しよう!