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

C言語:実行時に初期化した2次元配列の全要素の和と積を求めるプログラム


問題

実行時(ランタイム)に入力した値をもとに、配列内のすべての要素のを計算します。

解決方法

2次元配列は、表形式のデータを格納したい場合や、行列を扱うアプリケーションなどでよく使用されます。

宣言の構文は次のとおりです。

データ型 配列名[行サイズ][列サイズ];

例えば int a[5][5]; と宣言した場合、

配列の要素数 = 行サイズ × 列サイズ = 5 × 5 = 25個 となります。

サンプルプログラム

以下は、実行時にキーボードから値を入力し、2つの2次元配列A・Bの対応する要素同士の和と積を計算して表示するC言語のプログラムです。

#include<stdio.h>
void main(){
    //配列の宣言(実行時に入力)//
    int A[2][3],B[2][3],i,j,sum[i][j],product[i][j];
    //forループを使って配列AとBに要素を読み込む//
    printf("Enter elements into the array A: \n");
    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("A[%d][%d] :",i,j);
            scanf("%d",&A[i][j]);
        }
        printf("\n");
    }
    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("B[%d][%d] :",i,j);
            scanf("%d",&B[i][j]);
        }
        printf("\n");
    }
    //和の計算と結果の出力//
    printf("Sum array is : \n");
    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            sum[i][j]=A[i][j]+B[i][j];
            printf("%d\t",sum[i][j]);
        }
        printf("\n");
    }
    //積の計算と結果の出力//
    printf("Product array is : \n");
    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            product[i][j]=A[i][j]*B[i][j];
            printf("%d\t",product[i][j]);
        }
        printf("\n");
    }
}

出力結果

上記のプログラムを実行すると、次のような結果が出力されます。

Enter elements into the array A:
A[0][0] :12
A[0][1] :23
A[0][2] :03

A[1][0] :25
A[1][1] :34
A[1][2] :01

B[0][0] :03
B[0][1] :46
B[0][2] :23

B[1][0] :01
B[1][1] :24
B[1][2] :32

Sum array is:
15      69      26
26      58      33
Product array is:
36      1058    69
25      816     32

補足:より安全な宣言方法

このサンプルでは、ループ変数 ij に値が代入される前に sum[i][j]product[i][j] を宣言しています。環境によっては意図しない動作になる可能性があるため、実際の開発では int sum[2][3], product[2][3]; のように固定サイズで宣言することをおすすめします。


  1. 配列の左回転をO(n)時間・O(1)空間で実現するC++プログラムの書き方

    本記事では、サイズnの整数配列と複数の回転位置kが与えられたとき、指定されたインデックスkから配列を左方向へ回転させた結果を出力する方法を、時間計算量O(n)・空間計算量O(1)の制約のもとで解説します。 配列の左回転とは、各要素を左へk個分ずらし、はみ出した要素を右端に折り返して配置する操作です。例えば、配列 {1, 2, 3, 4, 5} を1回左に回転すると {2, 3, 4, 5, 1} になります。 この手法の鍵となるのは剰余演算(%)です。回転後の配列を新たに作成することなく、インデックス計算だけで結果を直接出力できるため、追加のメモリ領域を一切必要としません。 入力例と出力例

  2. C言語で配列を左にn回転させるプログラムの書き方

    C言語で配列を左方向にn回転させるプログラムの書き方を解説します。配列の要素を指定した回数だけ左へシフトし、はみ出した先頭の要素を末尾に移動させる「左回転(左ローテート)」の基本的なロジックを、サンプルコードと実行例付きでわかりやすく紹介します。入力と出力の例入力: arr[] = 1 2 3 4 5 6 7 8 9 10N = 3出力: 4 5 6 7 8 9 10 1 2 3アルゴリズムの流れまず、配列 arr に要素を格納します。回転させる回数を変数 N に設定します。「1回分の左回転」をN回繰り返します。1回分の左回転とは、配列の全要素を1つずつ左にずらし、先頭にあった要素を末尾へコピ