본문 바로가기
PRACTICE/Basic

[C] 0~99까지 난수를 생성하고 10단위 분포도 출력하기

by 1005 2020. 7. 16.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h> //rand()
#include <time.h>  //time()
 
#define G 10       //grade배열 요소의 개수
#define N 200   //num 배열 요소의 개수
 
int main() {
 
    int i, j;
    int grade[G] = { 0 }; //배열 요소를 0으로 초기화함.
    int num[N]; //난수를 저장할 배열 생성.
    srand(time(NULL)); //프로그램을 실행할 때마다 다른 난수 생성.
 
    for (i = 0; i < N; i++) {
        num[i] = rand() % 100//0~99까지 난수 200개가 저장됨.
    }
    for (i = 0; i < N; i++) {    
        grade[num[i] / 10]++;  //num[i]값에 29가 저장되있으면 10으로 나눔. 
                                       //그럼 2가 되고 10단위 중 2단위인 grade[2] 값이 하나 증가함.
    }
 
    printf("  ==== 등급별 분포도 그래프 ==== \n\n");
    for (i = 0; i < G; i++) {
        printf(" %2d ~ %2d : ", i * 10, (i * 10+ 9); //10단위 범위 출력
        for (j = 0; j < grade[i]; j++) {
            printf("*"); //각 단위 별로 저장된 num 개수만큼 별찍기
        }
        printf("  %d", grade[i]); // num 개수 출력
        printf("\n");
    }
 
    return 0;
}
cs

 

 

rand : 예측할 수 없는 하나의 난수를 생성. ( 난수의 범위는 0~RAND_MAX )

RAND_MAX는 0x7fff이므로 , 결국 난수의 범위는 0~32767 이다.

 

1
2
3
4
5
int rand( void );  //함수원형
 
rand() % N;      // 0 ~ N-1 범위의 난수를 생성. (N이 3일때 0~2 사이의 난수가 생성됨.)
rand() % N + m;  // 0+m ~ (N-1)+m 범위의 난수를 생성. (N이 3, m이 4일때 4~6 사이의 난수가 생성됨.) 
rand() % N * m;  // 0 ~ N-1 범위의 난수에 m을 곱한 난수를 생성. (N이 4, m이 2일때 0,2,4,6이 난수로 생성됨.)
cs

 

srand : rand 함수만으로 생성되는 난수는 일정한데 srand를 이용, 시간 값을 매개로 초기화하면 일정하지 않고 불규칙적인 난수가 생성된다.

 

1
2
3
void srand( unsigned int seed ); //함수원형
 
srand(time(NULL));
cs

 

 

댓글