1. 난수란 무엇인가
[명사] 특정한 배열 순서나 규칙을 가지지 않는, 연속적인 임의의 수.
즉. 쉽게 말하자면 랜덤하게 선택된 수를 말한다.
C언어에서는 이러한 난수를 만드는 함수를 제공한다.
rand() 함수
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i=0;
for(i=0;i<5;i++)
{
printf("%d",rand());
printf("\n");
}
return 0;
}
2.srand((unsigned int) time(NULL));
단, rand() 경우 항상 같은 실행결과가 나온다는 문제가 있다.
따라서 srand(),time() 함수와 함께 사용해 주어야 한다.
함수 time()을 사용하기 위해 헤더 파일 time.h를 포함시켜야 한다.
srand()함수로 rand()에 시드값을 전달해 주어야 하는데
seed는 난수표 라는 것이 존재하는데 각 seed값 마다 난수가 정해져 있는 시스템이다.
따라서 계속 변하고 있는 시간값을 seed로 준다면 계속 변화하는 값이 반환 될것이다.
함수 strand(time(NULL)) 을 포함시켜 주면
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
main()
{
float rdata[20]; //실수 난수를 저장할 배열공간
float fsum=0.0;
int i,isum=0,temp;
srand(time(NULL));//랜덤한 숫자
for(i=0;i<20;i++)
{
rdata[i] = rand()%100+rand()%100/100.0;//00.00~99.99 난수구하기
printf("%.2f ",rdata[i]);
printf("\n");
}
for(i=0;i<20;i++)
{
temp = rdata[i];
isum+=temp;
fsum+=(rdata[i]-temp);
}
printf("\n\n정수부분의합:%d\n",isum);
printf("\n\n정수부분의합:%.3f\n",fsum);
}
3. rand() 함수의 범위 지정
0~n-1 사이에서 난수를 발생시키려면 다음과 같이
rand() % n // n은 정수.
rand() 뒤에 % n을 붙이는 것으로 지정할 수 있다.
예시 rand() % 5 -> 0~ 4 사이의 난수가 나온다.
혹은 rand() %5 +1 과 같은 형태는 -> 1~5 사이의 난수가 나옵니다.
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define num 20
main()
{
float rdata[num];//실수 난수를 저장할 배열 공간
int ndata[num];//정수 난수를 저장할 배열 공간
char cdata[num];//문자 난수 저장할 배열 공간
int i,isum=0,temp;
srand(time(NULL));
for(i=0;i<20;i++)
{
ndata[i]=rand()%101+100;//100~200사이 난수
cdata[i]=rand()%26+'a'//알파벳 문자 a~z까지 난수
rdata[i] = rand()%100+rand()%100/100.0;// 실수 00.00~99.99까지 난수
printf("%.2f ",rdata[i]);
printf("%d ",ndata[i]);
printf("%c ",cdata[i]);
printf("\n");
}
}