2001 Spring C++ 第一次程式作業

運算式計算

2001/02/27

作業目標:

  1. 複習 C 語言
  2. 複習資料結構的堆疊
  3. 期中後將以此程式為基礎討論物件導向的版本及視窗的版本
  4. 熟悉繳交作業的流程

作業繳交要求

作業說明:

  1. 請以 C 語言撰寫一程式計算如下列 infix 表示之 + - * / 運算式
    3 + 4.1 * 5 / 6 - 7.0 * 8 + 9 =
    + - * / = 各個運算子 (operator) 的優先順序如下表所示:

    上例中運算順序如下圖所示:

    運算結果為 -40.583

  2. 程式中請定義兩個堆疊 (Stack) 來輔助計算結果, 一個堆疊用來放運算子 (operator), 另一個用來放運算元 (operand)

  3. 上面範例的運算流程如下所示:

  4. 範例執行程式 expr_tc3.exe, expr_debug_tc3.exe

  5. 此程式採用文字界面, 由鍵盤或是檔案輸入資料, 程式中分析輸入的運算式, 一旦出現不允許的格式時會發出錯誤的訊息,

    遇見這樣子的運算式時, 程式無法算出正確結果而需要發出錯誤訊息, 要處理這種錯誤情況的話, 一種方法是等到堆疊上出現無法處理的狀況時程式才發出錯誤訊息, 所以上式 3 + * 5 會把 3 和 5, + 和 * 都分別放到堆疊上, 然後先做 3 * 5 = 15, 把 15 再放到堆疊上, 然後由堆疊上得到 '+' 運算子, 可是此時運算元堆疊上只剩下一個運算元, 所以無法處理 '+' 號這個二元 (binary) 運算子, 程式於此時會發出錯誤訊息。

    在我們的作業中, 為了簡化你的程式, 你可以完全不處理等號以外的一元 (unary) 運算子, 如此可以歸納出一個簡單的法則, 就是運算元和運算子會交錯地出現, 如此程式可以很簡單地偵測出錯誤狀況, 不過如果你要處理一元運算子的話, 法則就會比較複雜了。

    將來我們會提到如何製作線上的小算盤程式, 在處理視窗界面時, 所有的錯誤訊息必須要及時的回饋給使用者, 不能等到堆疊出錯了才告訴使用者, 此時必須使用更嚴謹的狀態圖來處理, 等到我們談到物件的狀態圖以後會再以這個範例讓大家來練習, 所以請大家一步一步地製作這個程式。

  6. 由上面的提示中你可以發現有許多可以加強你的程式功能的地方, 例如處理一元的正負號, 或是加入處理小括號的功能等等, 如果你在作業中加入額外的功能的話, 記得在說明中及 demo 時強調一下, 一定會有加分的。


程式撰寫注意事項

  1. 儘量用 ANSI C, 不要用 K&R C, 避免用 C++ 的擴充語法
  2. 變數及函式名稱請用有意義的英文或是縮寫
  3. 請不要用全域變數
  4. 請以 typedef, struct 定義資料型態
  5. 常數請以 const 或是 enum 宣告
  6. 請以函式適當分工,函式請宣告 prototype
  7. 成對的大括號請對齊,同一區塊程式請對齊
  8. 區塊間每一層空四格

C++ 程式設計課程 首頁

製作日期: 02/25/2001 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw TEL: 02 24622192x6615
海洋大學 理工學院 資訊科學系 Lagoon