試卷征集
加入會員
操作視頻

為四則運算式“6+(8-2)*2÷3”轉(zhuǎn)逆波蘭表達(dá)“682-2*3÷+”設(shè)計算法,編程實現(xiàn)。
分析:在數(shù)學(xué)運算表達(dá)式中,運算符總是置于與之相關(guān)的兩個運算對象之間,在計算結(jié)果時,要考慮括號、運算符號的優(yōu)先性。為了程序?qū)崿F(xiàn)的方便,波蘭邏輯學(xué)家J.Lukasiewicz提出了另一種表示法,將運算符置于其運算對象之后,沒有括號,不用考慮運算符號的優(yōu)先性。這種表達(dá)式稱為后綴表達(dá)式,又叫逆波蘭表達(dá)式。
如表達(dá)式“682-2*3÷+”是四則運算式“6+(8-2)*2÷3”的逆波蘭表達(dá)式。為了處理方便,規(guī)定表達(dá)式中的數(shù)均為小于10的正整數(shù),運算符為+、-、*、÷。
(1)抽象建模
設(shè)計兩個棧bds、fh,棧bds用來存放表達(dá)式,棧fh用來暫時存放運算符。從左往右掃描四則運算式,遇到數(shù)字時,入棧bds;遇到運算符號時,根據(jù)運算符號的優(yōu)先級設(shè)計進(jìn)棧與出棧。
四則運算式“6+(8-2)*2÷3”轉(zhuǎn)換規(guī)則的模擬過程如表所示:
菁優(yōu)網(wǎng)
結(jié)合表格的操作過程,用棧bds和棧fh記錄每個操作后的棧內(nèi)情況(見圖),那么在操作2中棧fh里有內(nèi)容為
+(-
+(-
(請從棧底到棧頂順序書寫)。
菁優(yōu)網(wǎng)
(2)設(shè)計算法
基于問題的抽象與建模,解決該問題的主要算法描述如下:
從左往右遍歷四則運算式s(設(shè)中間變量為ch):
1)當(dāng)ch是數(shù)字,直接入棧bds;
2)當(dāng)ch是運算符:
a.若ch為左括號時,直接入棧fh;
b.若ch為右括號時,則將棧fh元素彈出,壓入棧bds,直到遇到左括號(左括號只
彈出,不壓入棧bds);
c.若ch為其它運算符時,如果運算符ch優(yōu)先級大于棧fh中棧頂元素的優(yōu)先級(或棧fh為空),直接入棧fh;否則,將棧fh元素依次彈出,并壓入棧bds,直到運算符ch優(yōu)先級大于棧fh中棧頂元素的優(yōu)先級(或棧fh為空);
3)將棧bds中元素依次出棧,即為該四則運算s的后綴表達(dá)式。
(3)編寫程序
實現(xiàn)上述功能的Python代碼如下,請在橫線處填入合適代碼。
菁優(yōu)網(wǎng)

【考點】棧的應(yīng)用
【答案】+(-
【解答】
【點評】
聲明:本試題解析著作權(quán)屬菁優(yōu)網(wǎng)所有,未經(jīng)書面同意,不得復(fù)制發(fā)布。
發(fā)布:2024/11/29 21:0:1組卷:17引用:2難度:0.3
相似題
  • 1.一個序列的出棧順序為1,2,3,4,5,則該序列的入棧順序不可能為(  )

    發(fā)布:2024/11/25 7:0:1組卷:9引用:1難度:0.5
  • 2.數(shù)字1,2,3依次進(jìn)棧,則不可能的出棧順序是( ?。?/h2>

    發(fā)布:2024/11/28 22:30:1組卷:8引用:2難度:0.5
  • 3.一個棧的入棧序列為1,2,3,4,5,其出棧序列為sl,s2,s3,s4,s5。若s2是3,則s1不可能是( ?。?/h2>

    發(fā)布:2024/12/10 20:0:2組卷:15引用:4難度:0.5
小程序二維碼
把好題分享給你的好友吧~~
APP開發(fā)者:深圳市菁優(yōu)智慧教育股份有限公司| 應(yīng)用名稱:菁優(yōu)網(wǎng) | 應(yīng)用版本:5.0.7 |隱私協(xié)議|第三方SDK|用戶服務(wù)條款
本網(wǎng)部分資源來源于會員上傳,除本網(wǎng)組織的資源外,版權(quán)歸原作者所有,如有侵犯版權(quán),請立刻和本網(wǎng)聯(lián)系并提供證據(jù),本網(wǎng)將在三個工作日內(nèi)改正