2차원 배열 선언과 요소 사용

 

  • 2차원 배열은 1차원 배열을 요소로 가지는 1차원 배열이다.
  • 논리적으로 [N] x [N] 행렬과 구조가 같다.
  • 물리적으로 1차원 배열을 첨자 순서대로 메모리 공간에 나열한 것이다.
  • 배열명 옆에 있는 대괄호를 '첨자' 라 칭한다.
  • 배열에서 특정 요소를 구분하기 위해서 첨자 '[]'를 사용한다.

 

예시

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int main(void) {

    int stu[3][4];
    int tot;
    double avg;

    int i, j;

    for (i = 0; i < 3; i++) {

        for (j = 0; j < 4; j++) {

            scanf("%d", &stu[i][j]);

        }
    }

    for (i = 0; i < 3; i++) {
        tot = 0;
        for (j = 0; j < 4; j++) {
            tot += stu[i][j];

        }
        avg = tot / 4.0;
        printf("총점: %d, 평균 : %.1lf\n", tot, avg);
    }

    return 0;
}

 

실행결과
72 80 95 60
68 98 83 90
75 72 84 90
총점: 307, 평균 : 76.8
총점: 339, 평균 : 84.8
총점: 321, 평균 : 80.2

 

학생 3명 당 각 4과목씩 과목별 점수를 입력 받아서 총점과 평균을 출력하는 프로그램이다. main()에서 stu배열을 선언한 뒤, 2중 for문을 이용하여서 각 배열의 요소에 값을 입력받고, 2중 for문을 이용하여서 출력한다.

 

2중 for문에서 바깥쪽 for문이 배열의 행에 해당하고, 안쪽 for문이 배열의 열에 해당한다.

 

2차원 char 배열

 

예시 1 (char 배열 초기화)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    char animal[5][20];
    int i;
    int count;

    count = sizeof(animal) / sizeof(animal[0]);

    for (i = 0; i < count; i++) {

        scanf("%s", animal[i]);
    }

    for (i = 0; i < count; i++) {

        printf("%s", animal[i]);
    }

    return 0;

}

 

실행결과
dog
tiger
rabbit
horse
cat
dog tiger rabbit horse cat

 

5 * 20 animal 문자열 배열을 선언한다. for문에서 배열의 행 수를 이용하기 위해서 count 변수를 선언하고 초기화한다. 행의 수는 전체 배열의 크기를 첫번째 행의 크기로 나눈 몫이다. 이를 통해 구한 count를 이용하여서 animal에 문자열을 입력받고 출력한다.

 

여러개의 문자열은 char배열을 이용하여 처리한다. scanf()에서 배열명의 표현식을 변수로 오해할 수 있지만, 2차원 배열에서는 부분배열의 이름이 된다. 이름이 된다는 것은 곧, 주소값을 인수로 준다는 것이고, 이는 scanf() 인수전달조건을 만족한다.

 

예시 2 (char 배열의 초기화 방법)

#include <stdio.h>

int main(void) {

    char animal1[5][10] = {
        {'d','o','g','\0'},
        {'t','i','g','e','r','\0'},
        {'r','a','b','b','i','t','\0'},
        {'h','o','r','s','e','\0'},
        {'c','a','t','\0'}
    };

    char animal2[][10] = { "dog","tiger", "rabbit","horse","cat" };
    int i;

    for (i = 0; i < 5; i++) {
        printf("%s ", animal1[i]);
    }
    printf("\n");
    for (i = 0; i < 5; i++) {
        printf("%s ", animal2[i]);
    }

    return 0;
}

 

실행결과
dog tiger rabbit horse cat
dog tiger rabbit horse cat

 

char 배열을 선언하고 초기화할 때, 각 요소에 문자 상수로 초기화 할 수 있다(animal1 배열). 또는 문자열 상수로 초기화 할 수 있다.(animal2 배열) 문자열 상수로 초기화하면, 문자열 상수의 개수가 배열의 행의 수가 된다.

 

+ Recent posts