標準 情報・IT• 学習時間の目安:約14分

条件分岐と繰り返し:順序と境界でバグが生まれる

🔑 一言でいうと

条件分岐(if)は「条件が成り立つときだけ実行する」しくみ、繰り返し(for・while)は「同じ処理を何度も実行する」しくみです。回数が決まっているなら for、条件が続くあいだ回すなら while。バグはたいてい判定の順序と境界(以上か、より大きいか)、そして終わらないループで起こります。

このページで学べること

  • if・else if・else の使い分けがわかる
  • for と while の違いがわかる
  • 判定の順序で結果が変わる理由がわかる
  • 無限ループの原因を説明できる

前提知識

if と for の基本の形

💡 2つの道具
  • if(条件分岐):もし〜なら A、そうでなければ B。段階が増えるときは else if を重ねる
  • for(回数の繰り返し):5回・10回など回数が決まっているときに使う
  • while(条件の繰り返し):残りが0になるまでなど終わりが条件で決まるときに使う

成績を「80点以上ならA、60点以上ならB、それ以外はC」と分ける場合、判定は厳しい条件から順に書きます。もし「60点以上ならB」を先に書くと、85点も先に条件を満たしてしまい、Aになるはずの人がBになるという重大なバグになります。

境界も要注意です。「60点以上」なら60点は含む(≧)。「60点より上」なら60点は含みません(>)。1点の差でも合否が変わるため、日本語をそのまま記号に置きかえないことが大切です。

このページの ≧・>・=・+ は読みやすさのための表記です。実際のプログラムでは半角で、以上は >=、より大きいは >、代入は =、等しいかどうかは == と書きます。

繰り返しでは、終わる条件を必ず用意します。while で数を増やす処理を書き忘れると、条件がいつまでも成り立ち無限ループになります。

if(厳しい条件)→ else if(次の条件)→ else(残り全部)
🤔 なぜ判定は「厳しい条件」から書くのか

「80点以上ならA、60点以上ならB」を、順番を逆にして書いたとします。85点の人を判定すると、最初の「60点以上か?」ですでに条件を満たしてしまうので、そこでBに決まって終わりです。

if の並びは上から順に調べ、最初に当てはまった枝で止まります。だから範囲の広い条件を先に書くと、あとの狭い条件にはいつまでもたどり着けません。エラーは出ず、静かにまちがった結果が出るのがやっかいなところです。狭い(厳しい)条件から順に書くと決めておけば、この事故は防げます。

図でイメージする(多段の判定)

点数を受け取る
80点以上?
はい A
いいえ
60点以上?
はい B
いいえ C
上から順に判定します。80点以上ならA。そうでなければ60点以上かを調べ、成り立てばB、成り立たなければC。先に判定した条件が優先されます。

例題(くわしい手順)

例題1:繰り返しで1から10までの合計を求める

1から10までの整数の合計を、繰り返しで求める流れを追います。

🧭 手順
  1. 準備:合計を入れる変数 total = 0、数を数える i = 1。
  2. くり返す:i が10以下のあいだ「total = total + i」と「i = i + 1」を実行する。
  3. 終わる:i が11になった時点で条件(10以下)が成り立たず終了。total は 55。
  4. 確かめる:1 から 10 までの合計は (1 + 10) × 10 ÷ 2 = 55。たどった結果と一致します。

もし手順2で「i = i + 1」を書き忘れると、i はずっと1のままで条件が成り立ち続け、無限ループになります。ループでは「終わりに近づく処理」が入っているかを必ず確認します。

例題2:境界の書き方で結果が変わる

「60点以上なら合格」と「60点より上なら合格」で、ちょうど60点の人の結果はどうちがいますか。

🧭 手順
  1. 記号に直す:「以上」は ≧(その値をふくむ)、「より上」は >(その値をふくまない)。
  2. 60点で判定する:60 ≧ 60 は成り立つので合格。60 > 60 は成り立たないので不合格。
  3. ちがいが出る場所を確かめる:差が出るのはちょうど境界の値のときだけです。59点や61点なら、どちらの書き方でも同じ結果になります。
  4. だから試し方も決まる:境界のバグを見つけるには、境界そのものの値(この場合60)で試すのがいちばん確実です。

