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

ITパスポート 2010年 春期 53


問題文

変数AとBに格納されているデータを入れ替えたい。データを一時的に格納するための変数をTMPとすると、データが正しく入れ替わる手順はどれか。ここで“”は、yのデータでxの内容を置き換えることを表す。
ITパスポート 2010年 春期  問53の選択肢の画像

選択肢

(正解)

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

変数AとBの入れ替え(TMPを使う)【ITパスポート 解説】

正解の理由

選択肢のうち、(TMP ← A → A ← B → B ← TMP)は正しい手順です。ここで「変数」はデータを保存する箱、「一時変数(temporary variable)」はその中の一つで一時的に値を避難させる箱です。
手順の肝は「元のAの値を上書きする前にどこかに保存しておく」ことです。では最初に元のAの値をTMPに退避させ(TMP ← A)、次にBをAに入れ(A ← B)、最後に退避しておいた元のAをBに戻します(B ← TMP)。これでAとBが互いに入れ替わります。
具体例(分かりやすく数値で示す)
  • 初めに A=1, B=2
  • TMP ← A → TMP=1
  • A ← B → A=2
  • B ← TMP → B=1 結果:A=2, B=1(入れ替わり完了)

解法ステップ

  1. 「上書きで失われる値」を確認する。ここではAの元の値が失われる危険がある。
  2. 失われる前にその値を別の場所に退避(TMP ← A)する。
  3. もう片方の値を上書き先に移す(A ← B)。
  4. 退避しておいた値を残りの変数に戻す(B ← TMP)。
  5. シンプルに、手順を符号化してシミュレーション(数値や を使う)して確認する。
記号的に見ると、(元のA)と (元のB)を使えば:
  • TMP =
  • A =
  • B = TMP =
    → 最終的に A = , B = (入れ替わり成立)

選択肢別の誤答解説

  • ア(TMP ← A、A ← B、B ← A)
    最後の操作で「B ← A」を行うと、Aは既にBの値に上書きされているため、Bもその同じ値(元のB)になってしまいます。結果的に両方とも元のBになり、元のAが失われます。
  • ウ(TMP ← B、A ← B、B ← TMP)
    TMPにBを退避してからA ← Bを行うと、AとBはどちらも元のBの値になります。TMPにBを使っても元のAを保存していないため、元のAは失われます。
  • エ(TMP ← B、A ← B、B ← A)
    TMPにBを保存しているが、最後に「B ← A」を行うとAは既にBに上書きされています。結果としてやはり両方とも同じ値(元のB)になり、元のAは失われます。
いずれも共通する誤りは「上書きされる前に元のAの値を保存していない」ことです。

よくある誤解

  • 「A ← B の後に B ← A をすれば入れ替わる」
    → 間違い。Aを先に上書きすると元のAは消えるので、B ← A はもはや元のAを取り戻せません。必ず先にどちらかを退避する必要があります。
  • 矢印(←)の意味を取り違える
    → 「x ← y」は「x に y の内容を入れる(x を y で置き換える)」という意味です。左辺が書き換えられます。
  • 一時変数は不要だと考える
    → 高級言語には組み込みで簡単に入れ替えられる構文(例:Pythonの A, B = B, A)がありますが、処理の本質は一時的にどちらかの値を確保することです。低級操作では一時変数が必要です。

補足コラム

  • 穴埋めの例え:AとBを入れ替えるのは「コップの水を移す」ようなものです。Aの水をBに注ぐ前に、Aの水を一時的なコップ(TMP)に移しておかないと、Aの中身を失います。
  • プログラミングでの簡易例(Python):
A = 1
B = 2

# 一時変数を使う方法
TMP = A
A = B
B = TMP

# Pythonならこの一行でOK
A, B = B, A
  • 一時変数を使わない数学的手法(参考):
    • 加減法: A = A + B; B = A - B; A = A - B (数値でかつオーバーフローに注意)
    • XORスワップ(ビット演算): A = A ^ B; B = A ^ B; A = A ^ B (数字のビット操作) ただしこれらは制約や安全面の問題(型やオーバーフロー、可読性)があります。試験では「一時変数を使う安全確実な方法」を理解しておくことが重要です。

FAQ

Q: TMPは必ず必要ですか?
A: 低レベルの逐次代入で安全に値を保つには通常必要です。高級言語では言語の機能で省略できますが、概念的には「どこかに値を保存する」ことが行われています。
Q: AとBが同じ場所(同一変数)だったら?
A: 同一変数同士の入れ替えは意味がない(結果は変わりません)。参照やポインタ的な話になると別の注意が必要です。
Q: 矢印の向きが逆の問題が出たら?
A: まず「左辺が書き換えられる」ことを確認してください。x ← y は x に y を入れる操作です。方向を取り違えると論理が逆になります。

関連キーワード: 変数, 一時変数, 代入, スワップ, 入れ替え, 退避, フローチャート, 代入の順序, アルゴリズム, XORスワップ
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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