我要學會 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++++aa––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

我要學會 C 語言 目錄