CO-P12|情報Ⅰ 対策問題
次のプログラムは、二次元配列で表した3人×2科目の点数から、1人ずつの合計を表示する。空欄【ア】に入るものはどれか。 (1) Ten = [[80, 70], [60, 90], [50, 40]] (2) i を 0 から 2 まで 1 ずつ増やしながら繰り返す: (3) ⎿ 表示する(【ア】) (表示: 150 → 150 → 90)
解答・解説を見る
正解: 1
正答
1
この問題のポイント
二次元配列の行・列の使い分け を問う問題です。
解説
二次元配列は「配列の中に配列が入った」表形式のデータです。Ten = [[80, 70], [60, 90], [50, 40]] は3行2列の表で、Ten[行][列] の順に添字を書きます。この問題では**行=人(3人)、列=科目(2科目)**という対応です。たとえば Ten[1][0] は「2人目の1科目め」=60。
空欄は求める出力から逆算します。表示したいのは「1人ずつの合計」なので、i番目の人の行 Ten[i] にある2つの科目 Ten[i][0] と Ten[i][1] を足せばよく、Ten[i][0] + Ten[i][1] が正解です。
トレースして出力と照合します。
i=0のとき: Ten[0][0]+Ten[0][1] = 80+70 = 150。
i=1のとき: Ten[1][0]+Ten[1][1] = 60+90 = 150。
i=2のとき: Ten[2][0]+Ten[2][1] = 50+40 = 90。
問題文の「150 → 150 → 90」と一致します。
選択肢2の Ten[0][i]+Ten[1][i] は「1人目の科目iと2人目の科目iの合計」、つまり科目ごとの集計になってしまいます。行と列を取り違えると、エラーにならずに「別の意味の集計」が動いてしまうのが二次元配列の怖さです。共通テストでは「人ごとの合計」「科目ごとの平均」のように行方向・列方向の両方の集計が問われるので、必ず i=0 などの具体値を代入して、意図した表の読み方になっているか検算しましょう。
選択肢の確認
1.○ i行(i番目の人)の2科目を合計。i=0で150となり出力と一致。
2.× 行と列が逆。科目別の集計(1人目と2人目の科目i)になる。
3.× Ten[i] は行(配列)そのもので、配列同士の加算は要素の合計ではない。
4.× i を使っていないので毎回 80+90=170 と同じ値になる。
ここだけは覚えよう
二次元配列は Ten[行][列] — どちらが人でどちらが科目かを先に確定 — 具体値の代入検算で行・列の取り違えを防ぐ。