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

【C言語】3×3行列の行・列・対角線の合計を計算するプログラムの作成方法


問題

C言語を使用して、実行時に任意の9つの数値を入力し、それらを行方向・列方向・対角線方向それぞれについて合計を求めて表示するプログラムを作成します。

アルゴリズム

Step 1: 9つの変数を宣言する
Step 2: 実行時に9つの数値を入力する
Step 3: 入力した数値を3×3行列の形式で格納する
        // x y z
        p q r
        a b c
Step 4: 行の計算:各行の数値をすべて加算して表示する
        // (x+y+z),(p+q+r),(a+b+c)
Step 5: 列の計算:各列の数値をすべて加算して表示する
        //(x+p+a)(y+q+b)(z+r+c)
Step 6: 対角線の計算:対角線上の数値を加算して表示する
        //(x+q+c),(a+q+z)

プログラム

以下がC言語によるサンプルコードです。scanf関数で9つの整数を読み込み、printf関数の中で加算式を直接記述することで、行・列・対角線ごとの合計をまとめて計算して出力しています。

#include<stdio.h>
int main(){
    int x,y,z,p,q,r,a,b,c;
    printf("enter any 9 numbers :\n");
    scanf("%d%d%d%d%d%d%d%d%d",&x,&y,&z,&p,&q,&r,&a,&b,&c);//9つの整数をすべて読み込む
    printf("%d %d %d\n",x,y,z);
    printf("%d %d %d\n",p,q,r);
    printf("%d %d %d\n",a,b,c);
    printf("Row total:%d %d %d\n",(x+y+z),(p+q+r),(a+b+c));//行の計算
    printf("column total: %d %d %d\n",(x+p+a),(y+q+b),(z+r+c));//列の計算
    printf("diagonal total :%d %d\n",(x+q+c),(a+q+z));//対角線の計算
    return 0;
}

実行結果

enter any 9 numbers :
2 4 6 3 5 7 8 9 2
2 4 6
3 5 7
8 9 2
Row total:12 15 19
column total: 13 18 15
diagonal total :9 19

解説

このプログラムでは、入力された9つの数値を次のような3×3行列として扱っています。

x y z
p q r
a b c

行の合計は「(x+y+z)」「(p+q+r)」「(a+b+c)」、列の合計は「(x+p+a)」「(y+q+b)」「(z+r+c)」、対角線の合計は左上から右下へ向かう「(x+q+c)」と、右上から左下へ向かう「(a+q+z)」の2本を計算しています。
なお、配列とfor文を組み合わせて実装すれば、より簡潔で拡張性の高いコードに書き換えることも可能です。


  1. C言語で自然数を列方向に出力するプログラムの作り方

    プログラムの概要 本記事では、C言語を使って自然数を列方向(縦方向)に並べたパターンを出力する方法を解説します。完成イメージは以下のとおりです。 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 一見複雑に見えるこの数列も、行と列の関係さえ理解できれば、シンプルなループ処理だけで実現できます。 アルゴリズムの考え方 変数 i は行番号、j は列番号を表し、ここでは5行分のパターンを作成します。 外側のループで各行(i = 1〜5)を順に処理する 内側のループに入る前に、k を i の値で初期化する 内側のループで各列(j = 1〜i)を処理する 現在の k の値を表示

  2. Cプログラムで行列を対角パターンに沿って数値出力する方法

    この課題は、n×nの行列を対角パターンで出力することです。 例えば n が 3 の場合、対角パターンに従って行列を出力すると、次のような配置になります。 そして、実際の出力結果は以下の通りです。 実行例 Input: 3 Output: 1 2 4 3 5 7 6 8 9 Input: 4 Output: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 考え方 一見すると、「数値 n を受け取り n×n の行列を生成し、それを対角方向に走査しながら別の行列へ値を格納する」というアプローチが思い浮かびます