CO-S37情報Ⅰ 対策問題

コンピュータとプログラミング思考・計算

配列 Data の最後の要素を取り出したい。要素数を返す関数「要素数(Data)」があり、添字が0から始まるとき、正しい式はどれか。

解答・解説を見る

正解: 1

正答

1

この問題のポイント

0始まり添字と末尾要素(off-by-oneエラー対策) を問う問題です。「末尾の添字=要素数-1」の関係を導けるかがカギです。

解説

添字が0から始まる配列では、「要素数」と「使える添字の範囲」が1つずれます。具体例で確かめるのが確実です。

  1. 要素数が5の配列を考える(例: Data = [10, 20, 30, 40, 50])
  2. 添字は 0, 1, 2, 3, 4 の5個 → 先頭は添字0、末尾は添字4
  3. 末尾の添字4は「要素数5 - 1」 → 末尾の添字 = 要素数 - 1
  4. よって末尾の要素は 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つずれ」は小さな例を書いて確かめる。

関連問題

CO-S36CO-S38