基本情報技術者試験 (FE) 科目 B — 擬似言語

繰り返し (while) の書き方と無限ループの避け方

定義

while (条件) から endwhile までを、条件が真である間くり返す。ループ本体で条件に絡む変数を更新しないと、条件は永遠に真のままとなり無限ループになる。

while は「条件が真の間くり返す」

while (条件) ... endwhile は、条件が真である間、間に挟まれた処理を何度もくり返します。 条件が最初から偽なら 1 回もまわりません。

while (条件)
  // くり返したい処理
endwhile

条件式のカッコは省略できません。endwhile で必ず閉じます。 for 文と違って、ループ変数の初期化・更新はプログラマが自分で書く 必要があります。

ブラウザで動かしてみる

1 から n までの合計を求める典型例です。i を 1 で初期化し、 本体の最後で i ← i + 1 と 1 ずつ増やしています。一行ずつ実行 を押していくと、i合計 が交互に変わっていく様子を右側の表で追えます。

待機中
エディタを読み込み中…

変数

まだ実行されていません

出力

まだ出力はありません (print で表示します)

n を 10 や 100 に変えて再実行すると、 出力される合計値がガウス和 (n(n+1)/2) と一致することが確認できます。

「更新を忘れると無限ループ」の落とし穴

while で最も多いバグが、ループ本体で条件に絡む変数を更新し忘れる ことです。次のコードは i ← i + 1 を書き忘れているので、i は永遠に 1 のまま、条件 i ≦ 5 はずっと真、ループは止まりません。

整数型: i ← 1
while (i ≦ 5)   // ← 本体で i を増やさないと永遠にまわる
  print(i)
endwhile

この実行シミュレーターは 100000 ステップを超えると自動停止しますが、 試験問題では手で追いかけて「これは止まるか?」を判断する必要があります。ループ条件に出てくる変数が、本体で必ず条件を偽に近づける方向に更新されているか を先にチェックする癖をつけましょう。

回数が事前に分からない場合の while

for が「n 回まわす」向きなのに対し、while は 「いつ終わるか事前に分からない繰り返し」に向いています。 次の例は 100 を 2 で割り続けて 1 になるまで何回かかるかを数えます。

待機中
エディタを読み込み中…

変数

まだ実行されていません

出力

まだ出力はありません (print で表示します)

こういう「終了条件が動的に決まる」処理は for では書きにくく、while の方が自然です。for と while の使い分けの感覚は 次の for のレッスン と読み比べると掴めます。

試験でつまずきやすいポイント

  • 更新式の位置: i ← i + 1 を本体の先頭に書くのか末尾に書くのかで、出力がずれる問題がよく出る
  • 境界条件: while (i ≦ n) while (i < n) で 1 回分の差が出る。「以下 / より小さい」で n 回目を含むか変わる
  • 初期化の位置: while の外で 1 度だけ初期化するべきものを、 本体の中に書いてしまうと毎ループで初期化されて意図と違う挙動になる

while が読めるようになったら、次は「回数を明示する」形の 繰り返し (for) に進みましょう。境界条件の考え方は共通です。

よくある疑問

Q.while ループは何回まわりますか?
A.条件が true である限り何回でもまわります。ループ本体の中で条件に絡む変数を更新して、いずれ false になるように書くのが基本です。更新を忘れると無限ループになります。
Q.無限ループを書いてしまったらどうなりますか?
A.この実行シミュレーターでは 100000 ステップを超えると自動的に停止し、「実行ステップが上限に達しました」というメッセージが出ます。ブラウザが固まる心配はありません。試験では手計算で無限ループを見抜く力が問われます。
Q.do-while (最初に 1 回実行してから条件判定) はありますか?
A.基本情報の擬似言語には do-while に相当する構文もありますが、頻度は while より低めです。この実行シミュレーターでは Ver.5.1 の一般的な while / endwhile のみを対象にしています。

理解できたか試す / 自由に動かす

この構文をもっと練習する(おすすめ書籍)

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

プログラムの読み方でつまずいたら。

たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。

無料相談を予約する →
受講者の声 (DB・SQL コース)
menta レビュー原文を見る →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講