問1 3 つの整数の最大値を返す条件

基本情報​技術者試験 令和6年度 公開問題 科目B、全6問のうちの問1。

出典:令和6年度 基本情報技術者試験 公開問題 科目B 問1(プログラムは原本の画像を文字に書き起こし、字下げは 1 段を空白 2 つで表した。空欄は[  ]で表した)

次のプログラム中の[  ]に入れる正しい答えを,解答群の中から選べ。

関数 maximum は,異なる三つの整数を引数で受け取り,そのうちの最大値を返す。

〔プログラム〕
○整数型: maximum(整数型: x, 整数型: y, 整数型: z)
if ([  ])
return x
elseif (y > z)
return y
else
return z
endif
  1. アx > y
  2. イx > y and x > z
  3. ウx > y and y > z
  4. エx > z
  5. オx > z and z > y
  6. カz > y
答えと解説を開く

正解はイです。

最初の if が真なら x を返すので、ここには「x が最大である」ことの条件が入ります。x が最大とは、x が y より大きく、かつ x が z より大きいことです。だから x > y and x > z です。この if が偽なら、最大は y か z のどちらかなので、elseif (y > z) で 2 つを比べれば決まります。値を入れて確かめます。x = 3、y = 1、z = 2 なら 3 > 1 も 3 > 2 も真で、3 を返します。x = 2、y = 1、z = 3 なら 2 > 3 が偽なので elseif に進み、1 > 2 も偽なので z の 3 を返します。x = 1、y = 3、z = 2 なら最初の条件は偽で、3 > 2 が真なので y の 3 を返します。どれも最大値です。正解はイです。

ほかの選択肢が違う理由

  • アx が y より大きくても、z のほうが大きいことがあります。x = 2、y = 1、z = 3 では x の 2 を返してしまいます。
  • ウx が最大でも y > z とは限りません。x = 3、y = 1、z = 2 では条件が偽になり、elseif の 1 > 2 も偽なので z の 2 を返します。
  • エx が z より大きくても、y のほうが大きいことがあります。x = 2、y = 3、z = 1 では x の 2 を返してしまいます。
  • オx が最大でも z > y とは限りません。x = 3、y = 2、z = 1 では条件が偽になり、elseif の 2 > 1 が真なので y の 2 を返します。
  • カx と比べていません。x = 1、y = 2、z = 3 では x の 1 を返してしまいます。

仕組み

if と elseif は上から順に調べ、最初に真になった所だけを実行します。だから後ろの条件は「前の条件が偽だった」ことを前提に書けます。

条件の穴埋めは、選択肢ごとに「その条件だと困る値の組」を 1 つ探すと早く消せます。3 つの値なら、最大を x、y、z に置いた 3 通りを試せば十分です。

この問に出る言葉