地特四等申論題
111年
[統計] 資料處理概要
第 一 題
📖 題組:
二、設 PFExp 為一字串,描述著一個以後置運算式(postfix expression)表示之數學運算式,例如 PFExp =“62/3-42*+”。當中每一個運算元(operand)皆僅為一個位數整數,且只有‘+’、‘-’、‘*’、‘/’四種可能運算子(operator)。 (一)寫出一演算法(int)postfix_math(string PFExp),利用堆疊(Stack)計算該後置運算式,並傳回該運算結果。(15 分) (二)以您所設計之演算法,來計算數學運算式 PFExp =“62/3-42*+”。寫出在執行過程中每一步驟 Stack 及 PFExp 的內容。(10 分) 以下是您可能會用到的副程式: (int)POPStack(Stack):移除 Stack 中最前面的整數,並傳回被移除的整數。 PUSHStack(Stack, V):將整數 V 放入 Stack 的最前面。 (int)DECV(char C):將一字元 C 轉成一整數,並傳回該整數。 (char)First_Char(String PFExp):移除 PFExp 中最前面的字元,並傳回該字元。 (Boolean)EMPTY(String PFExp):如 PFExp 為一空字串時,傳回 TRUE,否則傳回 FALSE。
二、設 PFExp 為一字串,描述著一個以後置運算式(postfix expression)表示之數學運算式,例如 PFExp =“62/3-42*+”。當中每一個運算元(operand)皆僅為一個位數整數,且只有‘+’、‘-’、‘*’、‘/’四種可能運算子(operator)。 (一)寫出一演算法(int)postfix_math(string PFExp),利用堆疊(Stack)計算該後置運算式,並傳回該運算結果。(15 分) (二)以您所設計之演算法,來計算數學運算式 PFExp =“62/3-42*+”。寫出在執行過程中每一步驟 Stack 及 PFExp 的內容。(10 分) 以下是您可能會用到的副程式: (int)POPStack(Stack):移除 Stack 中最前面的整數,並傳回被移除的整數。 PUSHStack(Stack, V):將整數 V 放入 Stack 的最前面。 (int)DECV(char C):將一字元 C 轉成一整數,並傳回該整數。 (char)First_Char(String PFExp):移除 PFExp 中最前面的字元,並傳回該字元。 (Boolean)EMPTY(String PFExp):如 PFExp 為一空字串時,傳回 TRUE,否則傳回 FALSE。
📝 此題為申論題,共 2 小題
小題 (一)
寫出一演算法(int)postfix_math(string PFExp),利用堆疊(Stack)計算該後置運算式,並傳回該運算結果。(15 分)
思路引導 VIP
計算後置運算式(Postfix)的核心觀念是「利用堆疊暫存運算元」。掃描字串時,遇到數字便轉為整數推入堆疊;遇到運算子便連續從堆疊彈出兩個運算元(注意:先彈出者為右運算元,後彈出者為左運算元)進行計算,並將結果再推回堆疊,最終堆疊僅剩的值即為解答。
小題 (二)
以您所設計之演算法,來計算數學運算式 PFExp =“62/3-42*+”。寫出在執行過程中每一步驟 Stack 及 PFExp 的內容。(10 分)
思路引導 VIP
看到後置運算式(Postfix)求值,應立即聯想到「由左至右掃描字串:遇到數字即入疊(PUSH),遇到運算子即出疊(POP)兩次進行計算,再將結果入疊」。作答時務必以條列或表格方式,清晰呈現每一步的剩餘字串、讀取字元與堆疊狀態,並注意運算子取出時的左右運算元順序(後出疊者為左運算元)。