Ch3 四則運算

搭配 Zero Judge 高中生程式解題系統

上一章:變數與輸入
下一章:if條件判斷
回目錄:國立科學園區實驗中學C++程式語言自學講義

在上一章,我們學會宣告變數,以及將使用者輸入的資訊存進變數裡
在這一章,我們將學會對變數做各種運算

輸出運算式

輸出的章節,我們學過直接輸出數學運算式
像是cout << 1+2+3 會直接印出6

而這運算式,其實不是只能用固定的數字,而是可以用變數去做運算
例如cout << 3+n ,會依照n目前所代表的數字,來決定相加後的值為何
至於n代表的數字為何,則是看程式目前跑到那行時 n 變成什麼值了而定
可能是從使用者輸入的數字,也可能是一開始就設定好的數字

【例題】
小明有n個10元硬幣,請問小明總共有幾元?
以下程式示範將使用者輸入的數乘以10後輸出

int n ; cin >> n; cout << n*10 << endl;

不管使用者輸入了什麼數字,這支程式都會將他乘以10以後印出來

多個變數輸入

當然,如果你要使用不只一個變數也是可以的

【例題】
小明有a元,小華有b元,請問兩人加起來共有幾元?
以下程式示範將輸入的兩個數字加起來

int a, b; cin >> a; cin >> b; cout << a+b << endl;

不管使用者輸入了什麼數字,這支程式都會將它們相加後印出來
由於宣告時的ab都是宣告成整數型態
因此使用者只能夠輸入整數

如果你希望你的加法程式也能夠處理小數的加法
就要將ab宣告成float的型態

寫題目時,可以依照題意決定要將變數宣告成什麼型態
例如上述範例,因為錢一定是整數,所以可以宣告成int型態就好

【學生練習題】

各式運算符號

  • 加號+ :和數學的加號相同
  • 減號- :和數學的減號相同
  • 乘號* :和數學的乘號相同
  • 除號/ :如果是整數除法,就只留下商;如果是小數除法,則是保留一些位數的小數,例如
    • 5 / 2 結果會是2
    • 5.0 / 2.0 結果會是2.5
  • %:除法取餘數,例如
    • 5 % 2 結果會是1
    • 10 % 5 結果會是0
    • 7 % 4 結果會是3
  • 括號():和數學的括號相同,括號內的部分優先算。
    • 如果要用括號包括號的話,同樣也是用這種小括號,例如((1+2)*(3+4))*5

【例題】
小明有m個10元硬幣和n個1元硬幣,請問小明總共有多少錢?
以下程式將示範此運算

int m, n ; cin >> m ; cin >> n ; cout << m*10+n << endl ;

【例題】
小明有n個1元硬幣,請問可以換成幾個10元硬幣? 剩下幾個1元硬幣?
以下程式將示範此運算

int n ; cin >> n ; cout << n/10 << " " << n%10 << endl ;

【例題】
小明到美國玩,發現溫度計顯示的是華氏溫度。請問華氏的x度是攝氏的幾度?
以下程式將示範此運算

float f; cin >> f; cout << (f-32)*5/9 << endl;

由於答案可能出現小數,所以要宣告成float的型態來處理

【例題】
以下程式將示範如何將一個4位數拆成個位、十位、百位、千位

int n; cin >> n; cout << n%10 ; cout << (n/10)%10 ; cout << (n/100)%10 ; cout << (n/1000)%10 ;

多步驟的運算

有時候,要處理的問題可能會非常複雜
光是用一個式子表示答案,會讓程式看起來非常亂,且容易寫錯

【例題】
甲有n支鉛筆,乙的鉛筆是甲的2倍再多3支,丙的鉛筆是乙的3倍再少1支,丁的鉛筆比丙還要少5支,請問甲乙丙丁總共有幾支?
以下程式示範非常繁雜的寫法

int ja ; cin >> ja; cout << ja+(ja*2+3)+((ja*2+3)*3-1)+(((ja*2+3)*3-1)-5) << endl;

哇咧,真的是太雜了
就算要化簡還要自己用筆算
萬一跑出來的結果不如預期,也很難檢查出自己哪邊寫錯

如果能夠宣告好幾個變數
分別存甲、乙、丙、丁的數量
看起來就會清楚明瞭很多
像是:

(注意 這程式還不完整喔 直接拿去執行的話會跑出怪東西!!) int ja ; int yee ; int bing ; int ding ; cin >> ja; cout << ja + yee + bing + ding ;

問題是,要怎麼讓電腦知道乙是甲的兩倍多三支丙是乙的三倍少一支丁比丙少五支呢?
乙丙丁的數量是藉由甲的數量運算而來,又不是讓使用者輸入的
到底該怎麼讓yeebingding這三個變數存入正確的值呢?

給值

現在要來介紹一個新的符號:=
雖然形狀長得像數學的「等號」,但它和數學的等號沒有關係
它所代表的意思是「變成」、「代入」、「存入」的意思
例如

int a ; a = 3 ; cout << a << endl;

如此一來,不需要cin>>a,也不需要叫使用者輸入3
就直接讓a這個變數變成3這個數字了
可以利用cout印出來看看,是否真的會印出3

當然,也可以利用運算式存入變數,例如

a = 2*3 ;

這麼一來a這個變數就會是6這個數字

也可以將另一個變數的值拿來使用,例如

a = 3 ; b = a+1 ; a = 999 ;

這麼一來b這個變數就會是4這個數字
就算後來a變成999了,也不會影響到b

也可以拿自己原本的值來使用,例如

a = 3 ; a = a+1 ;

如此一來a就會變成4

【例題】
甲有n支鉛筆,乙的鉛筆是甲的2倍再多3支,丙的鉛筆是乙的3倍再少1支,丁的鉛筆比丙還要少5支,請問甲乙丙丁總共有幾支?
以下程式示範清楚簡單的寫法

int ja ; int yee ; int bing ; int ding ; cin >> ja; yee = ja*2+3 ; bing = yee*3-1 ; ding = bing-5 ; cout << ja + yee + bing + ding << endl ;

懶人寫法

如果一個變數一開始就有值的話
可以在宣告的時候就直接指定
例如

int a ; a = 5 ;

可以寫成

int a = 5 ;

當變數運算會用到自己原本的舊值時,有較快速的寫法,例如

a = a+1 ; b = b-5 ; c = c*3 ; d = d/(a+b) ;

可以寫成

a += 1 ; b -= 5 ; c *= 3 ; d /= (a+b) ;

請注意運算符號跟等於之間不能有空格

另外,如果變數後面接的運算元是1的話
還可以這樣寫
例如

a = a+1 ; b = b-1 ;

可以寫成

a++ ; b-- ;

請注意兩個加號或兩個減號之間不能有空格

上一章:變數與輸入
下一章:if條件判斷
回目錄:國立科學園區實驗中學C++程式語言自學講義