난수에 대해서 공부를 하다가 무작위로 숫자 1 ~ 100까지의 임의의 숫자 30개를 추출한 후에 평균을 구하면 몇 정도 나오는지 궁금해서 코드로 작성해보았다. 결과부터 말하면 45이상 55이하 범위가 가장 많이 나옴ㅎㅎ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
int array[30]; // 크기가 30인 배열
int sum = 0;
for(int i=0; i< sizeof(array)/sizeof(int); i++){
int randomNumber = rand() % 101; // 0 ~ 100까지의 랜덤 숫자
array[i] = randomNumber;
sum += array[i];
}
printf("Result : %d\n", sum/(sizeof(array)/sizeof(int)));
return 0;
}
|
일반 코드와 조금 다른점은 랜덤 숫자를 30개를 뽑을 것이라서 for문의 조건값을 간단하게 30으로 써도 되지만 sizeof(arrat)/sizeof(int)로 작성하였다.
그 이유는 만약 배열의 크기가 바뀌면 for문의 조건도 바꿔줘야하기 때문이다.
만약 배열의 크기가 30이 아닌 100으로 수정하고 싶으면 배열의 크기를 변경하는 동시에 for문의 조건도 i < 100 형식으로 변경해주어야 한다.
하지만 for문의 조건값을 배열의 크기만큼 반복할 수 있도록 코드를 작성하면 배열의 크기만 변경하면 되므로 실수도 방지할 수 있고 나중에 귀찮지 않다.
#include <stdio.h>
int main() {
int array[30];
printf("array size : %d\n", sizeof(array));
return 0;
}
|
위 코드에서 사용된 sizeof()함수는 자료형의 크기를 구하는 함수이다. 코드를 실행해보면 결과가 array의 크기인 30이 아닌 120이 출력이 된다.
분명히 sizeof()함수는 자료형의 크기를 구하는 함수라고 했고, 배열 array의 크기는 30으로 설정했는데 120이 출력이 된다. 왜 그럴까?
그 이유는 C언어에서 int 자료형의 크기는 4Byte이며, 배열 array의 크기가 30이므로 4Byte 공간을 차지하는 공간이 30개가 있는 것이다.
그래서 sizeof(array)만 사용하면 우리가 원하는 30이 아니라 120이 출력이 되는 것이다! 그 다음에 해야할 것은 120이라는 숫자를 실제 배열의 크기 30으로 만드는 방법이다.
#include <stdio.h>
int main() {
int array[30];
printf("array size : %d\n", sizeof(array)/sizeof(int));
return 0;
}
|
int 자료형의 크기는 4Byte라고 했다. 그래서 sizeof(array)를 sizeof(int)로 나누어주었다. 즉 120/4 연산을 한 것이다. 그래서 결과 값은 우리가 원하는 실제 배열 array의 크기인 30이 출력이 된다.
앞으로 배열의 크기만큼 반복문을 돌릴 때는 반복문의 조건값을 단순히 숫자로 적는 것보다 위 코드처럼 적도록 노력하자.
'언어 > C언어' 카테고리의 다른 글
[C언어] Queue 구현하기 (0) | 2020.04.01 |
---|---|
[C언어] 공약수 찾는 방법 (0) | 2020.03.23 |
[C언어] 약수 구하는 방법 (0) | 2020.03.21 |
[C언어] 문자열 제대로 비교하는 방법 (1) | 2020.03.21 |
[C언어] 버블 정렬(Bubble Sort) 구현하는 방법 (0) | 2020.03.13 |