問題
問1
次のプログラム中の【 】に入れる正しい答えを、解答群の中から選べ。
関数 maximum は、異なる三つの整数を引数で受け取り、そのうちの最大値を返す。

- ア:x > y
- イ:x > y and x > z
- ウ:x > y and y > z
- エ:x > z
- オ:x > z and z > y
- カ:z > y
[出典:基本情報技術者試験 令和6年度(科目B) 問1]
正解
正解は「イ」です。
解説
本問は、3つの整数 x, y, z のうち最大の値を返す関数 maximum を構築するための適切な条件文を選ぶ問題です。プログラムでは、最初の条件として if 文で最大値が x であるかどうかを判定しています。
最大値が x であるとは、「x が y より大きく、かつ z よりも大きい」ことを意味します。
つまり、「x > y and x > z」という条件が成り立つ場合に x を返せば正しいのです。
この条件に該当する選択肢は「イ」であり、これが if 文の【 】に入るべき正しい答えです。次の行では「y > z」のとき y を返し、それ以外は z を返す構造になっているため、この条件構造で3つの値の最大値を確実に返すことができます。
日常の例で考えると、「3人のテストの点数 x, y, z があり、誰が一番高得点かを判定する」とき、まず x が y と z の両方より高いなら x が最大、そうでなければ y と z を比べる、と段階的に判定するのと同じ考え方です。
このように、論理演算(AND)を使って複数条件を同時に確認することが、条件分岐処理ではとても重要です。選択肢の中でも、「x > y」や「x > z」などの単独条件では他の値と比較が不足しており最大値を正しく判定できません。
ア(x > y):
この条件では x が y より大きいかどうかしか判定しておらず、z と比較していないため、x が最大値であるとは断定できません。
ウ(x > y and y > z):
この条件では x が最大とは限りません。例えば x=80, y=70, z=60 のときは成立しますが、x=80, y=70, z=90 のときには z が最大でもこの条件が成立してしまいます。
エ(x > z):
x と z の比較だけで y との大小が判断されておらず、x が最大とは限らないため不適切です。
オ(x > z and z > y):
この条件では x, z, y の順に並んでいる場合しか対象とならず、x > y という判定が含まれていないため不正確です。
カ(z > y):
z と y の比較だけで x との大小がまったく考慮されていないため、x が最大であるケースを見逃します。
難易度
本問は、条件分岐と論理演算(AND)を正しく組み合わせて使う基本的な問題であり、プログラミングの基礎知識があれば比較的易しい問題です。ただし、複数の条件を正確に読み取れないと誤答しやすいため、論理の流れを意識する力が問われます。
用語補足
条件分岐(if 文):
与えられた条件が成立するかを判定し、処理の流れを制御する構文。条件が true のときに実行する処理を記述します。
論理演算子(and):
複数の条件を同時に満たすかを判定する演算子。すべての条件が true であるときに全体が true になります。
最大値の判定:
与えられた複数の値のうち最も大きいものを見つける操作。条件式を組み合わせて段階的に比較することで求められます。
対策
最大値や最小値を求めるロジックは基本的なアルゴリズム問題の代表です。まず if 文と論理演算子の使い方を正しく理解し、複数の条件がどのように動作するかを実例で練習することが効果的です。特に「すべての比較対象と比較しているか」を常に確認しましょう。