前回は、表の箱を1つ指す書き方を見ました。全部の箱を順に見たいときは、for を2つ重ねます。重ねるだけで新しい記号は出てきませんが、内がわがどう動くかを取り違えると、順番も回数も合わなくなります。
第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コンストラクタ
for の中に for を書く
2行3列の表を、全部出力してみます。
整数型の二次元配列: hyou ← {{10, 20, 30}, {40, 50, 60}}
整数型: r, c
for (r を 1 から hyouの行数 まで 1 ずつ増やす)
for (c を 1 から hyouの列数 まで 1 ずつ増やす)
hyou[r, c] を出力する
endfor
endfor
出力は 10、20、30、40、50、60。左上から右へ進み、行の終わりまで来たら次の行の左端へ移ります。文字を読むときと同じ順番です。
左上から右へ、行の終わりまで来たら次の行の左端へ
外がわ(r)1周=1行ぶん / 内がわ(c)外が1周するあいだに列数ぶん回る
外が r(行)、内が c(列)のときの順
| 1 | 2 | 3 | |
|---|---|---|---|
| 1 | 10 |
20 |
30 |
| 2 | 40 |
50 |
60 |
出力は 10、20、30、40、50、60。文字を読むときと同じ順番
回数は 行数 × 列数。2行3列なら6回
重なった for の動き方
外がわ(r)1周する = 1行ぶんを終える
内がわ(c)外が1周するあいだに、1 から列数まで最後までまわりきる
つまりr が1つ進むたびに、c は 1 からやり直します。これが2重ループのすべてです。
endfor が2つ並んでいるとき、先に来るほうが内がわです。for と endfor は内側から順に閉じます。字下げの深さを見れば、どの行がどちらの中にあるかが分かります。
hyou は 2行3列で、中身はこうなっています。
hyou の中身
1行目hyou[1,1]=10 hyou[1,2]=20 hyou[1,3]=30
2行目hyou[2,1]=40 hyou[2,2]=50 hyou[2,3]=60
この表を、外と内を入れ替えた次の2重ループで出力します。出力される順はどれですか。
for (c を 1 から hyouの列数 まで 1 ずつ増やす)
for (r を 1 から hyouの行数 まで 1 ずつ増やす)
hyou[r, c] を出力する
endfor
endfor
まわる回数は、行数 × 列数
内がわが外の1周ごとに最初からやり直すので、いちばん内側の処理が実行される回数はかけ算になります。
2重ループの回数を数える手順
- 外がわの制御記述だけを見て、何周するかを出す
- 内がわの制御記述だけを見て、何周するかを出す
- いちばん内側の行が実行される回数=外 × 内
- 外がわの直下にあって内がわの外にある行があれば、それは外の回数だけ実行される
4番目を見落としやすいので、字下げの深さで、どこに置かれた行かを先に確かめてください。
c は内がわの for が始まるたびに制御記述で決め直されます。前の行でいくつまで進んでいたかは関係ありません。
ただしループを抜けた直後の値は、1重のときと同じで終了値を外れた値です。hyouの列数 が 3 なら、内がわを抜けた c は 4 になっています。
次の2重ループで、処理 と書かれた行は何回実行されますか。
for (r を 1 から 3 まで 1 ずつ増やす)
for (c を 1 から 4 まで 1 ずつ増やす)
処理
endfor
endfor
次のプログラムで、"行" と "*" はそれぞれ何回出力されますか。
for (r を 1 から 3 まで 1 ずつ増やす)
"行" を出力する
for (c を 1 から 4 まで 1 ずつ増やす)
"*" を出力する
endfor
endfor
表を1マスずつ埋める
2重ループの使いどころは、読むことより埋めることです。空の表を用意して、[r, c] に1マスずつ書き込みます。
整数型の二次元配列: hyou ← {2行3列の 未定義の値}
整数型: r, c
for (r を 1 から hyouの行数 まで 1 ずつ増やす)
for (c を 1 から hyouの列数 まで 1 ずつ増やす)
hyou[r, c] ← r × c
endfor
endfor
追いかける前に ─ このプログラムは何をする?
やることは1つだけです。2行3列の表の全部のマスに、「行番号 × 列番号」を入れる。終わると、こうなります。
| 1列目 | 2列目 | 3列目 | |
|---|---|---|---|
| 1行目 | 1 | 2 | 3 |
| 2行目 | 2 | 4 | 6 |
1行目は 1×1、1×2、1×3。2行目は 2×1、2×2、2×3。九九の表の左上です。
この6マスがどの順に埋まっていくかが、2重ループの読みどころです。シミュレータを最後まで進めると、ちょうどこの表になります。
入れる値は r × c ── いま何行目・何列目にいるかそのものから作っています。未定義で用意した6マスが、順に埋まっていきます。
この形は、実際の出題でもそのまま出る
答えを入れる表を先に同じ大きさで作り、2重ループで1マスずつ埋めて、最後に返す。
入れる値の作り方が変わるだけで、骨組みはいつもこれです。
(令和7年度 基本情報技術者試験 科目B 公開問題 問5)
result[r, c] ← …
2重ループの中で result[r, c] に代入している、まさに同じ形です。入れる値の求め方は問題ごとに違いますが、埋まっていく順番はいま見たとおりです。
1マスずつ動かして確かめます。▲が付いた箱が、その周に書き込んでいるところです。
2重ループで、表を1マスずつ埋める
当サイトオリジナルの例題
ループ開始前
配列
いま計算していること
変数の状態
できあがった表
トレース表(進めると1行ずつ積み上がります)
つまずきポイントまとめ
| まちがえ方 | 正しい理解 |
|---|---|
| 回数を足し算で数える | 外 × 内。内がわは外の1周ごとに全部まわる |
| 内がわの変数が前の値から続くと思う | 内がわの for に入るたびに1 から決め直される |
| 外と内を入れ替えても同じだと思う | たどる順が変わる。回数だけは変わらない |
どの endfor がどれか分からなくなる |
先に来る endfor が内がわ。字下げの深さで確かめる |
| 外の直下の行も内の回数だけ動くと思う | 内がわの外にある行は、外の回数だけ実行される |
次に読む
この記事で引用した資料
- 擬似言語の記述形式 科目Bの公開問題・サンプル問題の各冊子に掲載。冊子上の名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 令和7年度 基本情報技術者試験 科目B 公開問題(2025年7月4日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
本文の例題と練習問題は当サイトのオリジナルです。

