戦国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の選択肢の画像

選択肢

(正解)

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

関数の繰り返し計算(calcX, calcY)【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 情報処理技術者試験対策アプリ

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