ch02 6章中 2章目

ch02 — while 文

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch02 — while 文」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch02 — while 文」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch02 — while 文」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

for 文が「N 回繰り返す」のに向いているのに対し、while は「条件が真の間だけ繰り返す」のに向いている。回数が事前に分からない処理 — たとえば「ユーザーが quit と入力するまで」「ファイルの末尾に到達するまで」「合計が 100 を超えるまで」のような、終了条件が状態で決まる ループは while の方が自然に書ける。

文法は while (条件) { ... } とシンプルで、for から「初期化」と「更新」の枠を外し、条件チェックだけを残した形だと考えると分かりやすい。代わりに、カウンタやフラグの更新は 自分でループ本体の中に書く 必要がある。$i = 0 のような初期化はループの前で、$i++ のような更新は本体の中で、と役割を意識的に分けて書くのがコツだ。

while で最大の落とし穴が 無限ループ だ。while (true) と書いたまま break を入れ忘れたり、条件に使っている変数を本体で更新し忘れると、プログラムは永遠に止まらない。for の場合は更新式が文法に組み込まれているので忘れにくいが、while は自由度が高い分、書き手が「いつ条件が変わるか」を意識する責任を負う。書き終わったら必ず「この条件は、本当にいつか偽になるか」を 1 回自問する習慣をつけよう。

学習目標

  • while (条件) { ... } の形を書ける
  • 条件が真の間だけ繰り返されることを理解する
  • カウンタを自分で更新しないと無限ループになると分かる

ドリル

no 内容
01 入力 N から 1 まで降順で出力
02 0 が入力されるまで数を読み続け、合計を出力

解説スライド 全 7 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

  1. while 文

    Lesson 3 / Chapter 2

  2. for だと書きづらい場面がある

    • 「N 回繰り返す」 → for が向いている
    • 「いつ終わるか分からない」 → for だと書きづらい
    • 例: 「ユーザーが 0 を入力するまで読み続ける」

    → こういう時は while を使う

  3. while 文の形

    <?php
    $i = 1;
    while ($i <= 5) {
        echo $i . "\n";
        $i++;
    }

    実行結果:

    1
    2
    3
    4
    5
    • while (条件) { 処理 }
    • 条件が真の間、{ } の中を繰り返す
  4. for との違い

    for while
    for (初期化; 条件; 更新) while (条件)
    カウンタ for の括弧内に書く 自分で外に書く + 更新
    向いてる場面 回数が決まっている 終わりが条件次第
    // for
    for ($i = 1; $i <= 5; $i++) { echo $i; }
    
    // 同じ意味の while
    $i = 1;
    while ($i <= 5) { echo $i; $i++; }
  5. 更新を忘れると無限ループ

    <?php
    $i = 1;
    while ($i <= 5) {
        echo $i . "\n";
        // $i++; を書き忘れた!
    }
    • $i がずっと 1 のまま
    • 条件 $i <= 5 が永遠に真
    • 無限ループ (Ctrl+C で止めるしかない)

    while を書いたら 必ず終わる条件があるか を確認する。

  6. 条件で終わりを決める例

    <?php
    $n = 100;
    while ($n > 1) {
        $n = (int)($n / 2);
        echo $n . "\n";
    }

    実行結果:

    50
    25
    12
    6
    3
    1
    • $n が 1 以下になったら終わる
    • 回数は事前に分からないが 条件で自然に止まる
  7. このチャプターでできるようになること

    while (条件) { ... } を書ける ✅ 条件が真の間だけ繰り返されると理解している ✅ カウンタを自分で更新する必要があると分かる ✅ 終わる条件が無いと無限ループになると分かる

    → ドリルへ

1 / 7
📜 スライドを全部一気に読む(縦表示)

Lesson 3 / Chapter 2


for だと書きづらい場面がある

  • 「N 回繰り返す」 → for が向いている
  • 「いつ終わるか分からない」 → for だと書きづらい
  • 例: 「ユーザーが 0 を入力するまで読み続ける」

→ こういう時は while を使う


while 文の形

<?php
$i = 1;
while ($i <= 5) {
    echo $i . "\n";
    $i++;
}

実行結果:

1
2
3
4
5
  • while (条件) { 処理 }
  • 条件が真の間、{ } の中を繰り返す

for との違い

for while
for (初期化; 条件; 更新) while (条件)
カウンタ for の括弧内に書く 自分で外に書く + 更新
向いてる場面 回数が決まっている 終わりが条件次第
// for
for ($i = 1; $i <= 5; $i++) { echo $i; }

// 同じ意味の while
$i = 1;
while ($i <= 5) { echo $i; $i++; }

更新を忘れると無限ループ

<?php
$i = 1;
while ($i <= 5) {
    echo $i . "\n";
    // $i++; を書き忘れた!
}
  • $i がずっと 1 のまま
  • 条件 $i <= 5 が永遠に真
  • 無限ループ (Ctrl+C で止めるしかない)

while を書いたら 必ず終わる条件があるか を確認する。


条件で終わりを決める例

<?php
$n = 100;
while ($n > 1) {
    $n = (int)($n / 2);
    echo $n . "\n";
}

実行結果:

50
25
12
6
3
1
  • $n が 1 以下になったら終わる
  • 回数は事前に分からないが 条件で自然に止まる

このチャプターでできるようになること

while (条件) { ... } を書ける ✅ 条件が真の間だけ繰り返されると理解している ✅ カウンタを自分で更新する必要があると分かる ✅ 終わる条件が無いと無限ループになると分かる

→ ドリルへ

この章で取り組む 演習問題の流れ (2ステップ)
  1. 01 ドリル 01 — 降順カウント README.md starter.php answer.php
  2. 02 ドリル 02 — 0 まで足し続ける README.md starter.php answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 01 — 降順カウント

問題

標準入力で整数 N を 1 行受け取り、N から 1 まで降順で 1 行ずつ出力してください。

入力例:

5

期待される出力:

5
4
3
2
1

ヒント

  • $n = (int) trim(fgets(STDIN)); で N を読む
  • while ($n >= 1) で N が 1 以上の間ループ
  • ループの中で $n--; (1 減らす) を忘れずに

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

ドリル 02 — 0 まで足し続ける

問題

標準入力から 整数を 1 行ずつ何度も 読み、0 が入力されたら終了して、それまでに読んだ整数の合計を出力してください (※ 0 自身は合計に含めない・含めても結果は同じです)。

入力例:

3
5
2
8
0

期待される出力:

18

ヒント

  • $sum = 0; で合計用の変数を用意
  • $n = (int) trim(fgets(STDIN));ループの前にも中にも 入れる
  • while ($n !== 0) { $sum += $n; $n = (int) trim(fgets(STDIN)); }
  • 最後に echo $sum . "\n";

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(2問)

  1. ドリル 01 — 降順カウント

    README.md starter.php answer.php

  2. ドリル 02 — 0 まで足し続ける

    README.md starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます