この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は イ

解説

3つの異なる整数x, y, zの中から最大値を返すmaximum関数の空欄条件を問う問題です。関数の構造は「if (□) → return x; elsif (y > z) → return y; else → return z」という3分岐です。xを返す条件として必要なのは「xがy, zの両方より大きい」こと、つまり「x > y かつ x > z」です。これはxが3つの中で最大であるための必要十分条件です。選択肢Bの「x > y and x > z」がこれに対応します。なぜ必要十分条件でなければならないか:条件が不十分だとxより大きい値(y またはz)が存在するのにxを返してしまいます。条件が過剰だとxが最大値のはずなのに第2・第3の分岐に落ちてしまいます。論理的に「x が最大値である」⇔「x > y かつ x > z」というANDの条件が必要です。プログラムのelsiフ分岐(y > z のときy を返す)は、最初のifが偽(xが最大でない)の場合にyとzを比較するため、xが最大でないことが前提となっており、x > y and x > z という条件が正しければ残りの分岐で問題なくy またはzの最大値を返せます。

なぜ他の選択肢は違うのか

選択肢 ア
「x > y」だけではxがzより大きいかどうかが保証されません。例えばx=5, y=3, z=7のとき、x > y は真(5>3)でxが返りますが、正しい最大値は7(z)です。単一の条件では3変数の最大値判定に不十分です。
選択肢 ウ
「x > y and y > z」はx > y > zという全順序の制約で、条件が強すぎます。x=7, y=3, z=5のとき、x > y は真(7>3)ですがy > z は偽(3<5)のためこの条件全体が偽となり、xが最大値なのにyまたはzを返してしまいます。「xが最大」の条件はyとzの大小関係に依存しません。
選択肢 エ
「x > z」だけではxがyより大きいかどうかが保証されません。例えばx=5, y=7, z=3のとき、x > z は真(5>3)でxが返りますが、正しい最大値は7(y)です。選択肢aと同様、1つの比較だけでは3変数の最大値判定に不十分です。
選択肢 オ
「x > z and z > y」は x > z > y という全順序、つまり z が y より大きく x が z より大きい場合のみ成立します。例えば x=10, y=7, z=3 のとき、x > z(10>3)は真ですが z > y(3>7)は偽になり、この条件全体が偽となります。しかし x は最大値です。x が最大であることは y と z の大小関係とは無関係であり、「x > y かつ x > z」の両条件が必要十分です。
選択肢 カ
「z > y」だけでは x との比較が全くなく、x が最大かどうかを判定できません。例えば x=1, y=2, z=3 のとき z > y(3>2)は真ですが x は最小値であり最大値は z です。また x=10, y=3, z=5 のとき z > y(5>3)は真ですが最大値は x です。y と z の大小比較だけでは x の大きさをまったく評価できません。

解くときのポイント

n個の値の中での最大値判定:「対象が他の全ての値より大きい」という条件がANDで繋がる。3つの場合:x > y AND x > z。条件が不足するとより大きい値があっても見落とし、条件が過剰だと正しい最大値を逃す。