我要學會 C 語言(三):加加減減乘除的變數運算
第三篇要講的是運算,有了變數以後,總該拿幾個變數來運算看看吧?
C 語言除了有基本的五則運算以外,還有一些像是邏輯運算、遞增遞減運算、指定運算……等等。
五則運算
咦?不是四則運算嗎?怎麼變五則運算?
除了加(+)、減(-)、乘(*)、除(/)以外,還有一個用來取餘數用的運算子 %,用法是 a%b 會得到 a 除以 b 的餘數。例如:
13 % 6 = 1
25 % 5 = 0
93 % 7 = 2
那麼,變數和變數之間的運算,在五則運算裡面比較簡單。例如:
#include <stdio.h>
int main(){
int x=15, y=6;
int a = x+y;
int b = x-y;
int c = x*y;
int d = x/y;
int e = x%y;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
printf("%d\n", d);
printf("%d\n", e);
return 0;
}
輸出結果會是:
21
9
90
2
3
註:這裡使用了輸出用的
printf
函式,等到輸出入的時候會再詳細說明。
以上看起來好像沒有什麼問題,但是,咦? 15/6 怎麼會是 2?
因為在 C 語言裡面,整數(int)運算過程會無條件捨去小數點以下的部分,所以 2.5 會被捨去,變成 2。
如果要正確的顯示小數點,應該用浮點數來運算。這個部分到下一篇也會再說一次。
遞增、遞減運算子
遞增運算子(++)和遞減運算子(–)可是 C/C++ 獨有的運算子,它們的功能就是:用來+1或用來-1,用法就是:a++、++a 或 a–、–a。由於遞增和遞減運算子的用法相同,以下皆以遞增運算子來做示範。
a++
的結果和 a = a + 1
是一樣的,例如:
#include <stdio.h>
int main(){
int a=7, b=7;
a++;
b++;
printf("%d\n", a);
printf("%d\n", b);
}
輸出結果無庸置疑的會是 8 和 8。
不過下面這段程式碼:
#include <stdio.h>
int main(){
int a=7, b=7;
printf("%d", ++a);
printf("%d", b++);
}
輸出結果卻是 8 和 7。因為第 5 行會先把 a 做遞增後再輸出,第 6 行是先輸出 b 再做遞增,這是使用遞增/遞減運算子比較需要注意的部分。
如果要細講的話:
int a=3, int num;
num = a++;
num = ++a;
第 2 行可以拆成 num = a;
a = a + 1;
;第 3 行可以拆成 a = a + 1;
num = a;
。
另外,遞增遞減運算子只有加減法,並沒有 a**
或 a//
之類的東西可以用唷,當然更沒有 a%%
xD。
指定運算子
指定運算子則是大部分的運算子都有,有 +=、-=、=、/=、%=*。可以讓撰寫程式的時候變得比較方便,不用再多寫一次變數名稱,例如:
a += 3 等同
a = a+3`
a -= 3
等同 a = a-3
a *= 3
等同 a = a*3
a /= 3
等同 a = a/3
a %= 3
等同 a = a%3
當然還有別的,例如**&=、|=、<<=**、……等等。但是這些運算並不常見,在這裡省略不談。
那直接看例子吧:
#include <stdio.h>
int main(){
int a=7, b=7, c=7, d=7, g=7;
a += 3;
b -= 3;
c *= 3;
d /= 3;
e %= 3;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
printf("%d\n", d);
printf("%d\n", e);
return 0;
}
輸出結果:
10
4
21
2
1
那變數運算的部分大概到這邊,這些運算子看起來很簡單,不過還是要試著練習一次才有效果。如果在設計程式的時候常常忘記某件事情的話,沒關係,總是要錯個幾次才記得起來 XD
註:
- 關係運算子和邏輯運算子會等到選擇結構的時候再一起講解
- 位移運算暫時沒有打算講解。
- 括號運算子就是 ( ) 起來的東西要先算 XD