同じ種類・同じ大きさのデータを連続して並べたデータ構造。各要素は添字(インデックス)で識別する。
A[3]・B[2,3] のほか、
丸カッコ A(3)・B(2,3) で書く流儀もある(本資料でも問題により両方が登場する。意味は同じ)。
試験では出題文の書き方に合わせて読めばよい。2次元は [行, 列]=(行, 列) の順。
| 説明 | |
|---|---|
| 静的配列 | 要素数をあらかじめ決めておく。超えて格納できない |
| 動的配列 | 実行中に必要に応じてサイズを増やせる |
Q1(H28春 問6)★2次元配列の値の計算
2次元の整数型配列 a の各要素 a(i, j) の値は 2i + j である。 このとき、a( a(1,1)×2 , a(2,2)+1 ) の値はいくつか。
正解:エ(19)
内側の a( , ) から先に計算するのがコツ。定義 a(i,j) = 2i + j にそのまま代入するだけ。
a(1,1) = 2×1 + 1 = 3a(2,2) = 2×2 + 2 = 6a(3×2, 6+1) = a(6, 7)a(6,7) = 2×6 + 7 = 19 → エ▼速解法:関数のような入れ子は「一番内側の括弧」から順に数値に置き換える。焦らず1段ずつ。
Q2(H27秋 問6)★2次元配列の要素の移動
配列 A を、ある規則で配列 B に移し替える流れ図がある。A(i,j) を B のどの位置へ移すと、B が「A を回転させた配置」になるか。
※図(配列の並び)は
こちらで確認。
正解:エ
▼解き方:全部覚えるのは無理。具体的な1マスの座標を選択肢に代入して合うものを探す。
例)A の [3,1] が B の [1,4] に移るなら、i=3, j=1 を代入して B(1,4) になる式を選ぶ → エ B(j, 7−i) = B(1, 4)。
Q3 ★アドレス計算
先頭要素 A[0] が 1000 番地、1要素の大きさが 4 バイトの1次元配列がある。A[10] の先頭アドレスは何番地か。
正解:ウ(1040 番地)
アドレス = 先頭 + 添字 × 要素の大きさ = 1000 + 10 × 4 = 1040。
配列が「連続して」並ぶからこの計算ができる(=ランダムアクセスが速い理由)。
ひっかけ:A[0] が先頭なので A[10] は「11 個目」だが、先頭からのずれ(オフセット)は添字 10 個ぶん。10×4=40 を足す。
▼ 解説つきの類題を探す:過去問道場・分野別「データ構造」
Q4 ★2次元配列のアドレス計算(行優先)
整数型(1要素 4バイト)の2次元配列 A[3][4](添字は 0 から)が、先頭 1000 番地から行優先(0行目を左から全部 → 1行目 → …の順)で連続格納されている。A[2][1] の先頭アドレスは何番地か。
正解:イ(1036 番地)
先頭からのずれ(要素数)= 行 × 1行の列数 + 列 = 2 × 4 + 1 = 9。
アドレス = 先頭 + ずれ × 要素の大きさ = 1000 + 9 × 4 = 1036。
▼速解法:2次元配列のアドレスは「行×列数+列」で1次元の位置に直す → ×要素サイズ。図で「9番目」と数えれば確実。
ひっかけ:ウ 1040 は A[2][1] を「10番目」と1から数えた誤り(0 から数える)。ア 1020 は行と列を逆(列優先)にした場合。
▼ 解説つきの類題を探す:過去問道場・分野別「データ構造」