【C言語】入力した行列を画面に表示する

この記事では、C言語を使って行列を入力し、表示する方法について学びます。

行列とは、数字を行と列に並べたものです。

まず、ユーザーから行列のデータを受け取り、次にその行列を画面にきれいに表示する方法を紹介します。

これを通じて、C言語での行列操作の基礎を理解できるようになります。

目次から探す

行列の入力方法

行列を扱うプログラムを作成する際、まずは行列の入力方法を理解することが重要です。

ここでは、ユーザーからの入力を受け取る方法と、行列の初期化について詳しく解説します。

ユーザーからの入力

行列の要素をユーザーから入力してもらうためには、scanf関数を使用します。

この関数は、標準入力からデータを読み取るための基本的な方法です。

scanf関数の使い方

scanf関数を使うことで、ユーザーが入力した値をプログラム内の変数に格納することができます。

行列の場合、二重ループを使って各要素を入力するのが一般的です。

以下は、3行3列の行列を入力するサンプルコードです。

#include <stdio.h>
#define ROWS 3
#define COLS 3
int main() {
    int matrix[ROWS][COLS];
    printf("3x3の行列の要素を入力してください:\n");
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("要素 [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]); // ユーザーからの入力を受け取る
        }
    }
    return 0;
}

このコードでは、3行3列の行列を定義し、二重ループを使って各要素をユーザーから入力しています。

scanf関数を使って、入力された値を行列の各要素に格納しています。

入力エラーチェックの重要性

ユーザーからの入力を受け取る際には、入力エラーが発生する可能性があります。

例えば、数値以外の文字が入力された場合、プログラムが正しく動作しないことがあります。

そのため、入力エラーチェックを行うことが重要です。

以下は、入力エラーチェックを追加したサンプルコードです。

#include <stdio.h>
#define ROWS 3
#define COLS 3
int main() {
    int matrix[ROWS][COLS];
    int result;
    printf("3x3の行列の要素を入力してください:\n");
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("要素 [%d][%d]: ", i, j);
            result = scanf("%d", &matrix[i][j]);
            if (result != 1) { // 入力が成功したか確認
                printf("無効な入力です。整数を入力してください。\n");
                return 1; // エラーが発生した場合はプログラムを終了
            }
        }
    }
    return 0;
}

このコードでは、scanfの戻り値を確認し、入力が成功したかどうかをチェックしています。

無効な入力があった場合にはエラーメッセージを表示し、プログラムを終了します。

行列の初期化

行列を使用する前に、初期化を行うことが一般的です。

初期化には、固定値での初期化とランダム値での初期化の2つの方法があります。

固定値での初期化

行列を固定値で初期化する場合、プログラム内で直接値を指定することができます。

以下は、すべての要素を1で初期化する例です。

#include <stdio.h>
#define ROWS 3
#define COLS 3
int main() {
    int matrix[ROWS][COLS] = {
        {1, 1, 1},
        {1, 1, 1},
        {1, 1, 1}
    };
    // 行列の表示
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

このコードでは、行列の各要素を1で初期化し、表示しています。

ランダム値での初期化

行列をランダムな値で初期化する場合、rand関数を使用します。

以下は、0から9の範囲でランダムな整数で初期化する例です。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 3
#define COLS 3
int main() {
    int matrix[ROWS][COLS];
    // 乱数の初期化
    srand(time(NULL));
    // 行列のランダム初期化
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            matrix[i][j] = rand() % 10; // 0から9のランダムな整数
        }
    }
    // 行列の表示
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

このコードでは、srand関数を使って乱数の初期化を行い、rand関数で生成したランダムな整数を行列に格納しています。

行列の各要素は、0から9の範囲のランダムな値になります。

以上が、C言語における行列の入力方法と初期化の基本的な方法です。

次のセクションでは、入力した行列を画面に表示する方法について解説します。

行列の表示方法

行列を画面に表示することは、プログラムの結果を確認するために非常に重要です。

ここでは、C言語を使って行列を表示する方法について詳しく解説します。

基本的な表示方法

行列を表示するためには、まずその要素を一つずつ取り出して画面に出力する必要があります。

これには、二重ループを使用するのが一般的です。

二重ループを用いた表示

行列は通常、行と列の2次元配列として表現されます。

したがって、行列の各要素にアクセスするためには、外側のループで行を、内側のループで列を処理します。

以下は、行列を表示するための基本的なサンプルコードです。

#include <stdio.h>
#define ROWS 3  // 行数
#define COLS 3  // 列数
int main() {
    int matrix[ROWS][COLS] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    // 行列の表示
    for (int i = 0; i < ROWS; i++) { // 行のループ
        for (int j = 0; j < COLS; j++) { // 列のループ
            printf("%d ", matrix[i][j]); // 要素の表示
        }
        printf("\n"); // 行の終わりで改行
    }
    return 0;
}

このコードを実行すると、次のように行列が表示されます。

