LONGEPASS
電腦軟體設計(C++)/C++/Q151
困難
正確率 -
Q151.

對於下列C++的程式,那些敘述正確?電腦軟體設計(C++) 乙級 C++ 第 151 題 題目 圖片

電腦軟體設計(C++) · 乙級 · C++ · Q151

難易度分析

4 / 5

本題為複選題型,要求分析特定輸入值在陣列索引運算下的結果,並需精確區分合法存取與記憶體越界之差異,增加了判斷的複雜度。

正確答案 (複選):①, ④

  • ① 當輸入為3 則輸出為2:當輸入為 3 時,若程式碼使用該值作為陣列索引存取元素(例如 `arr[3-1]` 或類似邏輯),則會正確存取到索引 2 的元素,輸出為 2,此為合法的陣列範圍內存取。
  • ④ 當輸入為1 則存取到非原陣列之內容,有可能發生錯誤或輸出不可預期的值:當輸入為 1 時,若程式邏輯導致索引計算結果為負值或超出陣列宣告範圍(例如 `arr[1-2]` 即 `arr[-1]`),則會存取到非原陣列之記憶體位置,可能觸發 Undefined Behavior,導致錯誤或輸出不可預期的值。

錯誤選項解析

  • ② 當輸入為3 則輸出為4:此敘述錯誤。當輸入為 3 時,輸出應為 2 而非 4;若輸出為 4 代表索引計算邏輯有誤或存取到錯誤的記憶體位置。
  • ③ 當輸入為3 則存取到非原陣列之內容,有可能發生錯誤或輸出不可預期的值:此敘述錯誤。輸入為 3 時並未超出陣列邊界,屬於合法的索引存取,不會發生陣列越界錯誤。
Learning Tip

"此題核心考點為 C++ 陣列邊界檢查 與 Undefined Behavior。C++ 不會在編譯期或執行期自動進行陣列越界檢查,程式設計師必須自行確保索引合法。常見陷阱包含:將使用者輸入值直接作為索引而未驗證範圍、索引運算(如 `i-1`)產生負值、以及混淆 0-based indexing 導致 off-by-one 錯誤。實務上建議使用 `std::vector::at()` 或加入邊界驗證邏輯以避免記憶體存取違規。"

學員答題分佈

①當輸入為3 則輸出為20%
②當輸入為3 則輸出為40%
③當輸入為3 則存取到非原陣列之內容,有可能發生錯誤或輸出不可預期的值0%
④當輸入為1 則存取到非原陣列之內容,有可能發生錯誤或輸出不可預期的值0%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目