-
[배열] 배열Stage/Computer Science 2021. 5. 27. 22:49
학습목표
배열을 정의하고 사용하는 방법을 설명할 수 있다.
1. 메모리
C에는 다음과 같은 여러 자료형이 있고, 각각의 자료형은 서로 다른 크기의 메모리를 갖는다.
bool: 1byte char: 1byte int: 4byte float: 4byte long: 8byte double: 8byte string: ?byte
컴퓨터에서는 RAM이라는 물리적 칩이 메모리 역할을 한다.
- 쉽게 생각하면 위 사진에 나와있는 조그만 여러 개의 노란색 사각형이 메모리를 의미하고, 작은 사각형 하나는 1바이트를 의미한다.
2. 배열
배열은 같은 자료형의 데이터를 메모리상에 연속으로 저장하고 이를 하나의 변수로 관리하기 위해 사용된다.
#include <cs50.h> #include <stdio.h> int main(void) { // Scores int scores[3]; scores[0] = 72; scores[1] = 73; scores[2] = 33; // Print average printf("Average: %i\n", (scores[0] + scores[1] + scores[2]) / 3); }
- int scores[3]; 을 보자. int 자료형, 크기는 3, 변수명은 scores라는 배열을 만들겠다는 의미이다.
- 배열의 인덱스는 0부터 시작하기 때문에 첫 인덱스는 1, 2, 3이 아닌 0, 1, 2 이다.
3. 전역 변수
배열의 크기를 정해주는 N 이라는 변수를 새로 선언한 코드를 살펴보자.
#include <cs50.h> #include <stdio.h> const int N = 3; int main(void) { // 점수 배열 선언 및 값 저장 int scores[N]; scores[0] = 72; scores[1] = 73; scores[2] = 33; // 평균 점수 출력 printf("Average: %i\n", (scores[0] + scores[1] + scores[2]) / N); }
- N이 고정된 값(상수) 이라면 값을 선언할 때 const를 붙여준다. 전역 변수라는 의미인데 코드 전반에 거쳐 바뀌지 않는 값임을 뜻한다.
- N의 값을 5라고 지정한다면, scores[3], scores[4]를 선언하고 값을 저장해줘야 하는 번거로움이 남아있다.
4. 배열의 동적 선언 및 저장
루프와 함수를 선언하여 좀 더 동적인 코드를 작성해보자.
#include <cs50.h> #include <stdio.h> float average(int length, int array[]); int main(void) { // 사용자로부터 점수의 갯수 입력 int n = get_int("Scores: "); // 점수 배열 선언 및 사용자로부터 값 입력 int scores[n]; for (int i = 0; i < n; i++) { scores[i] = get_int("Score %i: ", i + 1); } // 평균 출력 printf("Average: %.1f\n", average(n, scores)); } //평균을 계산하는 함수 float average(int length, int array[]) { int sum = 0; for (int i = 0; i < length; i++) { sum += array[i]; } return (float) sum / (float) length; }
'Stage > Computer Science' 카테고리의 다른 글
[배열] 문자열의 활용 (0) 2021.05.27 [배열] 문자열과 배열 (0) 2021.05.27 [배열] 디버깅 (0) 2021.05.27 [배열] 컴파일링 (0) 2021.05.27 [C언어] 하드웨어의 한계 (0) 2021.05.27 - 쉽게 생각하면 위 사진에 나와있는 조그만 여러 개의 노란색 사각형이 메모리를 의미하고, 작은 사각형 하나는 1바이트를 의미한다.