「以上・以下・より大きい・未満」を記号に置きかえるとき、日本語をそのまま流し込まないこと。1点の差で合否が変わるので、境界の値で必ず試します。

for と while の違い

for と while の違い
くらべることforwhile
向いている場面回数が決まっている終わりが条件で決まる
例5人分の点数を順に処理する残りが0になるまで引き続ける
無限ループの危険低い(回数で終わる)高い(条件が変わらないと終わらない)

どちらでも書ける場面は多いですが、「回数が言えるなら for」と決めておくと読みやすくなります。

よくある間違い

⚠️ 間違い①:判定の順序が逆

「60点以上ならB」を先に書くと、85点の人も先にBと判定されてしまいます。厳しい条件(80点以上)から順に書きます。

⚠️ 間違い②:境界の記号を間違える

「60点以上」は ≧(60点を含む)、「60点より上」は >(含まない)。ちょうど60点の人の扱いが変わるため、問題文の日本語を必ず確認します。

⚠️ 間違い③:ループが終わらない

while の中で数を増やす処理を忘れると条件が成り立ち続け、無限ループになります。ループを書いたら「何が終わりに近づいているか」を指さして確認しましょう。

練習問題

まず自分で解いてから解説を開きましょう。

基本1

「80点以上ならA、60点以上ならB、それ以外はC」という判定で、70点の人はどれになりますか。

次から選びましょう

解答・解説を見る

答え:B

80点以上ではないので次の条件へ進み、60点以上を満たすのでBです。

つまずいたら → 「厳しい条件から順に書く」(本ページ if と for の基本の形)に戻りましょう。

基本2

i を1から5まで1ずつ増やしながら繰り返すと、処理は何回実行されますか。

回

解答・解説を見る

答え:5回

i=1,2,3,4,5 の5回です。1から5「まで」なので5も含みます。

つまずいたら → 「1から5まで=5回」(本ページ 例題1)に戻りましょう。

応用

total=0 から始めて、1から10までを順に足すと total はいくつになりますか。

解答・解説を見る

答え:55

1+2+…+10=55。(1+10)×10÷2=55 でも確かめられます。

つまずいたら → 「total を0にしてから順にたし込む」(本ページ 例題1)に戻りましょう。

応用2

「60点以上ならB」を先に、「80点以上ならA」を後に書いたプログラムで、85点の人はどう判定されますか。

次から選びましょう

解答・解説を見る

答え:B(バグ)

85点は先に「60点以上」を満たすためBになってしまいます。A の判定に届きません。条件は厳しい順に並べるのが正解です。

つまずいたら → 「広い条件を先に書くと狭い条件に届かない」(本ページ よくある間違い①)に戻りましょう。


よくある質問

Q. 条件分岐(if)とは何ですか?

条件が成り立つかどうかで実行する処理を変えるしくみです。段階が増えるときは else if を重ね、どれにも当てはまらない場合を else で受けます。

Q. for と while の違いは何ですか?

for は回数が決まっている繰り返し、while は条件が成り立つあいだ続く繰り返しです。回数が言えるなら for を使うと読みやすく、無限ループも起きにくくなります。

Q. 無限ループはなぜ起きるのですか?

繰り返しの条件がいつまでも成り立つからです。while の中でカウンタを増やし忘れる、終了条件が一度も満たされない、などが典型的な原因です。

Q. 「80点以上ならA、60点以上ならB」の順番を逆にすると何が起きますか?

85点の人もB判定になります。範囲の広い条件を先に書くと、狭い条件に届く前に決まってしまうので、厳しい条件から順に書きます。

次に学ぶ内容

📚 参考・監修方針

高等学校「情報I」および基本的なIT知識の範囲を参照し、オリジナルに作成(実在試験問題の転載はありません)。正確性は編集方針にそって確認しています。

最終更新日:• 最終確認日:• このページの誤りを報告する