戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2022年 問96


問題文

関数calcXと関数calcYは、引数inDataを用いて計算を行い、その結果を戻り値とする。関数calcXをcalcX(1)として呼び出すと、関数calcXの変数numの値が、1→3→7→13と変化し、戻り値は13となった。関数calcYをcalcY(1)として呼び出すと、関数calcYの変数numの値が、1→5→13→25と変化し、戻り値は25となった。プログラム中のa、bに入れる字句の適切な組合せはどれか。
ITパスポート 2022年  問96の問題画像ITパスポート 2022年  問96の選択肢の画像

選択肢

ア:
イ:
ウ:
エ:(正解)

🔒 解説は解答すると表示されます

関数の繰り返し計算【ITパスポート解説】

正解の理由

関数に渡す値(引数(ひきすう:関数に入力する値))が1のとき、calcXでは変数numの値が1 → 3 → 7 → 13と変化し、最終戻り値が13になっています。これは各反復で という更新を、i = 1, 2, 3の3回行った結果と一致します。
また、calcYでは変数numが1 → 5 → 13 → 25と変化しています。これは同じ更新式 をi = 2, 4, 6 (つまり2から6まで2ずつ増やす)で3回繰り返した結果と一致します。
したがって、aに入る式は「num + 2 × i」、bに入るループは「iを2から6まで2ずつ増やす」である選択肢エが正しい組合せです。

解法ステップ

  1. 「calcXの変化」を確認する(inData = 1)。
    • 初期:num = 1
    • 1回目(i=1):num = 1 + 2×1 = 3
    • 2回目(i=2):num = 3 + 2×2 = 7
    • 3回目(i=3):num = 7 + 2×3 = 13 → 1 → 3 → 7 → 13(合致)
  2. 「calcYの変化」を確認する(inData = 1)。
    • bが「iを2から6まで2ずつ増やす」(i = 2,4,6)の場合:
      • 初期:num = 1
      • 1回目(i=2):num = 1 + 2×2 = 5
      • 2回目(i=4):num = 5 + 2×4 = 13
      • 3回目(i=6):num = 13 + 2×6 = 25 → 1 → 5 → 13 → 25(合致)
  3. よってa = num + 2 × i、b = iを2から6まで2ずつ増やす が正しい。
(まとめ)a列は「num + 2 × i」、b列は「iを2から6まで2ずつ増やす」=選択肢エ。

選択肢別の誤答解説

  • ア(a = 2 × num + i、b = iを1から7まで3ずつ増やす)
    • calcX(i=1,2,3)で計算すると最終値は19になります(1→3→8→19)。calcXの与えられた推移(1→3→7→13)と合いません。
    • calcYでも最終値は27となり不一致です。
  • イ(a = 2 × num + i、b = iを2から6まで2ずつ増やす)
    • aが「2 × num + i」だとcalcXの途中値が合いません(同様に1→3→8→19)。
    • calcYでも最終値が30となり不一致です。
  • ウ(a = num + 2 × i、b = iを1から7まで3ずつ増やす)
    • aの式自体はcalcXの変化(1→3→7→13)を満たします。
    • しかしcalcYの与えられた途中値は1 → 5 → 13 → 25ですが、この選択肢のb(i=1,4,7)で計算するとcalcYの途中値は1 → 3 → 11 → 25になります。最終値は25で一致しますが、途中の変化(特に最初のステップ)が問題文と異なるため不正解です。
      • 具体的:i=1のとき1 + 2×1 = 3(ここが5であるべき)
  • エ(a = num + 2 × i、b = iを2から6まで2ずつ増やす)
    • calcX、calcYともに問題文のすべての中間値と最終値に一致します。よって正解です。

よくある誤解

  1. 「戻り値だけ見れば良い」と考える誤り
    • 最終の戻り値が一致しても、途中の値が問題文と違う場合は誤りです。問題は途中の変化(列挙された値の推移)も指定しています。
  2. for文の増分(ステップ)を見落とすミス
    • 「1から7まで3ずつ増やす」と「2から6まで2ずつ増やす」はどちらも3回の繰り返しに見えても、iの値が違い、結果に大きく影響します。iの実際の値を列挙して確認しましょう。
  3. 更新式の左右を入れ替えて考えるミス
    • たとえば「2 × num + i」と「num + 2 × i」は似て見えますが、挙動が全く違います。代入は現在のnumを基に計算されることを意識してください。

補足コラム

  • for文(繰り返し処理をする文)は「何回繰り返すか」だけでなく「どの値を使うか(開始値・終了値・増分)」が非常に重要です。現場でもループのインデックス(i)の取り方を誤るバグはよくあります。
  • 今回は「差分」を見る方法が有効でした。数列の差(1→3→7→13の差は2,4,6)を見ると更新が「2×i」であることがすぐに分かります。覚えやすい手法です。

FAQ

Q1. 最終値だけが合えば正解ではないのですか?
A1. 問題文が途中の変化(列挙された値)を与えている場合は、途中の値も一致している必要があります。最終値のみ一致していても不正解になることがあります。
Q2. 「iを2から6まで2ずつ増やす」は何回繰り返しますか?
A2. iの値は2, 4, 6の3回です。開始値と終了値、増分を実際に列挙して確認しましょう。
Q3. 数列の差を見るとはどういう方法ですか?
A3. 連続する項の差を取ることで更新の規則が見えることが多いです。今回なら差が2,4,6と増えており「2×i」を使っていると推測できます。

関連キーワード: 繰返し, for文, ループ, インデックス, 更新式, 差分解析, 累積計算, 代入演算, デバッグ, アルゴリズム
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポートを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について