1 2 3 
4 5 6 
7 8 9

フォーマット指定子の活用

printf関数では、フォーマット指定子を使って出力の形式を調整できます。

例えば、数値の幅を指定することで、整然とした表示が可能です。

以下のコードでは、各要素を幅3で表示しています。

#include <stdio.h>
#define ROWS 3
#define COLS 3
int main() {
    int matrix[ROWS][COLS] = {
        {1, 22, 333},
        {4444, 5, 6},
        {7, 88, 9}
    };
    // 行列の表示
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("%3d ", matrix[i][j]); // 幅3で表示
        }
        printf("\n");
    }
    return 0;
}

このコードを実行すると、次のように整然とした行列が表示されます。

1  22 333 
4444  5  6 
  7  88  9

見やすい表示形式

行列を表示する際には、見やすさも重要です。

行間や列間を調整することで、視認性を向上させることができます。

行列の整形表示

行列を整形して表示するためには、行や列の間にスペースや区切り線を入れることが効果的です。

以下のコードでは、行の間に空行を挿入しています。

#include <stdio.h>
#define ROWS 3
#define COLS 3
int main() {
    int matrix[ROWS][COLS] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    // 行列の整形表示
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n\n"); // 行の終わりで改行を2回
    }
    return 0;
}

このコードを実行すると、次のように行間が空いた表示になります。

1 2 3 
4 5 6 
7 8 9

行間や列間の調整

さらに、列間を広げるために、スペースを追加することもできます。

以下のコードでは、列間を広げて表示しています。

#include <stdio.h>
#define ROWS 3
#define COLS 3
int main() {
    int matrix[ROWS][COLS] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    // 行列の列間を調整して表示
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            printf("%d   ", matrix[i][j]); // 列間を広げる
        }
        printf("\n");
    }
    return 0;
}

このコードを実行すると、次のように列間が広がった表示になります。

1   2   3   
4   5   6   
7   8   9

このように、行列を表示する際には、基本的な表示方法から見やすい形式まで、さまざまな工夫が可能です。

これにより、プログラムの結果をより理解しやすくすることができます。

C言語における行列操作の応用例

C言語では、行列を使ったさまざまな操作が可能です。

ここでは、行列の入力と表示に加えて、行列の加算や転置などの基本的な操作を紹介します。

これらの操作は、数値計算やデータ処理の基礎となるため、理解しておくことが重要です。

行列の加算

行列の加算は、同じサイズの2つの行列の対応する要素を足し合わせる操作です。

以下に、行列の加算を行うサンプルコードを示します。

#include <stdio.h>
#define MAX 10  // 行列の最大サイズ
int main() {
    int A[MAX][MAX], B[MAX][MAX], C[MAX][MAX];
    int i, j, n, m;
    // 行列のサイズを入力
    printf("行列の行数と列数を入力してください: ");
    scanf("%d %d", &n, &m);
    // 行列Aの入力
    printf("行列Aを入力してください:\n");
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            scanf("%d", &A[i][j]);
        }
    }
    // 行列Bの入力
    printf("行列Bを入力してください:\n");
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            scanf("%d", &B[i][j]);
        }
    }
    // 行列の加算
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            C[i][j] = A[i][j] + B[i][j];
        }
    }
    // 結果の表示
    printf("行列A + 行列Bの結果:\n");
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            printf("%d ", C[i][j]);
        }
        printf("\n");
    }
    return 0;
}

このプログラムでは、まず行列のサイズを入力し、次に2つの行列AとBを入力します。

その後、行列CにAとBの加算結果を格納し、最終的に行列Cを表示します。

行列の転置

行列の転置は、行列の行と列を入れ替える操作です。

以下に、行列の転置を行うサンプルコードを示します。

#include <stdio.h>
#define MAX 10  // 行列の最大サイズ
int main() {
    int A[MAX][MAX], T[MAX][MAX];
    int i, j, n, m;
    // 行列のサイズを入力
    printf("行列の行数と列数を入力してください: ");
    scanf("%d %d", &n, &m);
    // 行列Aの入力
    printf("行列Aを入力してください:\n");
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            scanf("%d", &A[i][j]);
        }
    }
    // 行列の転置
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            T[j][i] = A[i][j];
        }
    }
    // 結果の表示
    printf("行列Aの転置:\n");
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            printf("%d ", T[i][j]);
        }
        printf("\n");
    }
    return 0;
}

このプログラムでは、行列Aを入力し、その転置行列Tを作成します。

行列の転置は、行列の行と列を入れ替えることで実現されます。

最終的に、転置行列Tを表示します。

まとめ

行列の加算や転置は、C言語における基本的な行列操作の一部です。

これらの操作を理解することで、より複雑な行列計算やデータ処理が可能になります。

行列を使ったプログラミングは、数値計算やデータ分析の分野で非常に重要なスキルですので、ぜひ実践してみてください。

目次から探す