程式設計基礎(虛擬碼追蹤)
下列程式在元素數為 n 的陣列 a 中尋找值 x,並把找到的元素編號求到 i。陣列的元素編號從1開始。and 與 or 在只看左側的式子就能決定結果時,不評估右側的式子。【a】中填入的條件式中,在 x 不在 a 中時會參照到範圍外 a[n + 1] 的是下列何者?
整數型: i ← 1
while (【a】)
i ← i + 1
endwhile
- Aa[i] ≠ x and i ≦ n
- Bi ≦ n and a[i] ≠ x
- Cnot (i > n or a[i] = x)
查看答案與解析
正確答案:A. a[i] ≠ x and i ≦ n
若 x 不在 a 中,i 會增加到 n + 1 後再判斷條件。i ≦ n and a[i] ≠ x 中,左側的 i ≦ n 為 false,因此不評估右側的 a[i],不會參照範圍外。not (i > n or a[i] = x) 也在 i > n 為 true 的時點就決定了 or 的結果,因此不評估 a[i]。a[i] ≠ x and i ≦ n 則會先評估 a[n + 1]。依賴短路求值時,要把範圍的確認寫在左側。
- A. 正確。i = n + 1 時,在確認範圍之前就評估 a[n + 1]。
- B. 左側的 i ≦ n 為 false 時不評估右側,因此不會參照範圍外。
- C. i > n 為 true 的時點就決定了 or 的結果,不會評估 a[i]。