C & Docker & LINUX

C언어 난수 출력 rand()함수 이용예제

로픽 2016. 5. 16. 18:16
300x250

C언어 난수 출력 rand()함수 이용예제


C언어 주사위 게임에서 많이 이용하는 함수가 rand()입니다.


랜드 함수를 이용하기 위해서는 헤더파일 stdlib.h가 필요합니다



rand()함수는 1-32767까지의 숫자를 랜덤하게 반환하는 함수입니다.


ex. int a = rand()


이런식으로 사용을 하게 되죠


값을 더하기, 나머지 구하기, 곱하기 등으로 다양한 난수값을 출력이 가능합니다.


rand()%100;

100+rand()%100;


등등등



--- 난수를 출력하여 자연수와 소수 따로 더하기, 100~200사이의 난수 출력하기, 'a' ~ 'z'사이의 알파벳 출력하기 ---


#include<stdio.h>

#include<stdlib.h> //include를 통해서 추가된 stdlib.h 헤더파일

#include<time.h>

#define NUM 20


main()

{

float rdata[NUM], fsum = 0.0;

int i, sdata[NUM], isum = 0, temp;

long seed;

char ch;


seed = time(NULL);

srand(seed);



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

{

rdata[i] = rand() % 100 + rand() % 100 / 100.0;

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

if ((i + 1) % 7 == 0) printf("\n");

}


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

{

temp = rdata[i];

isum += temp;

fsum += (rdata[i] - temp);

}


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

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



printf("\n\n100 ~ 200까지의 정수 난수\n");


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

{

sdata[i] = rand() % 100 + 100;        //계산식을 이용하여 다양한 범위의 난수를 출력할 수 있다

printf("%d ", sdata[i]);

if ((i + 1) % 7 == 0) printf("\n");

}


printf("\n\n'a' ~ 'z'까지의 난수\n");


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

{

ch = (char)('a' + rand() % 26);  //형변환을 이용하여 랜덤으로 알파벳을 출력하게 할 수 있다

printf("%c ", ch);

if ((i + 1) % 7 == 0) printf("\n");

}



getchar();

}



---결과창 ---


rand()함수의 경우 여러 개의 난수를 출력할 때 for문을 이용합니다


** 하지만 단점으로 컴파일하여 콘솔 창으로 실행하면 항상 같은 난수만 출력이 됩니다.


그래서 seed값과 srand() 함수가 필요합니다


seed = time(NULL);

srand(seed);


srand함수에 seed값을 넣어 난수에 변화를 주는 것입니다


seed의 경우 time(NULL)값을 대입하는데 time은 time.h 헤더파일에 포함된 함수입니다.


seed는 현재시간을 반환하는 time(NULL)을 대입하여 srand의 인자값으로 넘겨준다


그리고 srand(seed)로 시간을 기준으로 다양한 난수를 출력하게 해줍니다.



** rand와 srand는 같이 당겨야하죠~


반응형