C - ワイルループ:繰り返しプログラミングの扉

こんにちは、未来のプログラミングスーパースター!ループの素晴らしい世界に飛び込みましょう。今日は、プログラミングの最も基本的な概念の一つ、C言語のワイルループを探求します。信じてください、これをマスターすると、プログラミングのスーパーパワーを手に入れた気分になります!

C - While loop

ワイルループとは?

本題に入る前に、ワイルループとは何かを理解しましょう。 imagine you're playing a video game where you need to defeat 10 enemies to complete a level. Instead of writing the same "attack" code 10 times, wouldn't it be nice if you could just say, "Keep attacking while there are enemies left"? That's exactly what a while loop does in programming!

ワイルループは、特定の条件が真である間、コードのブロックを繰り返すことを許可します。まるでコンピュータに「これをやめると言うまで続けて」と言っているようなものです!

C言語のワイルループの構文

まず、C言語のワイルループの基本構造を見てみましょう:

while (condition) {
// 繰り返すコード
}

これだけです!conditionは、ループの各イテレーション前にチェックされます。それが真なら、角括弧 {} 内のコードが実行されます。このプロセスは、条件が偽になるまで繰り返されます。

C言語のワイルループのフローチャート

ワイルループの動作を視覚的に理解するために、フローチャートを見てみましょう:

┌─────────────┐
│   開始     │
└──────┬──────┘
│
▼
┌─────────────────┐
│   条件をチェック │
└────────┬────────┘
│
▼
┌───────────┐    いいえ
┌───┤ 条件は真? ├────────┐
│   │           │        │
│   └───────────┘        │
│         │ はい          │
│         ▼              │
│  ┌──────────────┐      │
│  │   コード実行  │      │
│  └──────┬───────┘      │
│         │              │
└─────────┘              │
▼
┌──────────┐
│   終了    │
└──────────┘

このフローチャートは、まず条件をチェックし、それが真ならコードを実行し、再度条件をチェックするサイクルが続くことを示しています。

C言語でのワイルループの動作

プロセスを分解してみましょう:

  1. プログラムがワイルループに遭遇します。
  2. 括弧内の条件をチェックします。
  3. 条件が真なら、ループ内のコードを実行します。
  4. コードを実行した後、ステップ2に戻ります。
  5. 条件が偽なら、ループをスキップし、プログラムの残りの部分に進みます。

ワイルループの例

最初の例です!シンプルなカウントダウンプログラムを作成しましょう:

#include <stdio.h>

int main() {
int countdown = 5;

while (countdown > 0) {
printf("%d...\n", countdown);
countdown--;
}

printf("爆破!\n");
return 0;
}

出力:

5...
4...
3...
2...
1...
爆破!

これを分解すると:

  1. countdown = 5 で始めます。
  2. ワイルループが countdown > 0 をチェック(これは真)。
  3. 現在のカウントダウン値を印刷します。
  4. countdown を1減らします。
  5. ステップ2-4を繰り返します until countdown が0になる。
  6. countdown が0になると、条件が偽になり、ループから抜け出します。
  7. 最後に「爆破!」を印刷します。

条件ループとしてのワイルループの使用

ワイルループは、繰り返す回数が正確に分からない場合に最適です。ユーザーに数字を当てさせる例を見てみましょう:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
srand(time(0));  // 乱数生成のシードを設定
int secret = rand() % 100 + 1;  // 1から100の範囲の乱数
int guess = 0;
int attempts = 0;

printf("私が1から100の範囲の数字を考えたとします。当てられますか?\n");

while (guess != secret) {
printf("あなたの予測: ");
scanf("%d", &guess);
attempts++;

if (guess < secret) {
printf("低すぎます!もう一度試して。\n");
} else if (guess > secret) {
printf("高すぎます!もう一度試して。\n");
}
}

printf("おめでとうございます!%d回で数字を当てました。\n", attempts);
return 0;
}

この例では、ユーザーが何回試すかは分からないため、ワイルループが適しています。ループはユーザーの予測が正しい数字に一致するまで続きます。

ワイルループにおける break と continue

時々、ループを早く終了させたい場合や、次のイテレーションに進む前に現在のイテレーションをスキップしたい場合があります。それには breakcontinue が便利です。

break

break 文は即座にループを終了させます。以下に例を示します:

#include <stdio.h>

int main() {
int i = 1;
while (1) {  // 無限ループを作成
printf("%d ", i);
if (i == 5) {
break;  // iが5に達するとループを終了
}
i++;
}
printf("\nループ終了!\n");
return 0;
}

出力:

1 2 3 4 5
ループ終了!

continue

continue 文は、現在のイテレーションの残りのコードをスキップし、次のイテレーションに進みます。以下に例を示します:

#include <stdio.h>

int main() {
int i = 0;
while (i < 10) {
i++;
if (i % 2 == 0) {
continue;  // 偶数をスキップ
}
printf("%d ", i);
}
printf("\nループ終了!\n");
return 0;
}

出力:

1 3 5 7 9
ループ終了!

もっと多くのC言語のワイルループの例

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

例1: 数の和

#include <stdio.h>

int main() {
int num, sum = 0;

printf("合計する数を入力してください(0を入力すると終了):\n");

while (1) {
scanf("%d", &num);
if (num == 0) {
break;
}
sum += num;
}

printf("合計は: %d\n", sum);
return 0;
}

このプログラムは、ユーザーが0を入力するまで数を加えます。

例2: フィボナッチ数列

#include <stdio.h>

int main() {
int n, first = 0, second = 1, next;

printf("生成するフィボナッチ項の数を入力してください: ");
scanf("%d", &n);

printf("フィボナッチ数列:\n");

int i = 0;
while (i < n) {
if (i <= 1) {
next = i;
} else {
next = first + second;
first = second;
second = next;
}
printf("%d ", next);
i++;
}

printf("\n");
return 0;
}

このプログラムは、n項のフィボナッチ数列を生成します。

ワイルループと do while ループの比較

最後に、ワイルループとその兄弟、do-whileループを簡単に比較しましょう:

特性 ワイルループ do-whileループ
条件チェック 開始時 終了時
最小実行回数 0(条件が最初から偽の場合) 1(少なくとも1回は実行)
構文 while (condition) { ... } do { ... } while (condition);
最適な使用例 実行回数が分からない場合 少なくとも1回は実行する必要がある場合

主な違いは、do-whileループは少なくとも1回はコードブロックを実行する前に条件をチェックします。

そして、あなたのプログラミングの弟子!ワイルループの力を手に入れたことをお祝いします。練習を続けることで、プロのようにループを使えるようになります。ハッピーコーディング!??

Credits: Image by storyset