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
補足:より安全な宣言方法
このサンプルでは、ループ変数 i、j に値が代入される前に sum[i][j]、product[i][j] を宣言しています。環境によっては意図しない動作になる可能性があるため、実際の開発では int sum[2][3], product[2][3]; のように固定サイズで宣言することをおすすめします。
-
配列の左回転をO(n)時間・O(1)空間で実現するC++プログラムの書き方
本記事では、サイズnの整数配列と複数の回転位置kが与えられたとき、指定されたインデックスkから配列を左方向へ回転させた結果を出力する方法を、時間計算量O(n)・空間計算量O(1)の制約のもとで解説します。 配列の左回転とは、各要素を左へk個分ずらし、はみ出した要素を右端に折り返して配置する操作です。例えば、配列 {1, 2, 3, 4, 5} を1回左に回転すると {2, 3, 4, 5, 1} になります。 この手法の鍵となるのは剰余演算(%)です。回転後の配列を新たに作成することなく、インデックス計算だけで結果を直接出力できるため、追加のメモリ領域を一切必要としません。 入力例と出力例
-
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つずつ左にずらし、先頭にあった要素を末尾へコピ