1. 목적

  - 배열의 동적 할당에 대해 이해한다.

2. 문제 (점수 : 15 점)
  - -50 ~ 100 사이의 임의이 값을 5만개 생성하여 배열에 저장하되 배열은 동적 메모리에 할당하여 사용하라.
  - 각 범위 ( -50~0 / 1~50 / 51~100 ) 에 따른 개수와 생성된 난수의 평균 또한 구하여라
  - 출력 화면

-50 ~   0 범위의 개수 : 16823 개
  1 ~  50 범위의 개수 : 16724 개
 51 ~ 100 범위의 개수 : 16453 개

생성된 난수의 평균 : 24.963620
Press any key to continue


3. 이해
  - 난수를 만들 줄 아는가?
  - 동적 할당에 대해 이해하고 생성할줄 아는가?

4. 코드

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{

 int *gen;
 int cMinus, cZero, cFifty, i;
 long total;
 total = cMinus = cZero = cFifty = i = 0;

 srand((unsigned)time(NULL));
 rand();

 gen = (int*)calloc(50000,sizeof(gen));

 while(i<50000)
 {
  gen[i] = (rand() % 151) - 50;
  total += gen[i];
  if(gen[i] >= -50 && gen[i] <= 0) cMinus++;
  if(gen[i] >= 1 && gen[i] <= 50) cZero++;
  if(gen[i] >= 51 && gen[i] <= 100) cFifty++;

  i++;

 }

 printf("-50 ~   0 범위의 개수 : %d 개\n",cMinus);
 printf("  1 ~  50 범위의 개수 : %d 개\n",cZero);
 printf(" 51 ~ 100 범위의 개수 : %d 개\n",cFifty);

 printf("\n생성된 난수의 평균 : %f\n",(float)total/50000);

 gen = NULL;
 free(gen);
 return 0;
}


5. 해설
  - 이전에 공부 한 것이 있어서 쉽게 동적 할당에 대해 접근 할수 있었습니다.
  - calloc 함수로 간단하게 생성했습니다. 보통은 malloc 을 씁니다만 초기화 때문에 calloc 을 썼습니다.
  - 마지막엔 NULL 에 맞추고 free 함수로 동적 할당된 자원을 반환 합니다. 그렇지 않으면 메모리 누수가 발생합니다. 요즘은 메모리 자원이 풍부하여 부족될 일은 자주 없지만 free 함수나 delete (C++) 로 비우는 에티켓이 필요합니다.

6. 참고
  - 유사 문제

Posted by 카켈