程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 用Visual C# 實現四則混合運算

用Visual C# 實現四則混合運算

編輯:C#基礎知識

  本文是介紹使用Visual C#實現自動計算四則混合運算的一種方法,在.NET1.1框架中,還沒有包含全現成的類,不過,現在經過我們下文的介紹,大家完全可以自己寫一個,作用嘛,沒什麼,就是熟悉一下棧的用法,或者家裡有上小學的,可以寫一個程序給孩子練習一下四則混合運算也行,哈哈,廢話不多說了,講正題吧。

  出一個典型的算術題: (6+2*5)/4

  從題中,我們首先算 2*5=10 接下來算 6+10=16 最後算 16/4 =4 所以,結果是4

  計算機怎麼算?還好前輩給我們列出來一堆的算法,我們隨便選一個就可以了。

  第一種算法

  使用棧來解決,意思就是把不優極最低的壓到棧的最下面去,按照先進後出的原則,那麼最優先級最低的就是最後計算了。

  計算過程:

  我們建立兩個棧,一個是數據棧,一個是計算符號棧,以(6+2*5)/4為例子,看看倒底是怎麼計算的。

  假設:

  1)優先級

  符號之間的優先級如下:

  “(“ “)” -1

  “+”,”-” 0

  “*”,”/” 1

  數值越大,則越優先,同級別的比較時 先出現的優先。

  2)將”(”,”)”設為特殊運算符,即單目運算,兩鄰兩個運算符則可對消。

  3) 計算條件

  (1) 當前運算符不等於“”(特殊結束符)

  (2) 運算符棧裡的運行算個數>=1時

  (3) 出棧口的運算符優先級高於將要入棧的運算符時或者兩者可對消時。

  計算時,則將符號出棧參與計算,數值棧的出棧口前兩位元素出棧參與計算,計算結果值向數值棧壓棧,並進行遞歸此操作。

  圖1:

  1) “(” 壓入符號棧 2 ) “6”壓入數值棧

  3) “(”與”+”比較優先級,認為”(”比”+”優先級低,則不滿足計算條件,將”+”壓入符號棧.

  圖2:

  1) 將”2” 壓入數值棧。

  2) 將”*”與”+”比較優先級,算得”+”優先級低於”*”,則不滿足計算條件,將”*”壓入符號棧。

  圖3:

  1) 將 “5”壓入數植棧。 2) 將“*“與”)”比較優先級,得出”*”比”)”優先級要高。進行計算,將”*”出棧、”5”、”2”出棧,參與計算

  圖4:

  1) 將 2*5 =10的結果壓入數值棧。

  2) (遞歸)比較 “+”與”)”優先級,得出”+”比”)”優先級要高。再進行計算,將”+”出棧、”10”、”6”出棧,參與計算。

  圖 5:

  1) 將 6+10 =16的結果壓入數值棧。

  2) (遞歸)比較 “)”與”(”優先級,得出兩者可以對消,將”(”符號出棧,與”)”對消,繼續取下一個符號。

  圖6:

  1) 將”/”入符號棧。

  2)將”4”入數值棧。

  3) 發現””算式結束符,則進行計算, 將 “/”、”4’、”16”出棧,參與計算。

  圖7:

  1) 將計算結果壓入數值棧。

  成功了! 辛苦的計算工作終於干完了,看起來比人腦計算復雜多了:)

  第二種算法

  第二種方法,我們簡單的提一下,在這裡不作詳細過程的敘述。第二種,就是使用樹的方式,將一個算式組織成一定規律的樹,之後,再進行遍歷計算即得得到結果。還是以上面的算式作例子,最終形成的樹的樣式:(注意“()”這個符號要特殊處理)

  圖8:

  使用樹的深度遍歷即可算出最終的結果。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved