본문 바로가기

Programming/C

C 언어 | 배열

학습목표

배열을 정의하고 사용하는 방법을 설명할 수 있다. 

 

배열

아래와 같이 세 개의 점수를 저장하고 평균을 출력하는 프로그램을 예로 들어보자.

 

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    // Scores
    int score1 = 72;
    int score2 = 73;
    int score3 = 33;

    // Print average
    printf("Average: %i\n", (score1 + score2 + score3) / 3);
}

 

만약 점수의 개수가 더 많아진다면 이 프로그램은 많은 부분을 수정해야 한다(변수 선언, 계산식 등). 이 때 활용할 수 있는 것이 배열이다. 배열은 같은 자료형의 데이터를 메모리상에 연이어서 저장하고 이를 하나의 변수로 관리한다. 위 코드에서 배열을 사용하면 다음과 같다.

 

 

#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부터 시작하기 때문에, scores의 인덱스는 0, 1, 2 세 개가 있다. 이 인덱스를 변수명 뒤 대괄호 [] 사이에 입력하면 원하는 위치에서 값을 저장하고 불러올 수 있다.

 

하지만 이는 여전히 점수의 개수가 바뀌는 상황에서 제약이 많다. 배열을 보다 동적으로 사용하려면 어떻게 해야할까?

 

 

전역변수

전역변수는 코드 전반에 거쳐 바뀌지 않는 값을 지정할 때 사용한다.

#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);
}

 

앞선 코드에서 'const int N = 3'이 추가된 모습이다. N이 고정된 상수값이라면 그 앞에 const를 붙인다. 전역변수의 선언으로 점수 개수가 바뀌었을 때 수정해야하는 코드가 줄어들었다. 하지만 여전히 배열 인덱스마다 점수를 지정해줘야 하는 불편함이 있다.

 

* 관례적으로 전역변수의 이름은 대문자로 표기한다.

 

 

배열의 동적 선언 및 저장

앞선 예시보다 동적인 평균 계산 프로그램을 만들고 싶다면 다음과 같다. 

 

#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;
}

 

이 프로그램은 get_int()와 루프 for를 사용해 사용자에게 직접 배열의 크기와 값을 입력받고, 각 인덱스에 저장한다. 그리고 average라는 사용자 정의 함수를 따로 선언하여 평균을 구한다. 이 때 입력값은 lenth(배열의 크기)와 array[](배열)이고 출력값은 float로 나타낸 평균값이다.

 

이러한 방법 외에도 다양한 방법을 통해 배열을 활용한 동적인 프로그램을 작성할 수 있다.

 

 

 


 

이 글은 네이버 부스트 코스 David J. Malan(데이비드 J. 말란) 교수님의 모두를 위한 컴퓨터 과학(CS50 2019) 강의를 수강하고 작성한 글입니다. 본 강좌 내 실습에서는 CS50 Sandbox를 사용합니다.

 

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org