for文の中にfor文を入れるなどして、ループの入れ子状態を作ることができます。
ループの入れ子とは、ループ処理の中に別のループ処理が存在する状態です。
ループの入れ子の基本的なプログラムと利用例をみていきます。
ループの入れ子基本的なプログラム
for_ireko.c
/* ループの中のループ */
#include <stdio.h>
int main(void)
{
int i, j;
for(i=0; i<2; i++){
for(j=0; j<3; j++){
printf("i: %d\tj: %d\n", i, j);
}
}
printf("最終的な値\ni: %d\tj: %d\n", i, j);
return 0;
}
実行結果
i: 0 j: 0
i: 0 j: 1
i: 0 j: 2
i: 1 j: 0
i: 1 j: 1
i: 1 j: 2
最終的な値
i: 2 j: 3
解説
このプログラムは、カウンタ変数 i を使った外側のループとカウンタ変数 j を使った内側のループで成り立っています。
イメージ図
外側の i のループは、2回繰り返す条件になっています。(for文の i=0; i<2; i++ の部分)
外側ループの処理である j の内側ループは2度繰り返されることになります。実行結果をみて下さい。j: 0, j: 1, j:2 の表示が2度連続していることが分かります。
i: 0 j: 0 i: 0 j: 1 i: 0 j: 2 i: 1 j: 0 i: 1 j: 1 i: 1 j: 2 最終的な値 i: 2 j: 3
内側ループの処理であるprintf関数
printf(“i: %d\tj: %d\n”, i, j);
の部分は 外側ループ繰り返し回数 × 内側ループ繰り返し回数 の数だけ、すなわち 2 × 3 = 6回 実行されることになります。
次はループの入れ子を使った利用例を見ていきます。
ループの入れ子で九九を表示する
先ほどの基本例では i が0の時、j は 0~2と繰り返され、i が1の時も j は0~2と繰り返しました。
このような法則を持つ身近なものに九九があります。
九九は1の段から9の段までそれぞれに1~9を掛けて表現するものです。
プログラムで表してみます。
kuku.c
/* 入れ子で九九を表現する */
#include <stdio.h>
int main(void)
{
int i, j;
for(i=1; i<=9; i++){
for(j=1; j<=9; j++){
printf("%3d", i*j);
}
printf("\n"); /* 段ごとの改行 */
}
return 0;
}
実行結果
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
1~9の段までそれぞれに1~9を掛けるため、外側ループと内側ループの条件は基本的に同じです。
for(i=1; i<=9; i++){
for(j=1; j<=9; j++){
/* 処理 */
}
}
九九の表示はカウンタ変数同士を掛けているだけです。(printfの書式で %3d としているのは表示の際に隙間を空けるため)
printf(“%3d”, i * j );
段ごとに改行をする必要があるので、内側のfor文が終了したらprintf関数で改行を実行するようにしています。
for(i=1; i<=9; i++){
for(j=1; j<=9; j++){
printf("%3d", i*j);
}
printf("\n"); /* 段ごとの改行 */
}
一応これで九九の表示ができましたが、もう少し見た目を分かりやすくしてみました。
kuku_hyo.c
/* 九九一覧表 */
#include <stdio.h>
int main(void)
{
int i, j;
for(i=1; i<=9; i++){
printf("%dの段\t", i); /* 段数表示 */
for(j=1; j<=9; j++){
printf("%3d", i*j); /* 九九の表示 */
}
printf("\n"); /* 段ごとの改行 */
}
return 0;
}
実行結果
1の段 1 2 3 4 5 6 7 8 9 2の段 2 4 6 8 10 12 14 16 18 3の段 3 6 9 12 15 18 21 24 27 4の段 4 8 12 16 20 24 28 32 36 5の段 5 10 15 20 25 30 35 40 45 6の段 6 12 18 24 30 36 42 48 54 7の段 7 14 21 28 35 42 49 56 63 8の段 8 16 24 32 40 48 56 64 72 9の段 9 18 27 36 45 54 63 72 81
小学校で習った九九の表らしくなりました。
以上、ループの入れ子の基本的なプログラムと利用例でした。
コメント