1樓:黃志光律師
a*b*c → **abc
a*b*c+c*d → +**abc*cd
(a+b)*((c-d)*e+f) → *+ab+*-cdef
上面是波蘭式,逆波蘭式如下:
a*b*c → ab*c*
a*b*c+c*d → ab*c*cd*+
(a+b)*((c-d)*e+f) → ab+cd-e*f+*
寫出(a+b)*((c-d)*e+f)轉換時棧的變化情況:【注意,右端為棧頂】
讀入(,入棧,棧中為(,輸出:(空);
讀入a,直接輸出,棧中為(,輸出:a;
讀入+,入棧,棧中為(+,輸出:a;
讀入b,直接輸出,棧中為(+,輸出:ab;
讀入),依次推出棧中的符號,直到遇見一個(【注意括號不輸出】,棧中為空,輸出:ab+;
讀入*,入棧,棧中為*,輸出:ab+;
讀入(,入棧,棧中為*(,輸出:ab+;
讀入(,入棧,棧中為*((,輸出:ab+;
讀入c,直接輸出,棧中為*((,輸出:ab+c;
讀入-,入棧,棧中為*((-,輸出:ab+c;
讀入d,直接輸出,棧中為*((-,輸出:ab+cd;
讀入),依次推出棧中的符號,直到遇見一個(【注意括號不輸出】,棧中為*(,輸出:ab+cd-;
讀入*,入棧,棧中為*(*,輸出:ab+cd-;
讀入e,直接輸出,棧中為*(*,輸出:ab+cd-e;
讀入+,【由於此時棧中的*的優先順序高於+,所以先將*退棧,然後+入棧】,棧中為*(+,輸出:ab+cd-e*;
讀入f,直接輸出,棧中為*(+,輸出:ab+cd-e*f;
讀入),依次推出棧中的符號,直到遇見一個(【注意括號不輸出】,棧中為*,輸出:ab+cd-e*f+;
此時讀入已經完畢,棧中還剩一個*,輸出:ab+cd-e*f+*完畢!
2樓:清雨梧桐夢
(a+b)*(c+d+e)=ac+ad+ae+bc+bd+be
算術表示式a+b*(c+d/e )轉為字尾表示式是?具體分析下!謝謝!! 20
3樓:59分粑粑
轉為字尾表示式是「abcde/+*+ 」。
a+b*(c+d/e) (a+(b*(c+(d/e))))通過根據運算子的優先順序將所有算術單元括起來,該表示式變為:(a+(b*(c+(d/e)))),然後轉換字尾表示式。
字尾:將操作符號移到相應的括號之後,然後變為:(a(b(c(de)/)+)*)+
除去括號後的表示式是字尾表示式:abcde/+*+
4樓:蘑菇西餐
轉化後的字尾表示式為:abcde/+*+
具體分析:
1、初始化一空棧,用來對符號進出棧使用。
2、第一個字元是a,輸出,後面是符號「+」,進棧。輸出的為a。
3、第三個字元是b,輸出,後面是符號「*」,進棧。輸出的為ab。
4、 第五個字元是「(」,依然是符號,因其只是左括號,還未配對,故進棧。輸出的為ab。
5、第六個字元是c,輸出,後面是符號「+」,進棧。輸出的為abc。
6、第八個字元是d,輸出,後面是符號「/」,進棧。輸出的為abcd。
7、後面是字元e,輸出,之後是「)」配對完成。進棧輸出的為abcde。
8、棧頂元素「(」出棧,「/」出棧,「+」出棧,「(」出棧,括號配對完成。
9、之後也是依次出棧,最後結果為:abcde/+*+。
擴充套件資料:
字尾表示式進行計算的通用做法:
可以先建立一個棧s 。從左到右讀表示式,如果讀到運算元就將它壓入棧s中,如果讀到n元運算子(即需要引數個數為n的運算子)則取出由棧頂向下的n項按操作符運算,再將運算的結果代替原棧頂的n項,壓入棧s中 。如果字尾表示式未讀完,則重複上面過程,最後輸出棧頂的數值則為結束。
字尾表示式:也叫逆波蘭表示法(reverse polish notation,rpn,或逆波蘭記法),是一種是由波蘭數學家揚·武卡謝維奇2023年引入的數學表示式方式,在逆波蘭記法中,所有操作符置於運算元的後面,因此也被稱為字尾表示法。逆波蘭記法不需要括號來標識操作符的優先順序。
實際意義:
1、當有操作符時就計算,因此,表示式並不是從右至左整體計算而是每次由中心向外計算一部分,這樣在複雜運算中就很少導致操作符錯誤。
2、堆疊自動記錄中間結果,這就是為什麼逆波蘭計算器能容易對任意複雜的表示式求值。與普通科學計算器不同,它對表示式的複雜性沒有限制。
3、逆波蘭表示式中不需要括號,使用者只需按照表示式順序求值,讓堆疊自動記錄中間結果;同樣的,也不需要指定操作符的優先順序。
4、逆波蘭計算器中,沒有「等號」鍵用於開始計算。
5、逆波蘭計算器需要「確認」鍵用於區分兩個相鄰的運算元。
6、機器狀態永遠是一個堆疊狀態,堆疊裡是需要運算的運算元,棧內不會有操作符。
7、教育意義上,逆波蘭計算器的使用者必須懂得要計算的表示式的含義。
5樓:莫道無情
轉為字尾表示式是abcde/+*+
a+b*(c+d/e) (a+(b*(c+(d/e))))按照運算子的優先順序對所有的運算單位加括號,式子變成了:(a+(b*(c+(d/e)))),然後轉換字尾表示式。
字尾:把運算子號移動到對應的括號後面,則變成了:(a(b(c(de)/)+)*)+
把括號去掉後的式子則為字尾表示式: abcde/+*+
6樓:匿名使用者
a+b*(c+d/e)
(a+(b*(c+(d/e)))) 按計算順序加上括號(a(b(c(de)/)+)*)+ 把運算子放到括號外面abcde/+*+ 去掉括號
7樓:匿名使用者
abcde/+*+
腦算,沒用程式設計實現!
字尾表示式是從左到右算。
我給你說說我的技巧吧,也許你就學會了。
1。先寫好順序 abcde
2。然後按運算順序符號 abcde/ abcde/+ abcde/+* abcde/+*+
ok解決。
心得技巧:這是按符號算,從第一個符號的左邊倆個數開始算。每個符號都是算符號左邊的兩個數!
sorry.
有一個字元型的表示式(a+b)*(c+d),要求得到a*c+a*d+b*c+b*d,請問用c++該如何處理 15
8樓:匿名使用者
設定兩個棧,一個資料棧,一個運算子棧,由左邊讀取,第一個"("寫入運算子棧
第二個a寫入資料棧
第三個「+」寫入一個運算子棧
第四個b 檢視下一位不是* / 而且運算子棧第一位是+號那麼就 「a」 「+」 出棧,計算出結果(假設為a)來後放回資料棧
第五個「)」出棧"(", 」a「 與」)「計算後a繼續放回資料棧。。。。
一時講不清,自己看書吧
9樓:武灼弦
以string(或char)儲存輸入的表示式,然後用isnum()(判斷字元是否為0-9)獲取a,b,c,d的值(可用+ -號做間隔),分別存取到一個整型陣列a[4]中(需要itoa()函式的呼叫,也可以使用強制型別轉換如int(a),如果abcd不大的話),然後x=a[1]+a[2],y=a[3]+a[4],最後列印字元a[0]*a[2]+……+a[1]*a[3];輸出結果為x*y。(該演算法比較簡單,沒有檢查輸入格式的正確性,你可以自己進行設定)
10樓:匿名使用者
沒太明白你的想法.... 我按我的想法說說:
比如(1 - 2)*(3 + 4)不就是3 + 4 - 6 - 8 嗎,每個數能確定,每個符號也能確定,還需要演算法嗎? 換成字元不也是一樣嗎。就是第幾個和第幾個的問題。
資料結構習題:下列表示式轉化成字尾式(a+b)*(c/(d-e)+f)+ab*c
11樓:
標準答案:ab+cde-/f+*abc*+
12樓:匿名使用者
ab*cde-/f+*abc**+
13樓:蘑菇飯資訊
abcd/e+*+
腦算,沒用程式設計實現!
字尾表示式是從左到右算。
我給你說說我的技巧吧,也許你就學會了。
1。先寫好順序 abcde
2。然後按運算順序符號 abcd/e abcd/e+ abcd/e+* abcd/e+*+
ok解決。
心得技巧:這是按符號算,從第一個符號的左邊倆個數開始算。每個符號都是算符號左邊的兩個數!
資料結構中寫出a+b*(c-d)-e/f的字首、中綴、字尾表示式。
14樓:匿名使用者
字首:-+a*b-cd/ef
中綴:a+b*(c-d)-e/f
字尾:abcd-*+ef/-
數學 邏輯問題的提問,一個數學 邏輯問題的提問
額我覺得應該是c 紅 白紅白 他們都看著前方 一開始,他們誰都不知道 d看著前面是白紅,無法判斷 c看著白,也無法判斷 a,b也不知道 但是,當有人問過全部人他們知不知道,那麼就會知道答案d看到前面不同,就會猶豫,答不知道。那麼d答不出來,說明前面兩頂帽子不同 由於b是白的,c就知道自己的是紅的 希...
VB中邏輯表示式怎麼表示,請問,VB中的邏輯運算子都是什麼意思?
不周期彗星 1 x y小於10 且 x y要大於0 x y 10 and x y 0 2 x.y都是正整數或都是負整數 int x x and int y y and sng x sng y 3 a.b之一為零但不得同時為零 a 0 or b 0 and a b 4 c1 c2 c3大於等於255或...
如何修煉強大的邏輯表達能力,如何提高表達能力和邏輯思維能力
提高邏輯表達能力,溝通也要懂套路,看懂你也可以成為口才高手 如何提高表達能力和邏輯思維能力 第二次回答這類問題了,我就直接複製了!提高表達能力 1.要敢說,大膽去說。不怕說錯就怕不敢說,說錯了可以發現問題然後就行。2.在人多的地方和人交流,學會和陌生人說話。3.和長輩或者老師交流。4.演講或者在在人...