Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 이해하는 1차원·2차원 배열 처리 완벽 가이드

C 프로그래밍에서 배열은 여러 개의 데이터를 하나의 이름으로 효율적으로 관리할 수 있게 해주는 핵심 자료구조입니다. 이 글에서는 1차원 배열과 2차원 배열에 값을 저장하고(입력) 저장된 값을 꺼내는(출력) 방법을 예제 코드와 함께 단계별로 살펴보겠습니다.

1차원(1D) 배열 처리

값 저장하기 (입력)

1차원 배열에 값을 저장하려면 반복문(for)을 사용하여 각 인덱스에 순서대로 값을 입력합니다.

int num[5];
int i;
for(i = 0; i < 5; i++){
    scanf("%d", &num[i]);
}

저장된 값 가져오기 (출력)

배열에 저장된 값을 읽어올 때도 마찬가지로 반복문을 활용하여 인덱스를 순회하며 출력합니다.

int num[5];
int i;
for(i = 0; i < 5; i++){
    printf("%d", num[i]);
}

예제 프로그램 1: 배열 요소를 역순으로 출력하기

다음은 사용자로부터 배열 요소를 입력받은 뒤, 역순으로 출력하는 C 프로그램입니다.

#include<stdio.h>
void main(){
    // 배열 선언 (런타임 시 입력)
    int array[5], i;
    // 배열에 요소 입력받기
    printf("Enter elements into the array: \n");
    for(i = 0; i < 5; i++){
        printf("array[%d] :", i);
        scanf("%d", &array[i]);
    }
    // 배열 요소를 역순으로 출력
    printf("The elements from the array displayed in the reverse order are : \n");
    for(i = 4; i >= 0; i--){
        printf("array[%d] :", i);
        printf("%d\n", array[i]);
    }
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Enter elements into the array:
array[0] :1
array[1] :2
array[2] :3
array[3] :4
array[4] :5
The elements from the array displayed in the reverse order are:
array[4] :5
array[3] :4
array[2] :3
array[1] :2
array[0] :1

2차원(2D) 배열 처리

값 저장하기 (입력)

2차원 배열은 행(row)과 열(column)로 구성되므로, 중첩 반복문을 사용하여 값을 저장합니다.

int a[4][3];
int i, j;
for(i = 0; i < 4; i++){
    for(j = 0; j < 3; j++){
        scanf("%d", &a[i][j]);
    }
}

저장된 값 가져오기 (출력)

2차원 배열의 값을 출력할 때도 동일하게 이중 for문을 사용하여 모든 요소를 순회합니다.

int a[4][3];
int i, j;
for(i = 0; i < 4; i++){
    for(j = 0; j < 3; j++){
        printf("%d", a[i][j]);
    }
}

예제 프로그램 2: 두 배열의 합과 곱 계산하기

다음은 런타임에 값을 입력받아 두 개의 2차원 배열 A와 B의 요소별 합(sum)과 곱(product)을 계산하여 출력하는 C 프로그램입니다.

#include<stdio.h>
void main(){
    // 배열 선언 (런타임 시 입력)
    int A[2][3], B[2][3], i, j;
    int sum[2][3], product[2][3];
    // for문을 이용해 배열 A에 요소 입력
    printf("Enter elements into the array A: \n");
    for(i = 0; i < 2; i++){
        for(j = 0; j < 3; j++){
            printf("A[%d][%d] :", i, j);
            scanf("%d", &A[i][j]);
        }
        printf("\n");
    }
    // for문을 이용해 배열 B에 요소 입력
    for(i = 0; i < 2; i++){
        for(j = 0; j < 3; j++){
            printf("B[%d][%d] :", i, j);
            scanf("%d", &B[i][j]);
        }
        printf("\n");
    }
    // 합 계산 후 출력
    printf("Sum array is : \n");
    for(i = 0; i < 2; i++){
        for(j = 0; j < 3; j++){
            sum[i][j] = A[i][j] + B[i][j];
            printf("%d\t", sum[i][j]);
        }
        printf("\n");
    }
    // 곱 계산 후 출력
    printf("Product array is : \n");
    for(i = 0; i < 2; i++){
        for(j = 0; j < 3; j++){
            product[i][j] = A[i][j] * B[i][j];
            printf("%d\t", product[i][j]);
        }
        printf("\n");
    }
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Enter elements into the array A:
A[0][0] :2
A[0][1] :3
A[0][2] :4
A[1][0] :1
A[1][1] :2
A[1][2] :3
B[0][0] :4
B[0][1] :5
B[0][2] :3
B[1][0] :2
B[1][1] :1
B[1][2] :2
Sum array is:
6 8 7
3 3 5
Product array is:
8 15 12
2 2 6

정리

1차원 배열은 하나의 for문으로, 2차원 배열은 행과 열을 처리하기 위한 이중 for문으로 입출력을 처리한다는 점이 핵심입니다. 배열의 크기를 벗어나지 않도록 인덱스 범위(0부터 크기-1까지)를 항상 주의 깊게 확인하는 습관을 들이면 안전한 코드를 작성할 수 있습니다.