変数の宣言のところで、宣言しただけの箱は空っぽだと書きました。その状態には名前が付いています。未定義です。そして擬似言語には、いったん入れた値を消して空に戻す書き方まで用意されています。
期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円この回の内容を動画で見る
次のページで講義の目次と無料の講義を見られます。受講ボタンとクーポンコードもそこにあります。
この回の内容を動画で見る
解くための再現性が身につく講義29本小テスト86問模試3回分IT資格の森で見る
講義「大域変数・局所変数と未定義」(全6分52秒)は、IT資格の森(月額1,280円)の会員向けです。科目Bは、1行ずつ値を追うアニメの講義と、講義ごとの小テスト、本番と同じ形の模擬試験がそろっています。
未定義 ── 値が入っていない状態
出典:IPA「擬似言語の記述形式」〔未定義,未定義の値〕
変数に値が格納されていない状態を,“未定義”という。変数に“未定義の値”を代入すると,その変数は未定義になる。
正典に書かれているのは、この2文だけです。まず1文目 ── 整数型: x と書いただけの x が、未定義です。
整数型: x 整数型: y ← 5
x は未定義、y は 5。同じ1行の宣言でも、← があるかどうかで分かれます。
未定義は「入っていないことが、はっきり決まっている」状態
未定義は0でも空文字でもありません。何も入っていないという状態そのものです。
だから {5個の 0}(全部0で埋める)と {5個の 未定義の値}(全部空にしておく)は別のものです。前者はもう値が入っていて、後者はまだ入っていません。
次の3行を実行し終えたとき、p と q はどうなっていますか。
整数型: p ← 3 整数型: q q ← p
「未定義の値」を代入すると、空に戻る
正典の2文目です。未定義の値 という書き方そのものが、代入できる値のように扱われます。
整数型: x ← 5 x ← 未定義の値
1行目で x は 5。2行目でまた未定義に戻ります。代入は上書きなので、5 はどこにも残りません。
(令和7年度 基本情報技術者試験 科目B 公開問題 問3)
stack[stackPos] ← 未定義の値
スタックから値を取り出したあと、その場所を空に戻している行です。取り出したのだから、もう入っていないことにする ── 状態を正しく保つために書かれています。
なぜ、わざわざ空に戻すのか
プログラムが「どこまでが有効な値か」を、値そのもので表しているからです。
0 で埋めてしまうと、本当に 0 が入っている箱と区別できません。未定義なら「入っていない」とはっきり分かります。網掛けや空欄で図示されるのは、この状態です。
配列にも、未定義の箱がある
配列は箱ごとに未定義かどうかが決まります。実際の出題では、この形がよく出ます。
出典:令和7年度 問3/令和6年度 問4/令和7年度 問5(いずれもプログラムの一部)
大域: 整数型の配列: stack ← {4, 3, 未定義の値, 未定義の値}
整数型の配列: work ← {(n1 + n2)個の 未定義の値}
実数型の二次元配列: result ← {row行col列の 未定義の値}
1つ目は途中まで埋まっている配列。2つ目と3つ目は場所だけ先に取って、中身はこれから入れるという形です。G4-2 で見た「◯個の △」の △ に 未定義の値 を置いたものです。
{4, 3, 未定義の値, 未定義の値} の要素数は 4 です。中身が入っている箱だけを数えるのではありません。
「いくつ入っているか」を知りたいときは、別の変数がそれを持っています。令和7年度 問3 では stackPos がその役です。
次の2行を実行したあと、aの要素数 と a の中身はどうなっていますか。配列の要素番号は1から始まります。
整数型の配列: a ← {4, 7, 1}
a[2] ← 未定義の値
未定義かどうかを、条件で調べる
未定義であること自体を、if の条件にできます。
if (a[i] が 未定義)
a[i] にまだ値が入っていなければ、条件が成り立ちます。◯◯ が 未定義 という日本語の書き方です。= や ≠ は使いません。
(令和8年度 基本情報技術者試験 科目B 公開問題 問4)
if ( a が 未定義)
枠で囲んだ a が空欄です。が 未定義 の条件が、空欄つきで出題されています。
未定義が出てきたときの手順
- その変数(または箱)に、まだ値を入れる行が実行されていないかを確かめる
- 宣言の
{ }の中に未定義の値が書かれていないかを見る が 未定義の行があれば、そこで値が入っているかどうかを調べていると読む
未定義の値は return で返されることもあり(令和7年度 問3)、配列に未定義が残るかどうかが問われることもあります(サンプル問題 問11)。ただし、未定義と計算・比較した結果は問われません。記述形式に決められていないからです。
次のプログラムを実行したあと、a の中身はどうなっていますか。配列の要素番号は1から始まります。
整数型の配列: a ← {6, 2, 未定義の値, 9}
整数型: i
for (i を 1 から aの要素数 まで 1 ずつ増やす)
if (a[i] が 未定義)
a[i] ← 0
endif
endfor
1行ずつ動かして確かめる
変数と配列の両方で、未定義 → 値が入る → また未定義という流れを見てください。
未定義 → 値が入る → また未定義
当サイトオリジナルの例題
ループ開始前
配列
いま計算していること
変数の状態
出力
トレース表(進めると1行ずつ積み上がります)
つまずきポイントまとめ
| まちがえ方 | 正しい理解 |
|---|---|
| 未定義を「0が入っている」と思う | 何も入っていない状態。0 は立派な値 |
未定義の値 の代入をエラーだと思う |
正典に定められた書き方。入れた値を消せる |
| 未定義の箱を要素数から外す | 要素数は用意した箱の数。中身の有無は関係ない |
未定義を = で比べようとする |
◯◯ が 未定義 という日本語の書き方を使う |
| 未定義と計算・比較した結果を考えてしまう | 記述形式に定めが無く、問われない。未定義かどうかは が 未定義 で調べる |
次に読む
この記事で引用した資料
- 擬似言語の記述形式 IPAが公開している科目Bの公開問題・サンプル問題(PDF)の冒頭に掲載。名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 基本情報技術者試験 科目B サンプル問題(2022年12月26日公開)
- 令和6年度 基本情報技術者試験 科目B 公開問題(2024年7月5日公開)
- 令和7年度 基本情報技術者試験 科目B 公開問題(2025年7月4日公開)
- 令和8年度 基本情報技術者試験 科目B 公開問題(2026年7月1日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。
シミュレータと練習問題は当サイトのオリジナルです。


