ITの基礎知識|ITパスポート・基本情報

基本情報技術者 令和7年公開問題 科目B 問1

2026.05.29

科目Bに共通する注意事項(表記ルールなど)については、下記のリンク先を参照してください。

基本情報技術者 令和7年公開問題 科目Bの注意事項


問題

次のプログラム中の【 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 の組合せ)

    • a: iを1から2まで1ずつ増やす
    • b: jをnから始めてmを超えない範囲でtempNずつ増やす
    • a: iを1から2まで1ずつ増やす
    • b: jをtempNからmまで1ずつ増やす
    • a: iを1から2まで1ずつ増やす
    • b: jをtempNから始めてmを超えない範囲で4ずつ増やす
    • a: iを1から3まで1ずつ増やす
    • b: jをnから始めてmを超えない範囲でtempNずつ増やす
    • a: iを1から3まで1ずつ増やす
    • b: jをtempNからmまで1ずつ増やす
    • a: iを1から3まで1ずつ増やす
    • b: jをtempNから始めてmを超えない範囲で4ずつ増やす

Show answer

解答

解説

function1 の動作確認

function1 は n から m まで 1 ずつ増やしながら,4 の倍数(`i mod 4 = 0`)の個数を数えて返します。

例:function1(5, 20) → 8, 12, 16, 20 の 4 個 → count = 4

function2 の設計意図

function2 は同じ結果を「別の方法」で求めます。

第1の for ループ(空欄 a )の役割

tempN = n(初期値)から始めて,「n 以上で最初の 4 の倍数」を tempN に格納することです。

4 の倍数は 4 個おきに存在するため,任意の整数 n に対して n, n+1, n+2, n+3 のうち必ず 4 の倍数が含まれます。つまり 最大でも 3 回インクリメントすれば 4 の倍数に到達できます。

ループ内部の流れは次のとおりです。

  1. tempN が 4 の倍数 かどうかをチェック
    1. 4の倍数であればループ終了
  2. tempN が 4 の倍数で無かった場合、tempN に 1 加算し次のループへ移行

最大で 3 回増やす必要があるため,ループ回数は「i を 1 から 3 まで」が正しいです。「1 から 2 まで」では最大 2 回しか増やせず,例えば n=1 のとき tempN=3 で終了してしまい(本来は 4 まで増やす必要がある),正しく動作しません。

ループが3回しか行われないため、一見すると n+3 が4の倍数だった場合に「tempN が 4 の倍数 かどうか」のチェックが行われないため、検出できないようにも思えますが、それぞれのパターンを検証すると問題ないことが分かります。tempN = n+3まで到達した時点で、tempN は4の倍数になっている、とみなして、特にチェックを行っていないのが本プログラムのロジックです。

  • n が 4の倍数だった場合
    • 第1のループの1回目のチェックで 4 の倍数として検出。
    • 1回目のループの途中で第1のループは終了。tempN = n という状態で、第2のループに進む。
  • n が 4の倍数+1 だった場合
    • 第1のループの2回目のチェックで 4 の倍数として検出。
    • 2回目のループの途中で第1のループは終了。tempN = n+1 という状態で、第2のループに進む。
  • n が 4の倍数+2 だった場合
    • 第1のループの3回目のチェックで 4 の倍数として検出。
    • 3回目のループの途中で第1のループは終了。tempN = n+2 という状態で、第2のループに進む。
  • n が 4の倍数+3 だった場合
    • 第1のループの3回目のチェックまで行うが、 4 の倍数として検出されない。
    • 3回目のループを最後まで行い、tempN = n+3 という状態で、第2のループに進む。

a = 「iを1から3まで1ずつ増やす」

第2の for ループ(空欄 b )の役割

tempN は「n 以上で最初の 4 の倍数」を指しています。ここから m を超えない範囲で 4 つずつ増やしながら,4 の倍数を 1 個ずつカウントします。

b = 「jをtempNから始めてmを超えない範囲で4ずつ増やす」

動作確認(n=5, m=20 の場合)

第1ループ

  • i=1: 5 mod 4 = 1 ≠ 0, tempN = 6
  • i=2: 6 mod 4 = 2 ≠ 0, tempN = 7
  • i=3: 7 mod 4 = 3 ≠ 0, tempN = 8

第2ループ:j = 8, 12, 16, 20 → count = 4

function1(5, 20) = 4 と一致します。