C 語言初學教材 - 第二章 新版本的四則運算器

這樣的輸入方式也沒什麼不好哇!就輸入一個項目按一次 return 或 Enter 啊!但是我們手邊小計算機的操作模式確非如此,依數字、運算符號、數字的順序,全部輸入完按一次等號就行了,不是嗎?



我們能不能規劃像手邊小計算機操作模式的程式呢?畢竟比較跟我們日常的習慣比較接近。其實 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() 直接接受三項輸入值,注意,我們在格式化字串中每一個轉換字符都用空格分開。


來編譯執行看看吧!



只需要一次輸入,似乎好用好多耶!的確,寫出相同功能的程式有很多種不同的設計方式,每一種方式都有優點跟缺點,我們需要學習的是如何在開發軟體時,學會選擇適合開發目標的方法,這在學習程式設計會是一項重要的課題。


就像有些方法省時,但是浪費記憶體空間,有些方法費時,卻能節省記憶體空間


問題與討論
  1. 留意四則運算器中的除法,結果是不是整數呢?
  2. 承上例,如果都是整數,有沒有方法可以算出帶有小數點的結果呢?
  3. 請將變數 a 及變數 b 改成宣告為 float 型態,然後函數 scanf() 與 printf() 中格式化字串都改為 %f ,重新編譯執行,會得到什麼樣的結果呢?
  4. 承上例,利用除法算得的結果,觀察精確到小數點後的位數。




沒有留言: