- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算术运算式.ppt
算術運算式 組成 一個算術運算式的組成 運算元(Operand) 運算子(Operator) 間隔符號(delimiter,如括號)。 例如A/B**C+D*(E-A)*B; 其中A、B、C、D為運算元 +、-、*、/為運算子 ()為間隔符號。 以C語言為例,運算式中包含下列三種符號: 運算元(operand):0,1,2,3,… 運算子(operator): +,-,*,/,**,,=, =, ++, !=, ++, --, =, +=, … 間隔符號(delimiter):(,) 運算原則 括號內先處理 優先權較高的運算子先執行 同優先權者,則由其結合性,來決定是由左而右,還是由右而左執行。 C語言運算子的優先次序關係如下: 運算式表示法 中序法(infix) 前序法(prefix) 後序法(postfix) 中序法(infix) 運算元1 運算子 運算元2 將運算子置於兩運算元中間之表示法。例如:a+b 缺點:電腦無法一次依序讀取運算式,因運算式可能含有括號,且運算子優先順序不同 前序法(prefix) 運算子運算元1 運算元2 將運算子置於運算元的最前面之表示法。例如:+ab 後序法(postfix) 運算元1 運算元2 運算子 將運算子置於兩運算元之後之表示法;例如:ab+ 此法又稱為反波蘭記號法(RPN)。其優點在於不必使用括號,且運算子不具優先權。 算術運算式的轉換 括號法 堆疊法 二元樹法 括號法--中序式轉換成前序及後序 a×b+c×d 後序式(postfix):ab×cd×+ 1.先用括號將優先順序分出來 ((a×b)+(c×d)) 2.將運算子移到最接近且有括住此運算子的右括號左邊,則依優先順序為: ((ab×)+(cd×)) ((ab×)(cd×)+) 3.把括弧全部拿掉,即為所得。 ab×cd×+ 前序式(prefix): +×ab×cd 1.先用括號將優先順序分出來 ((a×b)+(c×d)) 2.將運算子移到最接近且有括住此運算子的左括號右邊,則依優先順序為: ((×ab)+(×cd)) (+(×ab)(×cd)) 3.把括弧全部拿掉,即為所得。 +×ab×cd 括號法的轉換規則 根據運算子的優先權及結合性,將所有的數學式加上完整的括號 將所有運算子移至相對應的左括號後面,即可得前序式(Prefix),若運算子移至右括號的後面,則可得後序式(Posfix) 去除所有的括號 範例說明(一):括號法 [EX1] 將 A*B/C 化為後序表示式 [SOL] ( ( A * B ) / C) ( ( A * B ) / C) =( ( A B ) * C ) / AB*C/ [EX2] 將A-B/C+D*E-F%G化成後序表示式 [SOL] ( ( ( A - ( B / C ) ) + ( D * E ) ) - ( F % G ) ) ( ( ( A - ( B / C ) ) + ( D * E ) ) - ( F % G ) ) A B C / - D E * + F G % - 堆疊法--中序式轉換成前序及後序 由左而右每次讀入一個字元(Token)---(後序式)由右而左每次讀入一個字元(Token)---(前序式) 判別字元,若為運算子(operand),則比較優先權;若堆疊中最頂端(Top)之運算子的優先權比正在處理的運算子的優先權高,則將堆疊內的運算子pop出來;反之,則將運算子push到堆疊內。 若是相等時,就將堆疊中優先權順序等於或小於正在處理的運算子,依序pop出來,再將處理中的運算子push進去。 規則 由左而右讀進中序運算式的每個字元(Token) 判別字元,若為運算元(operand),則直接輸出。 判別字元,若為運算子(operator),則若Token為”(” ,則直接加入堆疊頂端。若Token之優先權 (ICP, In-Coming Priority) 高於堆疊頂端之優先權 (ISP, In-Stack Priority),則直接加入堆疊頂端。若Token之優先權 (ICP) 小於或等於於堆疊頂端之優先權(ISP),則將堆疊中之運算子自頂端逐一取出並輸出,直到堆疊頂端之運算子優先權低於Token,再將此Token放入堆疊中。 若Token為”)”,則將堆疊中之運算子自頂端逐一取出並輸出,直到取出對應之”(”為止,但”(”不須輸出。注意: ”)”永遠不會被放入堆疊中。 若字串結束(end of string, eos),則將堆疊中所有運算子自頂端逐一取出並輸出,直到堆疊空了。 範例說明(二):堆疊法 中序運算式轉換為後序運算式 [EX1] 試將下列中序運算式 (infix) 轉換為後序運算式 (postfix):
原创力文档


文档评论(0)