무작위로 생성되는 난수 값을 이용하여 무작위 숫자를 출력하게 됩니다.
일단, 난수란 간단하게 말하면 무작위의 숫자를 의미합니다.
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회 실행
이렇게 실행시마다 다른 무작위 숫자를 출력하게 됩니다.
'Programming > 기타' 카테고리의 다른 글
백준에서 Javascript 이용하기 (1) | 2021.11.17 |
---|---|
[C] rand()를 이용한 로또 (1) | 2021.02.23 |
[C] 총 마리 수와 총 다리 수로 각각의 동물 마리 수 알아내기 (0) | 2021.02.23 |
[C] 시작단과 종료단을 입력받는 구구단 (0) | 2021.02.23 |
[C] do~while문을 이용한 구구단 (0) | 2021.02.23 |
댓글