C - ワイルループ:繰り返しプログラミングの扉
こんにちは、未来のプログラミングスーパースター!ループの素晴らしい世界に飛び込みましょう。今日は、プログラミングの最も基本的な概念の一つ、C言語のワイルループを探求します。信じてください、これをマスターすると、プログラミングのスーパーパワーを手に入れた気分になります!
ワイルループとは?
本題に入る前に、ワイルループとは何かを理解しましょう。 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言語でのワイルループの動作
プロセスを分解してみましょう:
- プログラムがワイルループに遭遇します。
- 括弧内の条件をチェックします。
- 条件が真なら、ループ内のコードを実行します。
- コードを実行した後、ステップ2に戻ります。
- 条件が偽なら、ループをスキップし、プログラムの残りの部分に進みます。
ワイルループの例
最初の例です!シンプルなカウントダウンプログラムを作成しましょう:
#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...
爆破!
これを分解すると:
-
countdown = 5
で始めます。 - ワイルループが
countdown > 0
をチェック(これは真)。 - 現在のカウントダウン値を印刷します。
-
countdown
を1減らします。 - ステップ2-4を繰り返します until
countdown
が0になる。 -
countdown
が0になると、条件が偽になり、ループから抜け出します。 - 最後に「爆破!」を印刷します。
条件ループとしてのワイルループの使用
ワイルループは、繰り返す回数が正確に分からない場合に最適です。ユーザーに数字を当てさせる例を見てみましょう:
#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
時々、ループを早く終了させたい場合や、次のイテレーションに進む前に現在のイテレーションをスキップしたい場合があります。それには break
と continue
が便利です。
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