1. 목적
- 배열의 동적 할당에 대해 이해한다.
2. 문제 (점수 : 15 점)
- -50 ~ 100 사이의 임의이 값을 5만개 생성하여 배열에 저장하되 배열은 동적 메모리에 할당하여 사용하라.
- 각 범위 ( -50~0 / 1~50 / 51~100 ) 에 따른 개수와 생성된 난수의 평균 또한 구하여라
- 출력 화면
1 ~ 50 범위의 개수 : 16724 개
51 ~ 100 범위의 개수 : 16453 개
생성된 난수의 평균 : 24.963620
Press any key to continue
3. 이해
- 난수를 만들 줄 아는가?
- 동적 할당에 대해 이해하고 생성할줄 아는가?
4. 코드
#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. 참고
- 유사 문제