Khái niệm cơ bản
| Toán tử | Tên gọi | Kết quả | Ví dụ (a=17, b=5) |
|---|---|---|---|
/ |
Phép chia nguyên | Thương (phần nguyên) | 17 / 5 = 3 |
% |
Phép modulo (chia dư) | Dư (phần dư) | 17 % 5 = 2 |
Mối quan hệ: a = (a / b) * b + (a % b)
Ví dụ: 17 = 3 * 5 + 2
Chương trình 1: Minh họa cơ bản
#include <stdio.h>
int main() {
int a, b, c;
printf("Nhap a, b, c: ");
scanf("%d %d %d", &a, &b, &c);
printf("a / b = %d\n", a / b);
printf("a %% b = %d\n", a % b);
printf("(a+10) %% b = %d\n", (a + 10) % b);
printf("(a+10) / b = %d\n", (a + 10) / b);
return 0;
}
Kết quả (a=2, b=4, c=6)
Nhap a, b, c: 2 4 6
a / b = 0
a % b = 2
(a+10) % b = 0
(a+10) / b = 3
Giải thích
2 / 4 = 0(chia nguyên, bỏ phần thập phân)2 % 4 = 2(2 chia 4 dư 2)(2+10) % 4 = 12 % 4 = 0(chia hết)(2+10) / 4 = 12 / 4 = 3
Chương trình 2: Sử dụng con trỏ
#include <stdio.h>
int main() {
int so1, so2;
int *p1, *p2;
p1 = &so1;
p2 = &so2;
int thuong, du;
printf("Nhap so1 va so2: ");
scanf("%d %d", &so1, &so2);
thuong = *p1 / *p2;
du = *p1 % *p2;
printf("Thuong (chia nguyen) = %d\n", thuong);
printf("Du (modulo) = %d\n", du);
return 0;
}
Kết quả
Nhap so1 va so2: 30 20
Thuong (chia nguyen) = 1
Du (modulo) = 10
Ứng dụng thực tế của Modulo (%)
- Kiểm tra chẵn/lẻ:
n % 2 == 0(chẵn),n % 2 == 1(lẻ) - Lấy chữ số cuối:
n % 10 - Xoay vòng mảng (circular):
index = (index + 1) % size - Hash function:
hash = key % table_size - Kiểm tra năm nhuận:
year % 4 == 0 && year % 100 != 0 || year % 400 == 0
Lưu ý quan trọng
- Modulo chỉ dùng cho số nguyên (int, long, short...)
- Kết quả
a % bcùng dấu vớia(trong C99 trở đi) a % 0gây lỗi runtime (chia cho 0)- Với số thực, dùng
fmod()từ<math.h>