次のプログラム中の a ~ c に入れる正しい答えの組合せを、解答群の中から選べ。 関数gcdは、引数で与えられた二つの正の整数num1とnum2の最大公約数を、次の(1)~(3)の性質を利用して求める。 (1) num1とnum2が等しいとき、num1とnum2の最大公約数はnum1である。 (2) num1がnum2より大きいとき、num1とnum2の最大公約数は、(num1-num2)とnum2の最大公約数と等しい。 (3) num2がnum1より大きいとき、num1とnum2の最大公約数は、(num2-num1)とnum1の最大公約数と等しい。 〔プログラム〕 ○整数型: gcd(整数型: num1, 整数型: num2) 整数型: x ← num1 整数型: y ← num2 a if ( b ) x ← x - y else y ← y - x endif c return x
減算による互除法は等しくなるまで大きい方から引く
○整数型: gcd(整数型: num1, 整数型: num2)
整数型: x ← num1
整数型: y ← num2
a
if ( b )
x ← x - y
else
y ← y - x
endif
c
return x
選択肢
- アa: if (x ≠ y), b: x < y, c: endif
- イa: if (x ≠ y), b: x > y, c: endif
- ウa: while (x ≠ y), b: x < y, c: endwhile
- エa: while (x ≠ y), b: x > y, c: endwhile
正解と解説
正解:エ a: while (x ≠ y), b: x > y, c: endwhile
利用する性質(2)(3)は、大きいほうから小さいほうを引く操作を、両者が等しくなるまで繰り返すことを示しています。したがってaは繰返し構造 while (x ≠ y)、cはその終わりのendwhileです。bの条件は、真のときにx←x-yを実行するので「xのほうが大きい」場合、すなわち x > y でなければなりません。
選択肢ごとの解説
- アifでは1回しか引けず、また条件の向きも逆で減算する側が誤り。
- イifのため繰返しにならず、等しくなるまで処理が進まない。
- ウwhileは正しいが、x<yのときにx←x-yとすると負の値になる。
- エ正解。等しくなるまで繰り返し、大きいほうから小さいほうを引く。
同じ分野の他の問題
- 次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。…2026年度 公開問題 科目B 問5
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数func1に与…2026年度 公開問題 科目B 問3
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 関数complementは、引数として渡された8ビット型…2026年度 公開問題 科目B 問2
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 次のプログラムは、…2026年度 公開問題 科目B 問1
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 関数changeは、10より大きい整数を引数nで受け取り…2025年度 公開問題 科目B 問2
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。