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

Hàm rand() và srand() trong C

rand() – Sinh số ngẫu nhiên giả

Trả về int trong khoảng [0, RAND_MAX] (thường 32767). Cùng seed -> cùng chuỗi. Khai báo trong <stdlib.h>.

int rand(void);

Ví dụ

#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("%d\n", rand());
    printf("%d\n", rand());
    return 0;
}

Kết quả (ví dụ)

1804289383
846930886

srand() – Khởi tạo seed

Đặt seed cho rand(). Seed giống nhau -> chuỗi giống nhau. Thường dùng time(NULL) để seed khác nhau mỗi lần chạy. Không trả về giá trị.

void srand(unsigned int seed);

Ví dụ

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand(time(NULL));  // Seed tu thoi gian
    printf("%d\n", rand());
    
    srand(12);          // Seed co dinh
    printf("%d\n", rand());
    return 0;
}

Kết quả

1432462941  (khac moi lan chay)
1687063760  (luon giong nhau voi seed=12)

Cải tiến: Random trong khoảng [min, max]

int rand_range(int min, int max) {
    return min + rand() / (RAND_MAX / (max - min + 1) + 1);
}
Lưu ý quan trọng:
  • rand() chất lượng thấp, không dùng cho crypto/security.
  • C++11+: Dùng <random> (std::mt19937, std::uniform_int_distribution) – chất lượng cao, linh hoạt.
  • Chỉ gọi srand() một lần ở đầu chương trình.
  • RAND_MAX thường 32767 (15-bit) – nhỏ.