본문 바로가기
Programming/기타

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

by Bam_t 2021. 2. 23.
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

댓글