CO-S37|情報Ⅰ 対策問題
配列 Data の最後の要素を取り出したい。要素数を返す関数「要素数(Data)」があり、添字が0から始まるとき、正しい式はどれか。
解答・解説を見る
正解: 1
正答
1
この問題のポイント
0始まり添字と末尾要素(off-by-oneエラー対策) を問う問題です。「末尾の添字=要素数-1」の関係を導けるかがカギです。
解説
添字が0から始まる配列では、「要素数」と「使える添字の範囲」が1つずれます。具体例で確かめるのが確実です。
- 要素数が5の配列を考える(例: Data = [10, 20, 30, 40, 50])
- 添字は 0, 1, 2, 3, 4 の5個 → 先頭は添字0、末尾は添字4
- 末尾の添字4は「要素数5 - 1」 → 末尾の添字 = 要素数 - 1
- よって末尾の要素は Data[要素数(Data) - 1]
Data[要素数(Data)] と書くと、要素数5なら Data[5] を参照することになりますが、添字5の要素は存在しないため範囲外アクセスのエラーになります。「なんとなく要素数がそのまま末尾」と思い込むのがこの誤りの原因で、この種の1つずれのミスをオフバイワンエラーと呼びます。プログラミングで最も多いバグの一つです。
この関係はループの範囲設定でも重要です。「iを0から要素数(Data)-1まで」と書けば全要素をちょうど1回ずつ処理できます。令和8年度本試験のプログラムでも要素数関数が登場しており、共通テストでは「-1が付くか付かないか」を選ばせる形で狙われます。迷ったら要素数5の小さな例を書いて、添字が0〜4であることを確認しましょう。
選択肢の確認
1.○ 添字0始まりでは末尾の添字は要素数-1。
2.× Data[要素数(Data)]は存在しない添字で範囲外アクセスになる。
3.× +1はさらに範囲外へ進んでおり論外。
4.× Data[0]は先頭の要素で、末尾ではない。
ここだけは覚えよう
末尾の添字=要素数-1(0始まりの場合) — 「1つずれ」は小さな例を書いて確かめる。