實現乙個可計算不同優先順序的四則運算的簡單運算子。
採用遞迴演算法來實現計算過程。首先將乙個四則運算表示式分為幾個不同級別的表示式進行計算,最後算出結果。
函式low()計算優先順序最低的表示式,如:+-運算;函式mid()計算中等的表示式,如*/運算;high()計算優先順序最高的表示式()。
在各個計算函式中,又遞迴的呼叫其他函式來計算。這種方法叫做遞迴下降法,就算從最複雜的部分開始,逐步細化,知道表示式可以計算為止。
無論什麼表示式都可以看成三部分,左表示式,運算子,右表示式,只要確定左右表示式的值,那麼整個表示式的值都可以求出。
也就是先計算出左邊的,然後計算出右邊的,然後再運算,結果就出來了
1.如果運算子為+-,那麼就兩邊就按照先括號,再乘除來運算獲得結果,然後+-運算即可。
2.如果運算子為*/,那麼就兩邊就按照先括號來運算,然後*/運算即可。
3.上述兩步中如果遇到括號,那麼括號裡面的表示式處理步驟和1,2一樣,可以遞迴處理。
至此,問題全部得到解決。
流程如下:
先輸入的為左表示式,如果是數字,接著輸入運算子,然後返回,
如果是左括號,直接計算表示式,即第3步
然後遇到運算子,然後輸入右表示式,右表示式運算和左表示式運算一樣,
最後按照1或2來運算。
int exp( void )
return temp;//返回整個表示式的值
}term函式也是同樣原理。
C語言實戰105例子 例項5 IP位址解析
說明 使用者輸入乙個十六進製制的ip位址後,程式會對該段ip位址解析,然後以常見的分段方式呈現給使用者。將乙個十六進製制的ip 位址分別儲存在不同的無符號整型變數中。解析 1 0 8 表示式的意思是,0 的所有位都為1,這裡使用語句 0 2 大部分c編譯器提供了迴圈左移函式 rotl 和迴圈右移函式...
C語言經典程式設計282例12
陣列 使用二維陣列儲存乙個3行3列的陣列,利用雙重迴圈訪問陣列的每乙個元素,然後對每個元素進行累加計算。include include include include include main for i 0 i 3 i printf n printf sum d n sum printf n 實現...
簡單文法(以c語言為例)
external declaration program external declaration 外部宣告 function definition declaration 函式 type specifier declarator 說明符 compound statement 混合宣告 宣告 sym...