난수를 발생시키는 함수인 random 함수에 대해서 알아보도록 하겠습니다. 랜덤 함수는 <stdlib.h>의 헤더 파일에 속해 있습니다.
■ rand
rand 함수 | 자료형 rand (void) |
rand 함수는 0~32767 사이의 값의 난수를 출력합니다. ( 난수 범위를 지정하지 않았을 때 )
난수 범위를 지정하고 싶다면 rand()%난수범위 n 를 설정하면 0부터 n-1까지의 난수를 설정합니다.
난수 범위 설정 | 코드 |
0~n-1 | rand() %n |
1~n | (rand() %n)+1 |
a의 배수 | ((rand() % n)+1)*a |
ex) rand 함수
#include <stdio.h>
#include <stdlib.h>
int main(void){
int i;
for (i=0;i<10;i++){
printf("%d\n",rand());
}
printf("\n\n");
for (i=0;i<10;i++){
printf("%d\n",rand()%100);
}
}
※ result
41
18467
6334
26500
19169
15724
11478
29358
26962
24464
5
45
81
27
61
91
95
42
27
36
■ srand & time
앞서 ex) rand 예제의 rand함수는 여러 번 재실행을 하다보면 난수가 일정한 값을 가지는 것을 확인할 수 있습니다. 계속해서 불규칙한 난수를 사용하기 위해서 srand와 time 함수를 이용합니다. time 함수는 인자값으로 NULL을 넘기면 1970년 1월 1일 00시 이후부터의 인자값을 현재까지 흐른 초의 수로 리턴해줍니다. 즉 다시말해서 시간은 계속해서 흐르기 때문에 time 함수를 이용해서 구한 초의 시간을 srand 함수에 이용해 rand함수로 호출하면 완전한 불규칙 난수가 생성이 되는 것입니다. 그리고 time 함수에 대한 헤더파일은 <time.h>입니다.
srand | void srand(unsigned int seed); |
time | time_t time(time_t *timeptr) |
time은 말 그대로 시간에 대한 정보로서 현재까지 흐른 시간을 초 단위로 반환합니다. 만약 현재까지 흐른 시간을 구하려면 timeptr에 NULL을 전달하고 값을 반환받을 수 있거나 아니면 현재까지 흐른 초 단위로 받을 수 있습니다.
ex) 계속해서 난수 만들기
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int i;
srand(time(NULL));
for (i=1;i<4;i++){
printf("srand : %d\n",rand()%10);
}
}
※ result
srand : 6
srand : 8
srand : 4
'컴퓨터 프로그래밍 > c 언어 (c programming language)' 카테고리의 다른 글
C 언어 - 연습문제2 (0) | 2020.09.27 |
---|---|
C 언어 - 연습문제1 (0) | 2020.09.27 |
C 언어 - 구조체(Structure) (0) | 2020.09.27 |
C 언어 - 포인터(Pointer) (0) | 2020.09.27 |
C 언어 - 배열(Arrangement) (0) | 2020.09.27 |
댓글