Phase 2 · C언어 핵심 · 활용

배열 — 데이터 관리

100명의 학생 점수를 저장하려면 100개의 변수가 필요할까요? 아닙니다! 같은 종류의 수많은 데이터를 단 하나의 이름으로 묶어서 효율적으로 관리하는 '배열'에 대해 배웁니다.

예상 학습 시간 : 120분
난이도 : ★★★☆☆ 중급 기초
사전 지식 : Step 06 반복문
다음 단계 : 함수
01

학습 목표

이번 단계를 완료하면 다음 능력을 갖추게 됩니다.

1
배열의 개념과 메모리에 할당되는 방식을 이해한다.
2
배열을 선언하고 초기값을 지정할 수 있다.
3
인덱스(0부터 시작)를 이용하여 원하는 데이터에 접근한다.
4
반복문(for)을 사용하여 배열 전체 데이터를 일괄 처리한다.
5
배열 데이터의 합계, 평균, 최댓값 등을 구하는 알고리즘을 작성한다.
6
sizeof 연산자를 이용해 배열의 요소 개수를 자동 계산한다.
02

배열이란?

배열(Array)은 같은 종류의 데이터를 여러 개 저장할 수 있는 연속된 저장 공간입니다.

예를 들어 int score[5]; 라고 선언하면 다음과 같이 정수를 담을 수 있는 5칸짜리 상자가 만들어집니다.

90
score[0]
80
score[1]
75
score[2]
95
score[3]
85
score[4]

각 상자의 고유 번호(0부터 시작)를 인덱스(Index)라고 부릅니다.

03

배열 선언과 초기화

1. 선언 후 값 하나씩 넣기

⚙️ C
int score[5]; // 5칸짜리 정수 배열 생성

score[0] = 90;
score[1] = 80;
score[2] = 75;
score[3] = 95;
score[4] = 85;

2. 선언과 동시에 초기화 (가장 많이 씀)

⚙️ C
// 중괄호 {} 안에 값을 순서대로 나열합니다.
int score[5] = {90, 80, 75, 95, 85};

// 초기값을 넣는다면 크기(5)를 생략해도 컴파일러가 자동으로 알아냅니다.
int score2[] = {90, 80, 75, 95, 85};
04

배열의 인덱스는 무조건 0부터!

배열 범위를 벗어난 접근 위험 (Out-of-bounds)

int data[10]; 배열은 10개의 공간을 갖지만, 번호표(인덱스)는 0부터 시작해서 9에서 끝납니다.

만약 실수로 data[10] = 99; 처럼 접근하면 프로그램이 튕기거나 다른 중요한 메모리를 건드려 심각한 버그(해킹 취약점 등)를 유발할 수 있습니다. C언어는 이걸 자동으로 막아주지 않으니 개발자가 꼭 주의해야 합니다!

05

배열과 for문의 강력한 조합

배열은 for 반복문과 만날 때 진정한 힘을 발휘합니다. 인덱스 자리에 변수 i를 넣으면 됩니다.

⚙️ C
#include <stdio.h>
int main() {
    int score[5] = {90, 80, 75, 95, 85};

    // i는 0부터 4까지 증가합니다 (총 5번)
    for (int i = 0; i < 5; i++) {
        printf("%d번째 학생 점수: %d\n", i + 1, score[i]);
    }
    return 0;
}
06

실습: 합계와 평균 구하기

📊
Practice 01
배열 내 모든 점수의 통계

사용자로부터 5명의 점수를 입력(scanf) 받아서 배열에 차곡차곡 쌓은 뒤, 한꺼번에 연산합니다.

⚙️ C
#include <stdio.h>
int main() {
    int score[5];
    int sum = 0;
    double avg;

    // 1. 입력 받기 (scanf와 배열)
    for (int i = 0; i < 5; i++) {
        printf("%d번째 학생 점수: ", i + 1);
        scanf("%d", &score[i]); // 주소 기호 &를 잊지 마세요!
        
        sum += score[i]; // 입력받자마자 sum에 누적
    }

    // 2. 평균 계산 및 출력
    avg = sum / 5.0;
    printf("\n총점: %d점 | 평균: %.2lf\n", sum, avg);

    return 0;
}
08

sizeof 연산자로 배열 크기 자동 계산

배열의 크기가 나중에 바뀔 것에 대비해, 하드코딩(5 같은 숫자를 직접 치는 것) 대신 요소의 개수를 자동으로 구하는 공식입니다.

⚙️ C
int score[] = {90, 80, 75, 95, 85, 100, 60}; // 나중에 데이터가 늘어나도

// 배열 요소의 개수 = (배열 전체의 메모리 크기) / (한 칸의 메모리 크기)
int count = sizeof(score) / sizeof(score[0]);

// 7 이라는 숫자 대신 count 변수를 사용하면 코드를 수정할 필요가 없습니다.
for (int i = 0; i < count; i++) { ... }
09

배열 복사 시 주의사항

대입 연산자(=)로 배열을 통째로 복사할 수 없습니다!

int a[5] = {1, 2, 3}; int b[5]; b = a; (X) 에러 발생!
배열을 복사하려면 반드시 for 반복문을 돌며 한 칸씩 b[i] = a[i]; 로 옮겨 담아야 합니다.

10

STEP 07 최종 프로젝트

🚀 Mission

학생 성적 종합 관리 프로그램

10명의 학생 점수를 입력받아 배열에 저장하고, 통계를 도출해 내는 프로그램을 작성하세요.

  • 1. 입력: 10명의 점수 입력 (for문, scanf)
  • 2. 출력: 10명 점수 리스트 나열
  • 3. 통계: 총점, 평균, 최고점, 최저점 계산 및 출력
  • 4. 분류: 60점 이상 합격자 수, 60점 미만 불합격자 수 계산

[도전 과제] 배열 역순 출력

입력된 10개의 점수를 배열 인덱스를 뒤에서부터 접근(for(int i = 9; i >= 0; i--))하여 입력된 순서의 역순으로 출력해 보세요.

11

STEP 07 완료 체크리스트

배열이 메모리 상에 연속적으로 생성되는 구조를 이해한다.
배열 선언 시 크기 지정 및 중괄호{}를 이용한 초기화를 할 수 있다.
배열의 인덱스가 0부터 시작한다는 사실을 절대 잊지 않는다.
for문과 인덱스 변수 i를 조합해 배열 전체를 순회(접근)할 수 있다.
sizeof 연산자를 이용해 배열 요소의 개수를 동적으로 계산할 수 있다.
배열 데이터 안에서 최댓값, 최솟값을 찾는 알고리즘 원리를 이해한다.
데이터 관리의 시작

이제 여러분은 10개든, 10,000개든 엄청난 양의 데이터를 단 하나의 배열 변수로 손쉽게 관리할 수 있게 되었습니다. "입력 → 배열 저장 → 반복+조건 처리 → 출력"의 파워를 실감해 보세요.

이전 : Step 06 Step 08 : 함수