[C] c언어 난수 생성 구현 (rand(), random())

PersesTitan·2023년 6월 16일
0

C

목록 보기
8/9

티스토리 버전 링크


rand()

rand() 함수를 사용하기 위해서는 stdlib를 추가해주어야합니다.

#include <stdlib.h>

rand() 함수는 램던한 int 타입의 값을 반환해줍니다.
아래와 같이 그냥 사용하여도 램던한 값이 나오기는 하지만 코드를 다시 실행을 하면 처음 나왔던 램던한 값이 고정되어서 출력됩니다.

예시 코드

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

int main() {
    for (int i = 0; i < 10; ++i) {
        printf("%d\n", rand());
    }
    return 0;
}
1차 실행2차 실행3차 실행

해결방법

time.h를 추가하여 초기화 시켜주는 것이 일반적입니다.

#include <time.h>

다음과 같이 srand를 이용하여 램던 값을 초기화 시킬 수 있습니다.
예시 코드

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

int main() {
    srand(time(NULL));
    for (int i = 0; i < 10; ++i) {
        printf("%d\n", rand());
    }
    return 0;
}
1차 실행2차 실행3차 실행

이렇게 원하던 램던값을 구할 수 있었습니다.

random()

random()과 rand()의 차이는 random()은 long을 반환하고, rand()는 int을 반환하는 차이점이 존재합니다.

rand()에서 초기화할때는 srand를 사용하였지만 random()에서는 srandom를 사용하여 초기화를 하시면 됩니다.

예시 코드

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

int main() {
    srandom(time(NULL));
    for (int i = 0; i < 10; ++i) {
        printf("%ld\n", random());
    }
    return 0;
}

범위 정하기

유명한 방법으로 나머지와 더하기를 이용하는 방법이 존재합니다.
rand() % (최대값-최소값-1) + 최소값 과 같은 범위를 지정할 수 있습니다.
1~10의 범위를 지정하고 싶다면, rand() % 10 + 1과 같은 방법으로 범위를 지정할 수 있습니다.

출력 예시

5
10
6
1
8
5
3
1
1
9
profile
안녕하세요 페르세스 티탄입니다! 부족한 부분이 많이 있겠지만 잘부탁드립니다.

0개의 댓글