1. 前言
在 C 語言的程式設計中,有許多運算子能幫助我們更有效率地進行各種計算。其中,被稱為「餘數」或「取餘運算」的 %
運算子,於特定計算時非常實用。例如,判斷奇偶數、限制亂數範圍、時間計算等,都會用到這個運算子。本文將詳細介紹在 C 語言中如何計算餘數,以及實際程式中的應用範例。
2. 基本概念說明
2.1 求餘數的方法
在 C 語言中,若要取得兩個整數的餘數,可使用 %
運算子。此運算子會回傳整數 1 除以整數 2 時的餘數。讓我們用具體的程式碼來說明:
#include <stdio.h>
int main(void){
int x = 10;
int y = 3;
int remainder = x % y;
printf("%dn", remainder); // 輸出: 1
return 0;
}
上述程式碼會輸出 10 % 3
的結果 1
,也就是 10 除以 3 的餘數為 1。% 運算子僅能用於整數運算,若是包含小數時,需使用 fmod()
函數。
2.2 浮點數的餘數
若需計算帶小數的餘數,可使用 C 標準函式庫 math.h
中的 fmod()
函數。這個函數能方便地計算浮點數的餘數。
#include <stdio.h>
#include <math.h>
int main(void){
double x = 7.5;
double y = 2.0;
double remainder = fmod(x, y);
printf("%fn", remainder); // 輸出: 1.5
return 0;
}
這段程式碼會輸出 7.5 % 2.0
的餘數 1.5
。在需要計算浮點數餘數時,建議使用 fmod()
函數。

3. 取餘運算的實際範例
3.1 判斷奇數與偶數
利用取餘運算,可以簡單判斷一個整數是奇數還是偶數。因為一個數字除以 2 的餘數為 0 時代表偶數,為 1 時代表奇數。
#include <stdio.h>
int main(void){
int number = 5;
if (number % 2 == 0){
printf("%d 是偶數n", number);
} else {
printf("%d 是奇數n", number);
}
return 0;
}
本範例將 5 除以 2,餘數為 1,所以會輸出「5 是奇數」。這是利用取餘運算判斷奇偶數的常見寫法。
3.2 骰子點數模擬
在限制隨機數於特定範圍時,也常用到取餘運算。例如,模擬骰子的點數(隨機產生 1 至 6 的數字)時,就會用到這個方法。
#include <stdio.h>
#include <stdlib.h>
int main(void){
int dice = (rand() % 6) + 1;
printf("骰子的點數: %dn", dice);
return 0;
}
這裡是將 rand()
產生的隨機數對 6 取餘,再加 1,得到 1 至 6 的點數。
4. 取餘運算的應用
4.1 環狀緩衝區(Ring Buffer)實作
所謂的環狀緩衝區,就是緩衝區的末端和起點彼此相連的資料結構。利用取餘運算,可輕鬆管理緩衝區的索引。
#include <stdio.h>
#define BUFFER_SIZE 4
int buffer[BUFFER_SIZE];
int index = 0;
void put(int data) {
buffer[index] = data;
index = (index + 1) % BUFFER_SIZE;
}
void printBuffer() {
for (int i = 0; i < BUFFER_SIZE; i++) {
printf("%d ", buffer[i]);
}
printf("n");
}
int main(void) {
put(1);
put(2);
put(3);
put(4);
printBuffer(); // 輸出: 1 2 3 4
put(5);
printBuffer(); // 輸出: 5 2 3 4
return 0;
}
在這裡,利用 BUFFER_SIZE
進行取餘運算,讓索引值能循環於陣列範圍內。這種方法能確保不會超出陣列範圍持續存放資料。
4.2 迴圈內的重複處理
在迴圈中,取餘運算也非常適合於特定模式下的重複處理。
#include <stdio.h>
int main(void) {
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
printf("%d 是 3 的倍數n", i);
}
}
return 0;
}
此範例會判斷 1 到 10 中哪些數是 3 的倍數並輸出。取餘運算讓這類根據條件的處理變得簡單。
5. 常見問題與注意事項
5.1 除以零的問題
使用取餘運算時,必須注意除以零的情況。如果分母為零,程式會在執行時發生錯誤。因此在進行取餘運算前,一定要確認分母不為零。
#include <stdio.h>
int main(void) {
int numerator = 10;
int denominator = 0;
if (denominator != 0) {
printf("餘數: %dn", numerator % denominator);
} else {
printf("不能除以零n");
}
return 0;
}
5.2 正負號的處理
另一個取餘運算需要注意的地方,是運算中如果包含負數時,結果的正負號會和被除數一致。
#include <stdio.h>
int main(void) {
int x = -10;
int y = 3;
printf("餘數: %dn", x % y); // 輸出: -1
return 0;
}
在此例中,-10 除以 3 的餘數為 -1,因此結果會帶有被除數(分子)的正負號。
6. 結論
本文說明了在 C 語言中餘數的計算方式及其應用範例。取餘運算在判斷奇偶數、環狀緩衝區實作、迴圈處理等多種情境都很實用。熟悉這些基本用法,有助於更高效、靈活地寫程式。未來在程式開發中,也請善加活用這些知識!