科目Bのプログラムでいちばん多く出てくる記号が ← です。そしていちばん多くの人がつまずくのもここです。
第1部 擬似言語の教科書 地図+20回
G1擬似言語の地図(入口)G2-1変数と宣言G2-2データ型G2-3代入「←」G3-1部品を呼ぶ/戻るG3-2引数G3-3戻り値・手続と関数G4-1配列と要素番号G4-2配列の読み書きG5選択処理 ifG6-1繰返し forG6-2配列を for で回すG7繰返し whileG8-1算術演算子と優先順位G8-2and / or / notG9-12次元配列G9-22重ループG10大域変数と局所変数G11未定義G12-1演算子 . の読み方G12-2クラスとはG12-3コンストラクタ
← は「入れる」ではなく「上書きする」。この違いが分かると、科目Bのプログラムは書き出して追えるものに変わります。
代入 ── ここでほぼ全員がつまずく
ここからが本題です。まず、間違ったプログラムを見てもらいます。
a に 3、b に 7 が入っています。この2つを入れ替えたいので、素直に書きました。
a ← b b ← a
a が 3、b が 7 のとき、この2行を実行すると a と b はどうなりますか。
1行ずつ動かして確かめます。a の中身がいつ消えるかに注目してください。
入れ替えたつもりが、入れ替わらない
当サイトオリジナル
ループ開始前
いま計算していること
変数の状態
結果
トレース表(進めると1行ずつ積み上がります)
なぜこうなるのか ── ← は「入れる」ではなく「上書きする」
← は「右の値で、左の箱を上書きする」という意味です。箱に入るのは1つだけ。新しい値を入れれば、前の値はどこにも残りません。
代入で起きること。値を追うときは、この3つを毎回あてはめる
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 が読めない |
右を先に計算して、その結果を左へ入れ直す |
| 右側に書いた変数も書き換わると思う | 右側は読まれるだけ。書き換わるのは矢印の左だけ |
| 変数の値を頭の中で追う | 書き出す(トレース)。上書きされるので、覚えていられない |
この記事で引用した資料
- 擬似言語の記述形式 科目Bの公開問題・サンプル問題の各冊子に掲載。冊子上の名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 基本情報技術者試験 シラバス Ver9.2(2026年1月8日)
- 基本情報技術者試験 科目B サンプル問題(2022年12月26日公開)
- 令和5年度 基本情報技術者試験 科目B 公開問題(2023年7月6日公開)
- 令和6年度 基本情報技術者試験 科目B 公開問題(2024年7月5日公開)
- 令和7年度 基本情報技術者試験 科目B 公開問題(2025年7月4日公開)
- 令和8年度 基本情報技術者試験 科目B 公開問題(2026年7月1日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
「入れ替えたつもりの2行」と、2つのシミュレータで使った例は当サイトのオリジナルです。

