[C言語] 2次元配列に任意の値を代入する方法を解説
C言語で2次元配列に任意の値を代入するには、配列のインデックスを指定して値を設定します。
2次元配列は行と列で構成されており、例えばarray[i][j]のように指定することで、i行j列の要素にアクセスできます。
この方法を用いて、特定の位置に任意の値を代入することが可能です。
初期化時に値を設定する場合は、int array[2][3] = {{1, 2, 3}, {4, 5, 6}}のように記述します。
動的に値を代入する場合は、ループを使用して各要素にアクセスし、値を設定することが一般的です。
2次元配列への値の代入方法
C言語における2次元配列は、行と列で構成されるデータの集合体です。
ここでは、2次元配列に値を代入する方法をいくつか紹介します。
静的初期化
静的初期化は、配列を宣言すると同時に値を設定する方法です。
以下に例を示します。
#include <stdio.h>
int main() {
    // 2次元配列の静的初期化
    int matrix[2][3] = {
        {1, 2, 3}, // 1行目の初期化
        {4, 5, 6}  // 2行目の初期化
    };
    // 配列の要素を出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}1 2 3 
4 5 6 この方法は、配列のサイズと初期値が決まっている場合に便利です。
コードが簡潔で、初期化時にすべての要素に値を設定できます。
動的代入
動的代入は、プログラムの実行中に配列の要素に値を設定する方法です。
以下に例を示します。
#include <stdio.h>
int main() {
    int matrix[2][3]; // 2次元配列の宣言
    // 動的に値を代入
    matrix[0][0] = 1;
    matrix[0][1] = 2;
    matrix[0][2] = 3;
    matrix[1][0] = 4;
    matrix[1][1] = 5;
    matrix[1][2] = 6;
    // 配列の要素を出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}1 2 3 
4 5 6 動的代入は、プログラムのロジックに基づいて値を設定する場合に有効です。
初期化時に値が決まっていない場合に使用します。
ループを使った代入
ループを使った代入は、配列の各要素に対して繰り返し処理を行い、値を設定する方法です。
以下にforループとwhileループを使った例を示します。
forループを使った代入
#include <stdio.h>
int main() {
    int matrix[2][3]; // 2次元配列の宣言
    // forループを使って値を代入
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            matrix[i][j] = i * 3 + j + 1; // 計算式で値を設定
        }
    }
    // 配列の要素を出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}1 2 3 
4 5 6 forループを使うことで、規則的な値を効率的に代入できます。
特に、計算式を用いることで、複雑な初期化も簡単に行えます。
whileループを使った代入
#include <stdio.h>
int main() {
    int matrix[2][3]; // 2次元配列の宣言
    int i = 0, j = 0;
    // whileループを使って値を代入
    while (i < 2) {
        while (j < 3) {
            matrix[i][j] = i * 3 + j + 1; // 計算式で値を設定
            j++;
        }
        j = 0; // 列のインデックスをリセット
        i++;
    }
    // 配列の要素を出力
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}1 2 3 
4 5 6 whileループを使うことで、条件に基づいた柔軟な代入が可能です。
特に、ループの終了条件が動的に変わる場合に有効です。
具体例で学ぶ2次元配列の操作
2次元配列は、データを行と列で整理するのに便利な構造です。
ここでは、具体的な例を通じて2次元配列の操作方法を学びます。
2次元配列に整数を代入する例
整数を2次元配列に代入する基本的な方法を示します。
以下の例では、2×3の配列に整数を代入しています。
#include <stdio.h>
int main() {
    int matrix[2][3]; // 2次元配列の宣言
    // 値を代入
    matrix[0][0] = 10;
    matrix[0][1] = 20;
    matrix[0][2] = 30;
    matrix[1][0] = 40;
    matrix[1][1] = 50;
    matrix[1][2] = 60;
    // 配列の要素を出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}10 20 30 
40 50 60 この例では、手動で各要素に整数を代入しています。
配列の各要素に直接アクセスして値を設定する方法です。
文字列を2次元配列に代入する例
文字列を2次元配列に代入する方法を示します。
ここでは、文字列の配列を使って複数の文字列を格納します。
#include <stdio.h>
int main() {
    // 文字列を格納する2次元配列
    char words[3][10] = {
        "apple",  // 1行目の文字列
        "banana", // 2行目の文字列
        "cherry"  // 3行目の文字列
    };
    // 配列の要素を出力
    for (int i = 0; i < 3; i++) {
        printf("%s\n", words[i]);
    }
    return 0;
}apple
banana
cherryこの例では、各行に異なる文字列を格納しています。
文字列の長さに応じて、2次元配列の列数を設定する必要があります。
2次元配列の要素を出力する例
2次元配列の要素を出力する方法を示します。
以下の例では、整数の2次元配列を出力しています。
#include <stdio.h>
int main() {
    int matrix[2][3] = {
        {1, 2, 3}, // 1行目の初期化
        {4, 5, 6}  // 2行目の初期化
    };
    // 配列の要素を出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}1 2 3 
4 5 6 この例では、forループを使って2次元配列の各要素を順番に出力しています。
行と列のインデックスを使って、配列の要素にアクセスします。
応用例
2次元配列は、さまざまな応用が可能です。
ここでは、行列の加算や乗算、画像データの処理といった応用例を紹介します。
2次元配列を使った行列の加算
行列の加算は、同じサイズの2つの行列の対応する要素を加算する操作です。
以下に例を示します。
#include <stdio.h>
int main() {
    int matrixA[2][2] = {{1, 2}, {3, 4}}; // 行列Aの初期化
    int matrixB[2][2] = {{5, 6}, {7, 8}}; // 行列Bの初期化
    int result[2][2]; // 結果を格納する行列
    // 行列の加算
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            result[i][j] = matrixA[i][j] + matrixB[i][j];
        }
    }
    // 結果の出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }
    return 0;
}6 8 
10 12 この例では、2×2の行列AとBを加算し、結果を新しい行列に格納しています。
行列の加算は、対応する要素を単純に加算するだけで実現できます。
2次元配列を使った行列の乗算
行列の乗算は、行列の各要素を計算して新しい行列を生成する操作です。
以下に例を示します。
#include <stdio.h>
int main() {
    int matrixA[2][2] = {{1, 2}, {3, 4}}; // 行列Aの初期化
    int matrixB[2][2] = {{5, 6}, {7, 8}}; // 行列Bの初期化
    int result[2][2] = {0}; // 結果を格納する行列
    // 行列の乗算
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            for (int k = 0; k < 2; k++) {
                result[i][j] += matrixA[i][k] * matrixB[k][j];
            }
        }
    }
    // 結果の出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }
    return 0;
}19 22 
43 50 この例では、2×2の行列AとBを乗算し、結果を新しい行列に格納しています。
行列の乗算は、行と列の積を計算して各要素を求めます。
2次元配列を使った画像データの処理
2次元配列は、画像データの処理にも利用されます。
以下に、簡単な画像のネガポジ反転の例を示します。
#include <stdio.h>
int main() {
    // 3x3の画像データ(グレースケール)
    int image[3][3] = {
        {0, 128, 255},
        {64, 192, 32},
        {255, 0, 128}
    };
    // ネガポジ反転
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            image[i][j] = 255 - image[i][j];
        }
    }
    // 結果の出力
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", image[i][j]);
        }
        printf("\n");
    }
    return 0;
}255 127 0 
191 63 223 
0 255 127 この例では、3×3のグレースケール画像データをネガポジ反転しています。
各ピクセルの値を255から引くことで、反転した画像を得ることができます。
2次元配列を使うことで、画像の各ピクセルを簡単に操作できます。
まとめ
2次元配列は、C言語でデータを整理し操作するための強力なツールです。
この記事では、2次元配列への値の代入方法や具体的な操作例、応用例について学びました。
これにより、2次元配列を使ったプログラミングの基礎を理解できたはずです。
今後は、実際にコードを書いて2次元配列を活用し、より複雑なデータ構造やアルゴリズムに挑戦してみてください。
 
![[C言語] 配列とポインタとアドレスの関係について解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5489.png)
![[C言語] 配列のポインタに別の配列を代入できる?](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5496.png)
![[C言語] 配列のポインタを初期化する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5495.png)
![[C言語] 配列のポインタを引数で渡すとどうなる?](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5494.png)
![[C言語] 配列とポインタの違いを解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5493.png)
![[C言語] ポインタから配列のサイズを取得することができない理由を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5492.png)
![[C言語] ポインタのインクリメントを応用して配列を操作する](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5490.png)
![[C言語] 配列の要素の値を全て表示する方法を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5502.png)
![[C言語] 配列に要素を追加することはできる?できない?](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5501.png)
![[C言語] 配列にほかの値を代入する方法を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5500.png)
![[C言語] 配列を宣言する方法や宣言する際の注意点を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5499.png)
![[C言語] 配列を初期化する方法を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-5498.png)