您現在的位置是:首頁 > 攝影首頁攝影

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

由 CSDN 發表于 攝影2022-12-17
簡介Caculate()函式設計(棧為Node棧)1)遍歷表示式,遇到的數字首先放入棧中2)接著讀到運算運算子如“+”,則彈出棧頂元素和下一個元素,執行相應的運算操作,並將計算結果壓入到棧中

如何判斷是負號還是減號

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

作者 | 天才程式YUAN

責編 | 夕顏

頭圖 | CSDN 下載自東方 IC

前記

女朋友說:“高數好難,看我最近挺辛苦的,你送我一個禮物給我,讓我開心一下吧。你猜猜我想要什麼。”

我想了半天,從書到鞋子到電子產品最後到生活用品,感覺什麼都不缺,然後和她說:“你說要送啥,我就送啥吧”

她堅持要我猜:“不行,你一定要說一個禮物,並且這個禮物要你親手做的”

於是,我認真了起來,拿起手機,上淘寶逛了幾分鐘,但還是沒能想出來缺點什麼,最後實在沒辦法了:“這樣吧,如果你實在想讓我送東西,那我幫你寫一個計算器吧”

文章的標題只是噱頭,作為熱愛交流技術的學習者,我們應該腳踏實地,所以我會保證文章的內容都是乾貨!

設計原理

根據輸入中綴算術表示式,利用棧幀結構,實現轉換成字尾表示式輸出,再對該字尾表示式求值計算輸出結果。最終設計出一個計算器。

適用範圍:+ - * / % 整數 小數 負數

設計思想

邏輯設計

1。 建立兩個棧,棧stack和棧Node

stack棧用於儲存字元陣列,以字元形式儲存中綴表示式的元素。

Node棧用於儲存雙精度浮點型的陣列,用於儲存中綴表示式的元素值和各元素運算操作後的值。

2。 設計以下兩個函式和相應的入棧出棧操作。

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

Mtf_function()函式設計

(棧為stack)

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

(1)如果遇到運算元,直接將其輸出。

(2)如果遇到運算子,則我們將其放入到棧中,遇到左括號時將其放入棧中。

(3)如果遇到一個右括號,則將棧元素彈出,將彈出的運算子輸出直到遇到左括號為止。注意,左括號只彈出並不輸出。

(4)如果遇到任何其他的運算子,如(“+”, “*”,“(”)等,從棧中彈出元素直到遇到發現更低優先順序的元素(或者棧為空)為止。彈出完這些元素後,才將遇到的運算子壓入到棧中。有一點需要注意,只有在遇到“ ) “的情況下我們才彈出” ( “,其他情況我們都不會彈出” ( ”。

(5)如果讀到了輸入的末尾,則將棧中所有元素依次彈出。

Caculate()函式設計

(棧為Node棧)

1)遍歷表示式,遇到的數字首先放入棧中

2)接著讀到運算運算子如“+”,則彈出棧頂元素和下一個元素,執行相應的運算操作,並將計算結果壓入到棧中。

3)讀到下一個元素,將其直接放入棧中。

4)讀到下一個元素如“”,彈出棧頂元素和下一個元素,執行85,執行相應的運算操作,並將計算結果壓入到棧中……以此類推。最後求的值存在棧頂上。

對於小數點的處理演算法

原理:先將小數化為整數,然後除以10的相應權重。建立一個迴圈,令小數的值sum初始化0,10的相應權重j=0,判斷小數點後的字元陣列元素是否屬於0-9,若是,將小數點後移,sum = sum * 10 + 元素所對應的值,10的相應權重j加一,直到下一個元素不屬於0-9。

具體演算法如下

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

對於負號的處理

負號的出現位置是字元陣列的第一個元素或左括號後面的元素。為避免與減號“-”混淆,透過判斷字元陣列的第一個元素或左括號後面的元素是否為“-”找出負號,並替換成“M”。中綴轉字尾時若元素為“M”則輸出“-”。計算字尾的值時若元素為“M”,則之後的元素值(包括小數)轉換為相反數後進行操作。

主程式流程圖和各模組呼叫關係

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

物理設計

1。 基於在記憶體開闢連續儲存空間陣列實現,C宣告定義字元棧幀結構,包含字元陣列,用於中綴轉字尾表示式

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

2。 相應的節點的含義

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

3。 進出棧操作

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

4。 C宣告定義整型棧幀結構,包含整型陣列,用於計算字尾表示式求值。

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

5。 相應的節點的含義

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

6。 進出棧操作

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

測試

1。 測試用例

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

2。 測試結果

女朋友學高數,我花了 15 分鐘用棧給她寫了一個計算器|原力計劃

原始碼(帶註釋)

程式碼寫的是C語言版,後續有時間會補上java版

github程式碼連結:https://github。com/1170300826

原文連結:

https://blog。csdn。net/JAck_chen0309/java/article/details/104841005

作為“百萬人學AI”的重要組成部分,2020

AIProCon 開發者萬人大會

將於

6月26日

透過線上直播形式,讓開發者們一站式學習瞭解當下 AI 的前沿技術研究、核心技術與應用以及企業案例的實踐經驗,同時還可以線上參加精彩多樣的開發者沙龍與程式設計專案。參與前瞻系列活動、線上直播互動,不僅可以與上萬名開發者們一起交流,還有機會贏取直播專屬好禮,與技術大咖連麥。

評論區留言入選,可獲得價值299元的「2020 AI開發者萬人大會」線上直播門票一張。 快來動動手指,寫下你想說的話吧