ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [배열] 배열
    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

    댓글