Programming/기타

[C] 난수를 이용한 무작위 숫자 출력

Bam_t 2021. 2. 23. 19:56
728x90

무작위로 생성되는 난수 값을 이용하여 무작위 숫자를 출력하게 됩니다.

 

일단, 난수란 간단하게 말하면 무작위의 숫자를 의미합니다.

 

C언어에서는 rand()라는 함수를 통해서 난수를 생성하게되는데, 이때 발생되는 난수의 범위는 0~32767까지입니다.

rand()함수는 <stdlib.h>헤더 파일에 포함되어있으므로 #include <stdlib.h>를 해주어야합니다.

 

#include <stdio.h>
#include <stdlib.h> //rand() 사용을 위한 stdlib 헤더파일 include

void main() {
	int randomNumber[3];

	for (int i = 0; i < 3; i++) {
		randomNumber[i] = rand(); //rand()를 통한 난수생성
		printf("%d\n", randomNumber[i]);
	}

	printf("\n");
}

이렇게 0~32767사이의 무작위 숫자가 나옴을 확인할 수 있습니다.

난수가 생성됐지만 범위가 너무 넒고 실용성이 떨어진다라고 생각 할 수 있습니다.

 

그래서 특정 값의 범위를 뽑고싶다면 rand()%n를 이용하시면 됩니다.

0~32767의 값을 n으로 나누어서 나온 나머지니까 0~n-1의 값이 나오게 됩니다.

만약 0~9까지 무작위 수를 만들고 싶다면 rand()%10을 하면 0~9까지의 수가 나오게 되고

1~10까지 만들기를 원한다면 (rand()%10)+1이런식으로 이용할 수 있습니다.

 

 

 

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

void main() {
	int randomNumber[3];

	for (int i = 0; i < 3; i++) {
		randomNumber[i] = rand() % 3; //난수값의 범위를 0~2로 설정
		printf("  %d\n", randomNumber[i]);
	}

	printf("\n");
}

 

위 소스코드에서 보이듯이 randomNumber[i] = rand() % 3를 통해 난수의 생성 범위를 0~2까지 설정했음을 알 수 있습니다.

 

여기까지 진행해보니 랜덤이라고는 했지만 실행해도 계속해서 같은 숫자들이 나열되어있음을 보입니다.

그 이유는 사실 컴퓨터가 자체적으로 난수를 만들수는 없고 난수표를 이용해서 무작위 난수를 만든 것 처럼 보이게 합니다. 이때 사용하는것이 Seed값이라고 하는 값인데 이 시드값이 같은 상태로 실행되는 상태이므로 계속해서 같은 값이 나오게 됩니다.

 

그래서 이 시드값을 초기화 하기위해 srand()함수를 이용합니다. srand()는 시드값을 초기화 해주는 역할을 하며 가장 간단하게 시드값을 새로 주는 방법은 time()이라는 함수로 현재의 시간에서 초를 대입해주는 방법입니다. time()함수는 간략하게는 시간에 관련된 함수로 <time.h>에 포함되어있습니다.

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>  //time()사용을 위한 include


void main() {
	int randomNumber[3];

	srand((unsigned int)time(NULL));  //srand()의 인자는 unsigned int형이므로 캐스팅형변환
                                      //time(NULL)은 현재시간
	for (int i = 0; i < 3; i++) {
		randomNumber[i] = rand() % 3;
		printf("  %d\n", randomNumber[i]);
	}
	
	printf("\n");
}

 

1회 실행

2회 실행

 

이렇게 실행시마다 다른 무작위 숫자를 출력하게 됩니다.

 

728x90