Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Phân biệt phép chia (/) và modulo (%) trong C

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 % b cùng dấu với a (trong C99 trở đi)
  • a % 0 gây lỗi runtime (chia cho 0)
  • Với số thực, dùng fmod() từ <math.h>