我們能不能規劃像手邊小計算機操作模式的程式呢?畢竟比較跟我們日常的習慣比較接近。其實 scanf() 的格式化字串可以用多個轉換字符,就跟函數 printf() 類似,因此直接要求使用者輸入運算式是可行的。
我們提供的新版本如下
#include <stdio.h> int main(void) { int a, b; //宣告需要用到的變數 char opt; printf("這個程式會依符號計算兩個整數的和、差、積、商....\n"); printf("請輸入計算式,如 2+2: "); //提示使用者輸入的文字 scanf("%d %c %d", &a, &opt, &b); //以下會依運算子計算並印出結果 printf("結果如下: \n"); switch (opt) { case '+': printf("%d + %d = %d\n", a, b, a + b); break; case '-': printf("%d - %d = %d\n", a, b, a - b); break; case '*': printf("%d * %d = %d\n", a, b, a * b); break; case '/': printf("%d / %d = %d\n", a, b, a / b); break; default: printf("輸入錯誤!\n"); break; } return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:calculator2.c 功能:接受使用者輸入的四則運算器 作者:張凱慶 時間:西元2010年7月 */
改變的地方就是把原先需要 6 行的輸入部份,包含 3 行的提示訊息,使用者也需要連續輸入然後按 3 次 return 或 Enter 鍵,現在改成兩行,就在第 9 行及第 10 行
printf("請輸入計算式,如 2+2: "); //提示使用者輸入的文字 scanf("%d %c %d", &a, &opt, &b);
函數 scanf() 直接接受三項輸入值,注意,我們在格式化字串中每一個轉換字符都用空格分開。
來編譯執行看看吧!
只需要一次輸入,似乎好用好多耶!的確,寫出相同功能的程式有很多種不同的設計方式,每一種方式都有優點跟缺點,我們需要學習的是如何在開發軟體時,學會選擇適合開發目標的方法,這在學習程式設計會是一項重要的課題。
就像有些方法省時,但是浪費記憶體空間,有些方法費時,卻能節省記憶體空間
問題與討論
- 留意四則運算器中的除法,結果是不是整數呢?
- 承上例,如果都是整數,有沒有方法可以算出帶有小數點的結果呢?
- 請將變數 a 及變數 b 改成宣告為 float 型態,然後函數 scanf() 與 printf() 中格式化字串都改為 %f ,重新編譯執行,會得到什麼樣的結果呢?
- 承上例,利用除法算得的結果,觀察精確到小數點後的位數。
沒有留言:
張貼留言