制御構造とは(全体像)
制御構造は、「どの順番で・どんな条件で処理を進めるか」を決める書き方のこと。擬似言語(科目B)では、これを読み解いて「最後にどうなるか」を追う問題がよく出る。
大きく2つ。
- 条件分岐(if) … 条件によって、進む道を変える(「もし〜なら」)。
- 繰り返し(ループ) … 同じ処理を、条件が続くあいだ何度も行う。
繰り返しにはwhile・do-while・forがあり、なかでも「条件をいつ判定するか」の違いが大事。これが「0回実行されることがあるか」を分ける。
詳しく:前判定と後判定だけ覚えれば戦える
ここが記事の心臓部。まずは条件分岐(if)。
条件分岐 if
| 部分 | 役割 |
|---|---|
| if(条件) | 条件が成り立てば、その中の処理を行う |
| elseif(別条件) | 上が不成立で、別の条件が成り立てば行う |
| else | どれも不成立のとき行う |
次に、よく問われる繰り返し3種。とくに判定のタイミングがポイントだ。
繰り返し3種
| 種類 | 判定のタイミング | 最低実行回数 |
|---|---|---|
| while | 最初に判定(前判定) | 0回(条件が最初から偽なら実行されない) |
| do-while | 最後に判定(後判定) | 1回(必ず1回は実行される) |
| for | 回数を指定 | 指定回数 |
いちばん大事なのが、whileとdo-whileの違い。whileは処理の前に条件を見るので、条件が最初から偽なら1回も実行されない。do-whileは処理の後に条件を見るので、必ず最低1回は実行される。ここが頻出ポイントだ。
なお、whileの条件は「続ける条件(真の間くりかえす)」で、「終わる条件」ではない。途中でループを抜けるならbreak、その回だけ飛ばして次へ進むならcontinueを使う。
わかりやすく言い換えると
要するに、制御構造は「進む道と、繰り返すかどうかの分かれ道」だ。
①if … 「もし雨なら傘を持つ」のような場合分け
②while(前判定) … 「お腹がすいていたら食べる」。最初から空いていなければ、一度も食べない(0回ありうる)
③do-while(後判定) … 「まず一口食べて、まだ食べたければ続ける」。とにかく最初の一口は必ず食べる(1回は実行)
つまり、判定が処理の前か後かで「0回実行されるか」「必ず1回実行されるか」が変わる、というわけだね。
試験のツボ
🔴 一番出る:whileとdo-whileの違い
①while=前判定。条件が最初から偽なら0回(実行されない)
②do-while=後判定。必ず最低1回は実行される
🔴 次に出る:条件の意味とループ制御
①whileの条件は「続ける条件」(真の間くりかえす)
②breakで抜ける、continueでその回だけ飛ばして次へ
🟡 押さえると安定:読解のコツ
①終了条件を確認(無限ループにならないか)
②変数の値を1行ずつ追う(トレース実行)
よくある間違い
①「whileは必ず最低1回は実行される」→ ✗ whileは前判定なので、条件が最初から偽なら0回も実行されない。必ず1回はdo-while。
②「whileの条件は『終わる条件』を書く」→ ✗ whileの条件は「続ける条件」(真の間くりかえす)。
③「continueはループ全体を途中で抜ける命令である」→ ✗ ループを抜けるのはbreak。continueはその回だけ飛ばして次の周回へ進む。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(whileとdo-while)
whileとdo-whileの違いに関する次の記述のうち、正しいものはどれか。
- whileは後判定で必ず1回実行し、do-whileは前判定で0回もありうる
- whileは前判定で0回もありうるが、do-whileは後判定で必ず1回実行する
- whileもdo-whileも前判定で、条件が偽なら必ず0回しか実行されない
- whileもdo-whileも後判定で、必ず最低1回は実行される点で共通している
解答は 2 だよ。
whileは前判定(条件を先に見るので0回もありうる)、do-whileは後判定(必ず最低1回実行)なんだ。「先に見るか後に見るか」で実行回数が変わるよ。
選択肢1はwhileとdo-whileが逆。選択肢3は「ともに前判定」が誤り。選択肢4は「ともに後判定」が誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | whileとdo-whileが逆 |
| 2 | ✓ | while=前判定・do-while=後判定 |
| 3 | ✗ | do-whileは後判定 |
| 4 | ✗ | whileは前判定 |
オリジナル問題2(条件の意味)
擬似言語のwhileの条件に関する次の記述のうち、正しいものはどれか。
- whileの条件は「終わる条件」で、条件が真になるとループを止めるものである
- whileの条件は実行回数そのものを表し、条件式に書いた数だけくりかえす
- whileの条件は意味を持たず、書いても書かなくてもループは同じ回数動く
- whileの条件は「続ける条件」で、条件が真であるあいだくりかえし実行する
解答は 4 だよ。
whileの条件は「続ける条件」で、条件が真であるあいだくりかえすんだ。「終わる条件」ではないので、読み解くときはそこを取り違えないでね。
選択肢1は「終わる条件」が誤り。選択肢2は「回数そのもの」が誤り。選択肢3は「意味を持たない」が誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 続ける条件であって終わる条件ではない |
| 2 | ✗ | 回数そのものではない |
| 3 | ✗ | 条件で動きが変わる |
| 4 | ✓ | 真の間くりかえす「続ける条件」 |
オリジナル問題3(ループ制御)
ループ制御のbreakとcontinueに関する次の記述のうち、正しいものはどれか。
- breakもcontinueもループを完全に抜ける命令で、両者に違いはないとされる
- breakはその回だけ飛ばし、continueはループ全体を抜ける命令のことである
- breakはループを抜け、continueはその回だけを飛ばして次の周回へと進む
- breakもcontinueもループの実行回数を増やす命令で、無限ループを作る
解答は 3 だよ。
breakはループを抜ける、continueはその回だけ飛ばして次の周回へ進むんだ。「抜けるbreak、飛ばすcontinue」とセットで覚えてね。
選択肢1は「違いがない」が誤り。選択肢2はbreakとcontinueが逆。選択肢4は「回数を増やす・無限ループ」が誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | breakとcontinueは別もの |
| 2 | ✗ | breakとcontinueが逆 |
| 3 | ✓ | breakは抜ける・continueは次へ |
| 4 | ✗ | 回数を増やす命令ではない |
まとめ
押さえどころ
- 🔴 whileとdo-while = whileは前判定(0回もありうる)、do-whileは後判定(必ず1回実行)。
- 🔴 条件とループ制御 = whileの条件は「続ける条件」。breakは抜ける、continueは次の周回へ。
- 🟡 読解のコツ = 終了条件を確認(無限ループ防止)、変数を1行ずつ追う(トレース実行)。
次に学ぶ
- IPA擬似言語構文 ── 制御構造を書くための基本記法(`←`代入・1始まり配列)。記法と制御構造はセットで読めるようになる。
- 再帰(末尾再帰・メモ化) ── 繰り返しと並ぶもう一つの流れの作り方。ループと再帰を対にして押さえたい。
執筆: SikakuQuest編集部