오늘 6, 7교시에 프로그래밍을 했다. 프로그래밍 시간에 여러 예제를 풀었는데 그중에 가장 헤맸던 평균 구하기 문제에 대해서 글을 올리기로 했다.
사실 보통 평균 구하기 문제는 scanf로 입력받고 입력받은 수들을 더해서 입력받은 수들의 갯수 만큼 나눠주면 쉽게 구하는 문제인데 오늘 했던 평균 구하기 문제는 처음에 입력받을 수들의 갯수를 입력받고 평균을 구하는 문제였다. 아래의 소스코드가 최종적으로 구한 답인데 이렇게 되는데 꽤 시간이 걸렸다. 왜냐하면 이걸 굳이 배열을 이용해서 풀려고 했기 때문이다. 처음에 했던 생각은 먼저 입력받을 수들의 갯수를 입력받고 그 입력받은 값으로 int형 배열을 선언하려고 했다.(예 : int a[i]) 그리고 배열을 선언하고 for문을 열어서 배열에 값들을 입력받으려고 했는데 오류가 나서 결국 다시 생각해서 이 소스코드를 작성했다.
이렇게 배열로 삽질을 했으니 배열에 대해서 다시 공부를 해봤다. 그리고 내가 썼던 소스코드가 왜 오류를 냈는지 바로 알 수 있었다. 배열의 길이를 선언할 때는 상수만 사용해야 했기 때문이다. 그런데 내 기억으로는 어디선가 인덱스 넣는 대괄호 안에 변수를 넣는 걸 본적이 있는 것 같아서 헷갈린다. 아니면 처음에 배열을 선언할 때만 배열의 길이를 상수로 적어야 하고 그냥 인덱스 넣어줄 때는 변수가 들어가도 되는 것일지도 모른다. 이거에 대해서는 좀 더 알아봐야 겠다. 그리고 배열을 조사하면서 또 알게된 점은 C 컴파일러가 배열의 길이를 전혀 신경쓰지 않는다는 점이다. 예를 들면 배열의 길이를 3으로 정해서 인덱스는 0, 1, 2까지 밖에 없는데 인덱스를 3으로 해서 초기화하면 그게 그대로 적용이 된다.
오늘 아래 문제를 풀면서 배열로 삽질을 좀 했는데 삽질도 도움이 된다는 걸 몸소 느꼈다.
대웅아, 저 위에 조건식은 n>=i 보다는 i<=n 요렇게 표현하는게 더 가독성을 높일것같구나.ㅎㅎ 그리고 배열을 선언할때 사이즈를 변수로 넣으면 안되는 이유는, 컴파일과정에서 해당 배열의 메모리 공간을 확보하는데, 상수가 아닌 변수로 넣으면 컴파일 타임에서는 변수값을 참조할 수 없기 때문에 사이즈를 알 수가 없단다.
답글삭제