下列程式原本打算用兩個指派敘述交換 x 與 y 的值。執行後 x 與 y 的值為下列何者?
- Ax = 3, y = 3
- Bx = 7, y = 3
- Cx = 7, y = 7
執行以考試虛擬碼撰寫的程式,逐行確認變數的變化。支援 if、while、for、陣列、函式與遞迴呼叫。輸入題目的程式,與自己的追蹤結果(手動追蹤的結果)比較看看。可使用整數型、for (i 從 1 到 n 每次加 1)、a的元素數、輸出 等中文關鍵字。
收藏與最近使用的工具只儲存在這個瀏覽器(localStorage)中。
這是支援考試虛擬碼主要寫法的簡易學習用直譯器,細節可能與實際考題的寫法不同。變數表顯示當時正在執行的函式中的變數(在函式外宣告的變數也能在函式中使用)。陣列以參照方式傳遞。
其他輸入維持目前的值,只讓選擇的輸入在目前值的 1/4 到 4 倍之間變化時的結果。紅點是目前的值。
日本基本資訊技術人員考試的科目 B,以閱讀用虛擬碼寫成的程式,回答執行結果或空格中應填入的字句為主。為此,逐行追蹤程式、把變數值如何變化寫成表格加以確認的追蹤能力不可或缺。這個工具可以把自己手動追蹤的結果,與實際執行的結果逐行比較。
在虛擬碼中,變數像「整數型: x」一樣加上型別宣告,值的指定則像「x ← 1」一樣以箭頭表示。條件分支寫成 if … elseif … else … endif,迴圈寫成 while … endwhile 或 for … endfor。陣列寫成 {1, 2, 3},元素以 a[1] 這種從 1 數起的編號指定。函式像「○整數型: f(整數型: n)」一樣宣告,以 return 回傳值。請注意,把 ÷ 的結果存入整數型變數時,小數部分會被捨去。
追蹤時,製作每個變數一欄的表格,每執行一行就填入改變後的值。迴圈要記得寫下每次的條件判斷,連最後條件為假而離開的那一次也要算進去。陣列的編號從 1 還是從 0 開始、迴圈的結束是「到」還是「小於」,常會造成結果差一次(差一錯誤)的錯誤。遞迴呼叫時,要意識到每一層呼叫都有各自的變數,並從最底層依序計算回傳值。
科目 B 常見的題材包括陣列的加總、最大值、排序(泡沫排序、選擇排序)、二元搜尋、最大公因數(輾轉相除法)、轉換為二進位、遞迴(階乘、費氏數列),以及用陣列實作堆疊或佇列的程式。選擇範例執行,在追蹤中確認變數的變化,再稍微改變條件或迴圈範圍,試試結果如何改變。
正確答案:A. a = 2, b = 3, c = 1
t ← a 把 a 原本的值1暫存到 t。a ← b 使 a = 2,b ← c 使 b = 3,最後的 c ← t 把暫存的1放入 c。3個值各往前移一個位置,因此 a = 2、b = 3、c = 1。若不使用 t 而寫成 c ← a,此時 a 已經是2,c 會變成2。
正確答案:B. 5
把 x 與 n 的值寫成追蹤表,可以看出每次重複時 x 依序變為 3、9、27、81、243,n 每次加1。x = 81 時 x < 100 仍成立,因此再執行一次,得到 x = 243、n = 5。下一次判斷時 x < 100 為偽,離開迴圈。條件共判斷6次,但迴圈內的處理只執行5次。
正確答案:A. 25
i 依序為 1、3、5、7、9,下一個值11超過終值10,迴圈結束。s = 1 + 3 + 5 + 7 + 9 = 25。for 迴圈在控制變數超過終值的時點就離開,不會以超過終值的值執行迴圈內的處理。
正確答案:A. 15
內層迴圈的 j 從 i 到5,因此 i = 1 時執行5次、i = 2 時4次、…、i = 5 時1次,合計 5 + 4 + 3 + 2 + 1 = 15。由於內層的初值隨外層變數 i 而變,次數並不是單純的 5 × 5。
正確答案:B. 6
內層迴圈為 j = 1〜i,只有 j 為奇數時才使 c 增加。i = 1 時為 j = 1 的1次,i = 2 時為 j = 1 的1次,i = 3 時為 j = 1、3 的2次,i = 4 時為 j = 1、3 的2次,合計 1 + 1 + 2 + 2 = 6。內層的處理總共執行 1 + 2 + 3 + 4 = 10 次,其中滿足條件的是6次。這是在重複中放入條件分支的控制結構的基本組合。
正確答案:A. 2
m 是到目前為止看過的最大元素的元素編號。i = 2 時 a[2] = 8 > a[1] = 3,因此 m = 2。i = 4 時 a[4] = 8 與 a[2] = 8 相等,> 不成立,m 不變。因此最大值有多個時,會留下最先出現的元素編號2。若把條件改成 ≧,則會變成最後出現的元素編號4。
支援變數與陣列的宣告、指定、if、while、do while、for、函式與程序、陣列的元素數與附加到尾端,以及算術、比較、邏輯運算。二維陣列、物件(類別)、位元運算符號等依題目定義的寫法,部分不支援。
÷ 是一般的除法,7 ÷ 2 為 3.5。存入整數型變數(或由整數型函式回傳)時會捨去小數部分,因此在「整數型: mid ← (1 + 8) ÷ 2」中,mid 為 4。餘數以 mod 求得。
執行的行數超過 2 萬時會停止並顯示錯誤。請確認 while 條件中使用的變數是否在迴圈中改變。
不會。程式只在這個頁面(瀏覽器)中執行,不會傳送到任何地方。