基本情報技術者試験の科目Bの公開問題を題材に,副プログラム(関数)の使い方について学習します。この問題では,引数を受け取って処理を行い,戻り値を返す関数の仕組みと,4の倍数の個数を求める処理を確認します。
令和7年度 基本情報技術者試験 公開問題 科目B 問1
問 次のプログラム中の a と b に入れる正しい答えの組合せを,解答群の中から選べ。
関数 function1 が受け取る引数と,関数 function2 が受け取る引数とが同じとき,二つの関数は同じ値を返す。ここで,引数nと引数mは正の整数であり,引数mは引数nよりも10以上大きい数とする。
〔プログラム〕
○整数型: function1(整数型: n,整数型: m)
整数型: count ← 0
整数型: i
for (iをnからmまで1ずつ増やす)
if ((i mod 4)が0と等しい)
count ← count + 1
endif
endfor
return count
○整数型: function2(整数型: n,整数型: m)
整数型: count ← 0
整数型: tempN ← n
整数型: i,j
for ( a )
if ((tempN mod 4)が0と等しい)
繰返し処理を終了する
endif
tempN ← tempN + 1
endfor
for ( b )
count ← count + 1
endfor
return count
解答群
a | b | |
| ア | iを1から2まで1ずつ増やす | jをnから始めてmを超えない範囲でtempNずつ増やす |
| イ | iを1から2まで1ずつ増やす | jをtempNからmまで1ずつ増やす |
| ウ | iを1から2まで1ずつ増やす | jをtempNから始めてmを超えない範囲で4ずつ増やす |
| エ | iを1から3まで1ずつ増やす | jをnから始めてmを超えない範囲でtempNずつ増やす |
| オ | iを1から3まで1ずつ増やす | jをtempNからmまで1ずつ増やす |
| カ | iを1から3まで1ずつ増やす | jをtempNから始めてmを超えない範囲で4ずつ増やす |
【解答】カ
【解説】
function1 と function2 は,どちらも引数 n と m を受け取り,nからmまでの範囲にある4の倍数の個数を戻り値として返す副プログラム(関数)である。ただし,2つの副プログラム(関数)では,その求め方が異なる。function1 は,nからmまでの整数を1ずつ調べ,4の倍数を見つけるたびに count を1増やして個数を数える。一方,function2 は,まずn以上の最初の4の倍数をtempNに求め,その後は4の倍数が4ずつ続くことを利用して,4の倍数だけを順番に調べて個数を数える。このように,function1 と function2 は処理方法が異なるが,同じ引数を与えたときに同じ値を戻り値として返す副プログラム(関数)になっていることがポイントである。
function2 では,最初の4の倍数を探すために,tempN が4の倍数になるまで1ずつ増やす。nを4で割った余りは 0,1,2,3 のいずれかなので,tempN を最大3回増やせば,n以上の最初の4の倍数を見つけることができる。したがって,aは「iを1から3まで1ずつ増やす」となる。
最初の4の倍数を tempN に求めた後は,4の倍数が4ずつ続くことを利用する。そのため,tempN から始めて4ずつ増やしながら,mを超えない範囲で count を1ずつ増やせばよい。したがって,bは「jをtempNから始めてmを超えない範囲で4ずつ増やす」となる。
【参考】
この問題のポイント
この問題から学べることは,
- 副プログラム(関数)の役割と使い方
- 関数の引数と戻り値
- 剰余演算(mod)を使って4の倍数を判定する方法
- 繰返し処理を使って条件に合う値の個数を数える方法
- 同じ結果を異なる処理方法で求める方法
です。特に,副プログラム(関数)は,引数として受け取った値を使って処理を行い,その結果を戻り値として返すことを理解しておきましょう。また,function1 と function2 は処理方法が異なりますが,どちらも nからmまでの範囲にある4の倍数の個数を求める関数であることを確認しておきましょう。
基本情報技術者試験の学習におすすめの参考書
基本情報技術者試験の合格を目指す方におすすめの参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。


