程式設計基礎(虛擬碼追蹤)

下列程式在元素數為 n 的陣列 a 中尋找值 x,並把找到的元素編號求到 i。陣列的元素編號從1開始。and 與 or 在只看左側的式子就能決定結果時,不評估右側的式子。【a】中填入的條件式中,在 x 不在 a 中時會參照到範圍外 a[n + 1] 的是下列何者?

整數型: i ← 1
while (【a】)
  i ← i + 1
endwhile
  1. Aa[i] ≠ x and i ≦ n
  2. Bi ≦ n and a[i] ≠ x
  3. 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]。
練習這個領域 前往領域頁面

相關計算工具

程式設計基礎(虛擬碼追蹤)的其他題目

  1. 實數型的值以 IEEE 754 雙精度(binary64)表示,加法的結果捨入為最接近的可表示值。執行下列程式後 c 的值為下列何者?
  2. 類別 Counter 的每個實例各有一個整數型成員變數 count(建立時為0),方法 inc() 會將自己的 count 加1。執行下列程式後 x 的值為下列何者?
  3. 類別 Counter 的每個實例各有一個整數型成員變數 count(建立時為0),方法 inc() 會將自己的 count 加1。Counter 型的變數中存放的不是實例本身,而是指向實例的參照。執行下列程式後 x 的值為下列何者?
  4. 下列程式原本打算用兩個指派敘述交換 x 與 y 的值。執行後 x 與 y 的值為下列何者?
  5. 下列程式將3個變數的值依序傳遞。執行後 a、b、c 的值為下列何者?