1.rand()

난수를 발생시키는 함수인 rand()에요.

rand()에 의해 생성되는 정수는 (0,n) 즉 0부터 n까지 임의의 정수죠.

참고로 stdlib.h 파일에 정의되어있는 RAND_MAX의 초기값은 32767이랍니다.

그럼 rand()함수를 이용한 예제를 볼까요?

#pragma warning(disable:4996) //이건 비쥬얼 스튜디오 상위버전에서 나는 에러를 무시해주는 코드에요.

//0.00~99.99.사이의 실수 난수를 20개 만들어 소수 부분의 합과 정수 부분의 합을 구하시오.

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

main()

{

float rdata[20], 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;

printf("%.2f\n",rdata[i]);

if((i+1)&7==0)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소수부분의 합 : %.3f\n",fsum);


}

2.srand()

다른건 알겠는데 srand()는 뭘까요?

rand()함수만 쓰고 실행해보세요. 그럼 어떻게 나오나요?

계속 같은 값이 나올꺼에요.

이걸 해결해주는게 srand()함수랍니다.

srand()함수는 매번 다른 난수를 발생시키기 위한 시드(seed)값을 주는 거에요.

그럼 time(NULL)은 무슨의미일까요? 이건 1970년 1월1일 이후의 경과된 시간을 초단위로 반환하는 함수랍니다.

마지막으로 정리할수 있는 예제드릴께요.

#pragma warning(disable:4996)

//0.00~99.99.사이의 실수 난수를 20개 만들어 소수 부분의 합과 정수 부분의 합을 구하시오.

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

main()

{

srand(time(NULL));

float frand[20], fsum = 0;

char crand[20];

int irand[20], i, temp, isum = 0, cnum = 'a';

for (i = 0; i < 20; i++)

{

irand[i] = rand() % 101 + 100;

crand[i] = rand() % 26 + cnum;

frand[i] = rand() % 100 + rand() % 100 * 0.01;

 

printf("%d, %c, %.2f\n", irand[i], crand[i], frand[i]);

}

for (i = 0; i < 20; i++)

{

temp = frand[i];

isum += temp;

fsum = frand[i] - temp + fsum;

}

printf("\n\n정수부분의 합 :%d\n", isum);

printf("\n소수부분의 합 : %.2f\n", fsum);

}

+ Recent posts