擬似言語の2重ループ|表の全部の箱を順に見る読み方【基本情報技術者試験 科目B】

基本情報技術者試験

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-08-21

前回は、表の箱を1つ指す書き方を見ました。全部の箱を順に見たいときは、for を2つ重ねます。重ねるだけで新しい記号は出てきませんが、内がわがどう動くかを取り違えると、順番も回数も合わなくなります。

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重ループの回数を数える手順

  1. 外がわの制御記述だけを見て、何周するかを出す
  2. 内がわの制御記述だけを見て、何周するかを出す
  3. いちばん内側の行が実行される回数=外 × 内
  4. 外がわの直下にあって内がわの外にある行があれば、それは外の回数だけ実行される

4番目を見落としやすいので、字下げの深さで、どこに置かれた行かを先に確かめてください。

内がわの変数は、毎回 1 に戻る

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 が内がわ。字下げの深さで確かめる
外の直下の行も内の回数だけ動くと思う 内がわの外にある行は、外の回数だけ実行される

次に読む

この記事で引用した資料

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

本文の例題と練習問題は当サイトのオリジナルです。

Copied title and URL