CO-S19情報Ⅰ 対策問題

コンピュータとプログラミング思考・計算

プログラムで料金計算をしたところ、「10歳未満は無料」のつもりが10歳も無料になってしまった。原因として最も適当なものはどれか。

解答・解説を見る

正解: 1

正答

1

この問題のポイント

境界値の条件式(< と <= の違い) を問う問題です。「未満は含まない、以下は含む」の対応がカギです。

解説

日本語の範囲表現と不等号の対応を正確に覚えることが出発点です。「10未満」は10を含まないので age < 10、「10以下」は10を含むので age <= 10、「10以上」は age >= 10、「10より大きい」は age > 10 です。「未満」と「以下」の違いは、境界の値(ちょうど10)を含むかどうかだけです。

症状から原因を逆算します。

  1. 仕様は「10歳未満は無料」→ 正しい条件は age < 10(10歳は有料)
  2. 実際は「10歳も無料になった」→ プログラムはage=10のとき条件が真になっている
  3. age=10で真になる条件は age <= 10
  4. よって「< とすべきところを <= と書いた」のが原因

このように、ちょうど境目の値(ここでは10歳)を境界値と呼びます。プログラムの誤りは境界値で起こることが非常に多いため、動作確認(テスト)では境界の値とその前後(9歳・10歳・11歳)を必ず試すのが定石です。

共通テストでは、「実行結果が仕様とずれた原因を選ぶ」「条件式の空欄に < か <= かを入れる」という形で境界値が問われます。9歳(無料)・10歳(有料)のように具体的な値を条件式に代入して真偽を確かめれば、確実に見分けられます。

選択肢の確認

1.○ <= は10を含むため、10歳ちょうども無料と判定されてしまった。
2.× age < 10 なら10歳は条件を満たさず有料になるので、症状と合わない。
3.× 型の誤りならエラーや比較不能など別の症状になる。
4.× この症状は条件式の問題で、繰り返し回数は無関係。

ここだけは覚えよう

「未満」= <(含まない)、「以下」= <=(含む) — バグは境界値で起こる。境界とその前後を必ずテスト。

関連問題

CO-S18CO-S20