擬似言語の代入「←」|値が上書きされるしくみと、入れ替えに箱がもう1つ要る理由【基本情報技術者試験 科目B】

現行FE シラバス Ver9.2 準拠第1部 擬似言語の教科書 G2-3最終更新 2026-08-21

科目Bのプログラムでいちばん多く出てくる記号が ← です。そしていちばん多くの人がつまずくのもここです。

← は「入れる」ではなく「上書きする」。この違いが分かると、科目Bのプログラムは書き出して追えるものに変わります。

代入 ── ここでほぼ全員がつまずく

ここからが本題です。まず、間違ったプログラムを見てもらいます。

a に 3、b に 7 が入っています。この2つを入れ替えたいので、素直に書きました。

a ← b
b ← a

a が 3、b が 7 のとき、この2行を実行すると a と b はどうなりますか。

1行ずつ動かして確かめます。a の中身がいつ消えるかに注目してください。

入れ替えたつもりが、入れ替わらない

当サイトオリジナル


ループ開始前

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

なぜこうなるのか ── ← は「入れる」ではなく「上書きする」

← は「右の値で、左の箱を上書きする」という意味です。箱に入るのは1つだけ。新しい値を入れれば、前の値はどこにも残りません。

代入は、①右側の式を先に計算し、②その値を変数に書き込み、③変数に入っていた値は消える

代入で起きること。値を追うときは、この3つを毎回あてはめる

3つを、毎回あてはめる

① 右側を先に計算する右側のほうは変わらない

② その値を左の箱に書き込む矢印のとおり、右から左へ

③ 左の箱に入っていた値は消える取り戻せない

数学の =(等しい)ではありません。右から左への一方通行の書き込みです。

a←bを実行する前・実行するとき・実行したあとの3コマ。bの7の写しがaに入り、aに入っていた3は箱から落ちて消える

代入の3コマ。a と b がつながるのではなく、写しが入って前の値が消える

よくある思い違い ── a ← b は「a と b が同じになる」ではない

a ← b を、「a と b がつながって、以後どちらかが変わればもう一方も変わる」と読んでしまう人がいます。そうはなりません。

起きているのは、そのときの b の値の「写し」が a に入ることだけです。書き込みが終われば、2つの箱に関係はありません。あとで b が変わっても、a は変わりません。

そして写しが入るぶん、a に入っていた値は押し出されて消えます。取り戻す方法はありません。

次の3行を実行したあと、b はいくつですか。

整数型: a ← 4
整数型: b ← a
a ← 9

正しく入れ替えるには、箱がもう1つ要る

値を失わないためには、先に避難させてから上書きするしかありません。

整数型: tmp
tmp ← a        // a の 3 を避難させる
a ← b          // a に 7 が入る(3 は tmp にある)
b ← tmp        // b に 3 を戻す
実行した行 a b tmp
(開始) 3 7 未定義
tmp ← a 3 7 3
a ← b 7 7 3
b ← tmp 7 3 3
この tmp の行が、そのまま空欄になる

「一時的に避難させる変数」は、整列(ソート)の問題で必ず出てきます。そしてこの3行のどれかが空欄になります。

実際の出題では、入れ替えが日本語の1文で書かれることもあります。

出典:令和5年度 基本情報技術者試験 科目B 公開問題 問3(プログラムの一部)

data[i]とdata[j]の値を入れ替える

擬似言語では、← のような記号だけでなく、処理そのものが日本語で書かれることがあります。書いてあるとおりに解釈すれば正解にたどりつくように作られています。

a と b の値を入れ替えたい。空欄 ▭ に入るのはどれですか。

整数型: a ← 3
整数型: b ← 7
整数型: tmp

tmp ← a
a ← b
▭

自分自身を使う代入 ── x ← x + 3 が読めない

矢印の両側に同じ名前が出てくる形があります。数学の式として読むと意味が通らないので、多くの人がここで止まります。

x ← x + 3

さきほどの3つを、そのままあてはめるだけです。x が 5 だとします。

① 右側 x + 3 を計算5 + 3 = 8(このとき x はまだ 5)

② その 8 を x に書き込むx は 8 になる

③ 元の 5 は消える—

「x と x + 3 が等しい」という意味ではありません。右を計算して、左に入れ直しているだけです。

この形は科目Bのほとんどの問題に出ます。とくに次の3つは、見た瞬間に意味が浮かぶまで慣れておいてください。

書き方 読み方 どこで出るか
i ← i + 1 i を1つ増やす 繰返しで「次へ進む」ときの定番(繰返しは G6)
total ← total + x total に x を足し込む 合計を求めるときの定番
count ← count + 1 数を1つ数える 条件に合うものを数えるときの定番

どれも同じ箱を読んで、計算して、同じ箱に書き戻しています。動かして確かめます。

次の2行を実行したあと、count はいくつですか。

整数型: count ← 7
count ← count + count

右側を先に計算してから、左に入れる

当サイトオリジナル


ループ開始前

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

次の4行を実行したあと、total はいくつですか。

整数型: total ← 0
total ← total + 3
total ← total + 5
total ← total + 2

トレース ── 変数の値を書き出しながら読む

ここまでで分かったことが、そのまま科目Bの解き方につながります。

なぜ暗算で解けないのか

代入は上書きです。つまり同じ変数名でも、行によって中身が違います。「x はいくつだったか」は、何行目の話かを言わないと決まりません。

人間の頭は、これを数行しか保持できません。実際、7行しかないサンプル問題 問1 でも間違える人が出ます ── 6行目で、x がすでに書き換わっていることを見落とすからです。

だから科目Bは、変数の値を書き出しながら読みます。これをトレースといいます。暗算しないと決めた時点で、この試験はかなり解きやすくなります。

このページのシミュレータがやっていたのは、その表を自動で書いていただけです。自分の手で同じことができれば、本番でも同じ精度で解けます。

表の作り方、繰返しや配列があるときの書き方、本番で書く量を減らす判断は、次のページにまとめてあります。

この文法が実際に出た問題

宣言と代入だけでできている出題があります。7行しかなく、配列も繰返しも出てきません。それでも間違える人が出ます。

つまずきポイントまとめ

まちがえ方 正しい理解
= を代入だと思う 代入は ←。= は等しいか調べるほう
a ← b/b ← a で入れ替わると思う 1行目で a の値が消える。避難用の変数がいる
a ← b で 2つの箱が連動すると思う 入るのはそのときの値の写し。あとで b が変わっても a は動かない
i ← i + 1 が読めない 右を先に計算して、その結果を左へ入れ直す
右側に書いた変数も書き換わると思う 右側は読まれるだけ。書き換わるのは矢印の左だけ
変数の値を頭の中で追う 書き出す(トレース)。上書きされるので、覚えていられない

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

「入れ替えたつもりの2行」と、2つのシミュレータで使った例は当サイトのオリジナルです。

Copied title and URL