返回 動漫遊戲

電腦 / 急~~要如何用C語言寫一個"先乘除後加減"的程式呢?

如標題所示~~

我才剛學C不久~~老師要求寫一個類似簡易計算機功能的程式(利用C或C++)

但我不知道要如何判定輸入算式中的先乘除、後加減(有括號怎麼辦???)

另外~~萬一輸入的算式很長~~~我的程式中又要如何辨別它的變數和計算過程呢??

盼高手相助~~~
  • 去唸一唸  Stroustrup  寫的  "The  C++  Programming  Language"  (3rd  Edition  或  Special  Edition)  的第六章,  裡面的範例就是在講這個.
  • 可是我臨時去哪找這本書啊?!
    可以簡單教我一下大概需要運用的技巧嗎?!

    謝謝~~
  • 運用的技巧喔...
    你須要做  lexer  和  parser.

    Lexer: 
    http://en.wikipedia.org/wiki/Lexical_analysis

    Parser:  http://en.wikipedia.org/wiki/Parser

    這裡有範例程式碼,  你拿去把它截取你要的部份出來...
    http://www.parsifalsoft.com/examples/evalexpression/index.html
  • http://imil.au.edu.tw/~hsichcl/C_OnLine.htm

    這個網站應該能幫到你
    有基本的語法架構
    "先乘除後加減"沒有想像中複雜啦!

    C語言我八百年前學過入門
    我這豆腐腦,當時學覺得不難ㄟ
    可是畢業後就通通還給老師了:P
  • 如果是我寫的話...

    我會先用迴圈找字串裡有沒有*和/,有的話先作處理

    整個字串跑完後就直接+、-就好了~~
  • Juin的話:
    如果是我寫的話...
    我會先用迴圈找字串裡有沒有*和/,有的話先作處理
    整個字串跑完後就直接+、-就好了~~
    -----------------------------------

    括號要處理唷~~
    例如:
    3+(2(2-(6/2)+7)-(5*2))=
  • 一般會用  tree  來處理複雜的算式.
  • 老頑童的話:
    一般會用    tree    來處理複雜的算式.

    ---------

    會不會太複雜了    Orz
  • 括號要處理唷~~
    例如:
    3+(2(2-(6/2)+7)-(5*2))=
    =======
    對厚…我都忘了還有括號…

    括號的部分,我可能會寫成一個副程式來處理…

    像是將括號內的算式丟到副程式裡算,然後再retrun回來取代原先的字串…

    不過要先判斷相對應的括號位置就是了…
    這個部分的話…就是判斷說『(』下一個假如是遇到『)』的話,
    就把這個()中字串丟到副程式裡去處理…

    不好意思,我程式方面沒學多精,所以都是用一些簡單的方法來寫的~呵…別見怪…
  • 謝謝大家~~小的繼續努力中!!!
  • 我現在的問題在於
    如果輸入的方程式很長
    要如何辨別每一個變數?!
  • MimiBao的話:
    我現在的問題在於
    如果輸入的方程式很長
    要如何辨別每一個變數?!
    -----------------------------------

    所以要用  tree  (linked  list)  來定位,  樹上的每顆果子都有它的位置...
  • tree...是啥??

    老師根本還沒教~~~我討厭教授啦!!!!
  • 所以要用    tree    (linked    list)    來定位,    樹上的每顆果子都有它的位置...
    ========
    老頑童...他都說是初學者了,我想應該不會用TREE吧…
  • MimiBao的話:
    tree...是啥??
    老師根本還沒教~~~我討厭教授啦!!!!
    ----------------------------------

    那你學到什麼就用什麼啦!  作業嘛~~~

    Tree  是資料結構  (data  structures)  的一種,  資料結構是一門專門的課.
  • MimiBao的話:
    我現在的問題在於
    如果輸入的方程式很長
    要如何辨別每一個變數?!
    ==========
    呃…
    就是…
    一列字串嘛,把其中從左到右,一個一個取出來~
    像是521*78+30-14
    先取出5然後2再來1...接著會遇到*嘛
    就寫一個判斷式來判斷如果遇到+-*/的話,那前面的字串加起來就是一個變數囉…

    所以剛才取出的字串就要5+2+1((是字串相加))就是521((還是字串))再把它轉換成數值就好了~~
  • 但我還是不太懂

    萬一有人輸入一個...

    5-9*86+72/84-96+12.......很長的方程式
    我是用哪一種方式辨認對方輸入的字串???
    我不能預測他輸入的字串長度啊!!!

    這個技巧要如何使用呢?
    這是我最大的問題
    謝謝
  • 我又忘了()這東西了…呵...||

    +-*/()都要判斷一下…
  • 不用去預測字串長度啊....

    我記得有個函數是可以判斷字串的長度的...

    去找一下吧…
  • strlen(...);

    要處理前,  還要先吃掉空白字元.
回應...
 返回 動漫遊戲