C言語におけるネストされたループ:初心者向けの包括的なガイド

こんにちは、未来のプログラミング魔術師们!今日は、C言語におけるネストされたループの魔法の世界に飛び込みます。プログラミングが初めての方でもご安心ください。私はこのエキサイティングな旅におけるあなたの親切なガイドです。このチュートリアルの終わりまでに、プロのようにループをネストするスキルを身につけるでしょう!

C - Nested loop

ネストされたループとは?

深淵に飛び込む前に、基本から始めましょう。想像してみてください、あなたが靴下の引き出しを整理している場面です。靴下には色々ありますし、それぞれの色には複数のペアがあります。整理するために、まずはそれぞれの色(外側のループ)を順番に見て、その色の靴下を数えてペアにする(内側のループ)かもしれません。これがプログラミングにおけるネストされたループの基本的な概念です!

ネストされたループとは、ループの中に別のループを入れたものです。内側のループは、外側のループの各反復のために完全に実行されます。ロシアのメルカトル人形のように、一つを開けると中に別の人形が現れる感じです!

ネストされたForループ

まずは最も一般的なネストされたループ、ネストされたforループから始めましょう。以下に簡単な例を示します:

#include <stdio.h>

int main() {
int i, j;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
printf("(%d, %d) ", i, j);
}
printf("\n");
}
return 0;
}

このコードの出力は以下の通りです:

(1, 1) (1, 2) (1, 3)
(2, 1) (2, 2) (2, 3)
(3, 1) (3, 2) (3, 3)

以下のように分解してみましょう:

  1. 外側のループ(i)は3回実行されます。
  2. 外側のループの各反復ごとに、内側のループ(j)は3回実行されます。
  3. 内側のループの各反復でijの値を出力します。
  4. 内側のループが終了した後、改行文字(\n)を出力します。

ダンスのようです:外側のループがリードし、内側のループがフォローし、外側のループが1ステップ進むたびに内側のループが3回twirlします!

より実用的な例

では、ネストされたループを使って掛け算表を作成してみましょう:

#include <stdio.h>

int main() {
int i, j;
printf("   ");
for (i = 1; i <= 10; i++) {
printf("%4d", i);
}
printf("\n   -------------------------------------\n");
for (i = 1; i <= 10; i++) {
printf("%2d |", i);
for (j = 1; j <= 10; j++) {
printf("%4d", i * j);
}
printf("\n");
}
return 0;
}

このコードは美しい10x10の掛け算表を作成します。外側のループは行を表し、内側のループは列を表します。行番号と列番号を掛け合わせて各セルの値を求めます。

Forループの中にWhileループをネスト

混合も可能です!forループの中にwhileループをネストしてみましょう:

#include <stdio.h>

int main() {
int i, j;
for (i = 1; i <= 5; i++) {
j = 1;
while (j <= i) {
printf("* ");
j++;
}
printf("\n");
}
return 0;
}

このコードは右三角形のアスタリスクを表示します:

*
* *
* * *
* * * *
* * * * *

ここでは、forループが行数を制御し、whileループが各行の星を表示します。ピラミッドを建てるようなものです。上に進むにつれてブロックを増やします!

C言語におけるネストされたループの例

理解を深めるために、さらにいくつかの例を見てみましょう:

1. 数字パターン

#include <stdio.h>

int main() {
int i, j, rows = 5;
for (i = 1; i <= rows; i++) {
for (j = 1; j <= i; j++) {
printf("%d ", j);
}
printf("\n");
}
return 0;
}

このコードは以下の数字パターンを作成します:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

2. アルファベットパターン

#include <stdio.h>

int main() {
int i, j;
char current = 'A';
for (i = 1; i <= 5; i++) {
for (j = 1; j <= i; j++) {
printf("%c ", current++);
}
printf("\n");
}
return 0;
}

このコードは以下のアルファベットパターンを表示します:

A
B C
D E F
G H I J
K L M N O

3. 素数チェッカー

#include <stdio.h>

int main() {
int i, j, flag;
printf("1から50の素数は以下の通りです:\n");
for (i = 2; i <= 50; i++) {
flag = 0;
for (j = 2; j <= i/2; j++) {
if (i % j == 0) {
flag = 1;
break;
}
}
if (flag == 0)
printf("%d ", i);
}
return 0;
}

このプログラムは1から50までの素数を見つけます。外側のループは数を反復し、内側のループは各数が素数かどうかをチェックします。

結論

ネストされたループはプログラマーのツールキットにおける強力なツールです。多维データを扱ったり、複雑なパターンを作成したりすることができます。練習は完璧を生む!これらの例を修正してみるか、自分でネストされたループのプログラムを作成してみてください。

以下に、このチュートリアルで扱ったネストされたループの種類の簡単な参照表を示します:

外側のループ 内側のループ 使用例
For For 2Dパターンやテーブルの作成
For While 可変長の行操作
While For 可変回数の固定操作
While While 二重条件ベースの操作

ハッピーコーディング、そしてあなたのループは常に完璧にネストされたままでありますように!

Credits: Image by storyset