地特四等申論題
111年
[統計] 資料處理概要
第 一 題
📖 題組:
四、以下為某種程式語言的pseudocodes,其中main()為主程式,p(int x, int y, int z)為被呼叫的副程式。 main( ) { x = 2; y = 5; p(x, y, 3); print x, y} p(int y, int x, int z) { x = x+z; z = x+1; x = y+z; y = z;} (一)若副程式是以傳名呼叫(passed by name)法,則主程式印出的結果為何?(3 分) (二)若副程式是以傳址呼叫(passed by reference)法,則主程式印出的結果為何?(3 分) (三)若副程式是以傳值呼叫(passed by value)法,則主程式印出的結果為何?(3 分)
四、以下為某種程式語言的pseudocodes,其中main()為主程式,p(int x, int y, int z)為被呼叫的副程式。 main( ) { x = 2; y = 5; p(x, y, 3); print x, y} p(int y, int x, int z) { x = x+z; z = x+1; x = y+z; y = z;} (一)若副程式是以傳名呼叫(passed by name)法,則主程式印出的結果為何?(3 分) (二)若副程式是以傳址呼叫(passed by reference)法,則主程式印出的結果為何?(3 分) (三)若副程式是以傳值呼叫(passed by value)法,則主程式印出的結果為何?(3 分)
📝 此題為申論題,共 3 小題
小題 (一)
若副程式是以傳名呼叫(passed by name)法,則主程式印出的結果為何?(3 分)
思路引導 VIP
看到傳名呼叫(Call by Name),第一步應先將副程式內的形參以實參做純粹的「文字替換」,需特別注意主程式與副程式間變數名稱重疊(如x, y)的陷阱。第二步則要檢驗替換後的敘述是否合法,尤其是遇到「常數」做為實參傳入且被指派新值時,應敏銳點出左值(l-value)的錯誤問題。
小題 (二)
若副程式是以傳址呼叫(passed by reference)法,則主程式印出的結果為何?(3 分)
思路引導 VIP
面對參數傳遞題型,首要確認「傳遞機制」。傳址呼叫(Pass by Reference)的核心在於「記憶體共用」,需特別留意主程式傳入的引數與副程式接收的參數名稱是否故意交錯(如主程式的 x 傳給副程式的 y),建議利用下標標註法逐步追蹤每個位址的數值變化。
小題 (三)
若副程式是以傳值呼叫(passed by value)法,則主程式印出的結果為何?(3 分)
思路引導 VIP
看到「傳值呼叫(pass by value)」應立刻聯想到「拷貝」概念。主程式僅將變數的值複製給副程式的參數,因此副程式內部對參數的任何修改,皆不會影響主程式原有變數的記憶體內容。