ループ制御構造の概要
ループ構造とは何か
ループ構造は特定の条件が満たされている間、指定されたコードブロックを繰り返し実行するための制御文です。プログラムに自動的な反復処理機能を持たせる場合に不可欠な要素です。
while ループの仕組み
基本的な構文構造:
while (条件判定) {
// 実行される処理内容
}
- 各サイクル開始時に条件評価を行う
- 条件が真である場合、処理ブロックを実行
- 条件が偽になった時点でループから脱出
実装例:
int counter = 1;
while (counter <= 5) {
printf("カウンタ値: %d\n", counter);
counter++;
}
do...while ループの特徴
構文形式:
do {
// 処理内容
} while (条件判定);
- 最初に一度だけ処理を実行してから条件確認
- whileとの主な違い:最低でも一回は必ず実行される
使用例:
int counter = 1;
do {
printf("カウンタ値: %d\n", counter);
counter++;
} while (counter <= 5);
for ループの構造
基本構成:
for (初期化処理; 継続条件; 更新処理) {
// 処理内容
}
- 最もコンパクトで一般的に使われる形式
- カウントベースのループ処理に適している
実践例:
for (int index = 1; index <= 5; index++) {
printf("インデックス: %d\n", index);
}
無限ループの表現:
int value = 0;
for(;;)
{
printf("値: %d\n", value);
}
break と continue の制御
break命令: ループ全体から即座に脱出
for (int num = 1; num <= 10; num++) {
if (num == 5) break;
printf("%d ", num); // 結果: 1 2 3 4
}
continue命令: 現在のサイクルをスキップして次の反復へ
for (int num = 1; num <= 5; num++) {
if (num == 3) continue;
printf("%d ", num); // 結果: 1 2 4 5(3を除外)
}
各種ループの比較表
| 種類 | 条件評価 | 最小実行回数 | 主な特徴 |
|---|---|---|---|
| while | 事前判定 | 0回 | 柔軟な条件制御が可能 |
| do...while | 事後判定 | 1回 | 必ず一度は実行される |
| for | 事前判定 | 0回 | カウント処理や明確な回数指定に向いている |
よくあるミスと注意点
| 問題の種類 | 具体例 | 問題の内容 |
|---|---|---|
| 無限ループ | while(1) や条件が変化しない場合 |
手動停止が必要になるか、break文を追加する必要がある |
| 変数更新忘れ | value = 0; while(value < 5) |
value++がないと無限ループになる |
| セミコロンの誤用 | while (value < 5); |
空のループボディとなり論理エラーを引き起こす |
| 条件設定ミス | for (index = 0; index > 10; index++) |
条件が常に偽となるためループが実行されない |
応用例:1からnまでの合計計算
#include
int main(void) {
int target, total = 0;
printf("正の整数を入力してください:");
scanf("%d", &target);
for (int current = 1; current <= target; current++) {
total += current;
}
printf("1 から %d までの合計は %d です\n", target, total);
return 0;
}
使用シーン別の推奨構造
| 利用状況 | 推奨されるループ構造 |
|---|---|
| 実行回数が既知の場合 | forループ |
| 条件による柔軟な制御が必要 | whileループ |
| 最低一回の実行が必要 | do...whileループ |
| 途中でのループ終了が必要 | break文を使用 |
| 特定回の処理をスキップ | continue文を使用 |