初考-統計資料處理大意104 年第 11 題單選題
二維陣列 D 中,若 D(1,4)的位址是 1111(10),D(3,4)的位址是 1125(10),則 D(6,1)的位址在:
A1135(10)
B1136(10)
C1142(10)
D1143(10)正確答案
D正確答案
利用已知兩點座標的位址差值,推導出陣列為「以列為主 (Row-major)」且每列佔 7 個單位,再利用相對位置快速求出目標位址。
為什麼答案是 D
由 D(1,4)=1111, D(3,4)=1125 可知,增加 2 列位址增加 14,推得 1 列長度為 7。D(6,1) 相較於 D(1,4),列數 +5,行數 -3。位址 = 1111 + 5*(7) + (-3)*(1) = 1143。
載入中…
完整詳解
Pro · 無限重點 利用已知兩點座標的位址差值,推導出陣列為「以列為主 (Row-major)」且每列佔 7 個單位,再利用相對位置快速求出目標位址。
D(3,4) 與 D(1,4) 差 2 列,位址差 14 (1125-1111),故 1 列佔 7 單位。D(6,1) 比 D(1,4) 多 5 列、少 3 行,位址 = 1111 + (5 × 7) - (3 × 1) = 1143。
逐選項分析
A✕
此為錯誤的計算結果。若未正確推導出每列的元素個數(N=7)或誤用以行為主(Column-major)公式,可能會算出錯誤數值。
B✕
此為錯誤的計算結果。陣列位址計算需精準掌握列與行的偏移量,任何加減錯誤皆會導致偏離正確答案。
C✕ 陷阱
若考生在計算 D(6,1) 與 D(1,4) 的相對位置時,行數偏移量算錯(例如少減了 1),可能會得到相近但不正確的答案。
D✓ 正確
由 D(1,4)=1111, D(3,4)=1125 可知,增加 2 列位址增加 14,推得 1 列長度為 7。D(6,1) 相較於 D(1,4),列數 +5,行數 -3。位址 = 1111 + 5*(7) + (-3)*(1) = 1143。
二維陣列記憶體位址計算 (假設 1-based, 總行數 N)
| 儲存方式 | 位址公式 Loc(i, j) | 相對位移速算法 | 常見語言 |
|---|
| 以列為主 (Row-major) | Base + [(i-1) × N + (j-1)] × w | ΔLoc = (Δi × N + Δj) × w | C, C++, Pascal |
| 以行為主 (Column-major) | Base + [(j-1) × M + (i-1)] × w | ΔLoc = (Δj × M + Δi) × w | Fortran, MATLAB |
題目未明示為 Row-major 或 Column-major 時,必須先用已知條件測試。若假設為 Column-major 會發現算不出整數解或選項無對應答案,藉此反推本題必為 Row-major。此外,計算相對位移時,行與列的增減符號極易弄錯。