基本情報技術者試験 科目B サンプル問題 問3の解説|配列の値を足し合わせて新しい配列を作る

基本情報技術者試験

科目B サンプル問題 問3難易度 ★擬似言語・配列・for最終更新 2026-09-22

プログラムは9行で、for が1つだけ。コードが何をしているかが分かれば解けます。この記事では、配列の中身が1行ごとにどう変わるかを見せながら、それを確かめていきます。

難易度 ★(当サイトの目安)── 同じ足し算を5周するだけ。4段階の決め方は科目B 最短合格の戦略にあります。

出題

出典:基本情報技術者試験 科目B サンプル問題 問3

次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。

関数makeNewArray は,要素数2 以上の整数型の配列を引数にとり,整数型の配列を返す関数である。関数makeNewArray をmakeNewArray({3, 2, 1, 6, 5, 4})として呼び出したとき,戻り値の配列の要素番号5 の値は となる。

〔プログラム〕

○整数型の配列: makeNewArray(整数型の配列: in)
  整数型の配列: out ← {}  /​/ 要素数0の配列
  整数型: i, tail
  outの末尾 に in[1]の値 を追加する
  for (i を 2 から inの要素数 まで 1 ずつ増やす)
    tail ← out[outの要素数]
    outの末尾 に (tail + in[i]) の結果を追加する
  endfor
  return out

解答群

ア 5イ 6ウ 9エ 11

オ 12カ 17キ 21

答えだけ先に見る

正解は カ(17)です。

この問題に出てくる記号

読めない記号があったときだけ開いてください。

擬似言語の記号 6コ の読み方をひらく
書き方 読み方
○整数型の配列: makeNewArray(整数型の配列: in) ここから関数が1つ始まるという印。整数の配列を1つ受け取って in という名前を付け、整数の配列を1つ返します
整数型の配列: out ← {} 整数の配列 out を用意し、中身が1つも無い状態(要素数0)にする
in[1] 配列 in の1番目の要素。要素番号は1から数えます
outの末尾 に ◯ を追加する out のいちばん後ろに ◯ を1つ付け足す。要素数が1つ増えます
for (i を 2 から inの要素数 まで 1 ずつ増やす)
endfor
i を 2, 3, 4, … と1ずつ増やしながら、あいだの行をくり返す。i が inの要素数 を超えたら終わり
return out out を返して、関数を終える

記号でつまずいたら、下の教科書から、先にそこだけ読んでください(G4 のような番号は、当サイトの擬似言語の教科書の第何回かを表します)。

コードは何をしているか ── out の後ろに1つずつ付け足す

このプログラムがしているのは、空の配列 out の後ろに、1つずつ値を付け足していくことだけです。in = {3, 2, 1, 6, 5, 4} で、はじめの3回を1行ずつ見ます。

1行ずつ実行すると、out はこう変わる

琥珀=読んだ値 / 緑=付け足した値

① for の前 ── in[1] をそのまま入れる

  整数型の配列: out ← {}  /​/ 要素数0の配列
  整数型: i, tail
  outの末尾 に in[1]の値 を追加する

in

13

22

31

46

55

64

out(前)

out{} 空

out(後)

13

out は空で始まり、in の1番目の 3 が、そのまま1番目に入ります。

② i = 2 の周 ── 後ろの 3 に in[2] の 2 を足す

    tail ← out[outの要素数]
    outの末尾 に (tail + in[i]) の結果を追加する

out(前)

13

変数

tail3

in

13

22

31

46

55

64

out(後)

13

25

outの要素数 は 1 なので、out[1] = いちばん後ろの 3 が tail へ。3 + 2 = 5 を後ろに付け足して、out は2つになりました。

③ i = 3 の周 ── 後ろの 5 に in[3] の 1 を足す

    tail ← out[outの要素数]
    outの末尾 に (tail + in[i]) の結果を追加する

out(前)

13

25

変数

tail5

in

13

22

31

46

55

64

out(後)

13

25

36

今度は要素数が 2 なので、out[2] = いちばん後ろの 5。5 + 1 = 6 を付け足します。tail が読む場所は、out が伸びるたびに1つ右へずれていきます。

i が 4、5、6 の周も、②③と同じ2行のくり返しです。for の前に1つ入れてあるので、i の値が、その周で作る out の番号になります。問われている5番目は、i が 5 の周でできます。

コードがしていること

tail は out のいちばん後ろの値。それに in[i] を足して、out の後ろへ付け足す ── これを i が 6 になるまでくり返します。

1周ずつ追って、要素番号5 の値を決める

見るのは、光っている行と、in と out の枡、tail の箱です。1周終わるたびに、いちばん下の表に1行ずつ積み上がります。

1行ずつ追う makeNewArray({3, 2, 1, 6, 5, 4})

出典:科目B サンプル問題 問3


ループ開始前

配列

▲ いま読んでいる▲ いま書いた

いま計算していること

まだ計算していません

変数の状態

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

できあがった out は {3, 5, 6, 12, 17, 21}。要素番号5 は 17 です。

表を縦に見ると、out の各要素は in を先頭からそこまで足した合計になっています。5番目なら 3 + 2 + 1 + 6 + 5 = 17。毎周、前の合計に次の1つを足して付け足しているので、こうなります。

答え合わせ

要素番号5 の 17 は、解答群の カ です。

取り違えやすいのは エ(11)です。tail を out の最後の値ではなく1つ前の in と読むと、5番目は in[4] + in[5]、つまり 6 + 5 = 11 になります。tail が読んでいるのは out のほうです。

次に読む

この問題でどこに手間取ったかで、行き先が変わります。

この記事で引用した資料

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

Copied title and URL