ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C Language] 30. 2차원 배열 - C 언어
    CSE/C Language 2015. 7. 18. 14:50

    1. 2차원 배열의 정의

     2차원 배열은 다음과 같은 형식으로 정의한다.



      배열요소형    배열명[첨자1][첨자2]; 



     2차원 배열은 1차원 배열의 집합체이기 때문에 '배열의 배열'이라고 불리며 행과 열로 구성된다.


     2차원 배열이기 떄문에 당연히 첨자는 2개가 필요하며, 1차원과 같이 배열요소는 0부터 시작한다.


     첨자 1은 행을 첨자 2는 열을 의미하는데 둘의 순서는 바뀔 수 없다.





    2. 2차원 배열의 초기화 

     2차원 배열의 초기화는 행과 열의 개념만 확실하다면 이해하는 데 큰 무리가 없다.


     아래와 같은 방법으로 배열을 초기화 할 수 있다.



     1) int tmp[2][3] = {100};

     2) int tmp[2][3] = {100,};

     3) int tmp[2][3] = {100, 5, 7, 11, 12, 93};

     4) int tmp[2][3] = {{100}, {200}};

     5) int tmp[2][3] = {{2, 3}, {4, 5, 6}};



      1번과 2번은 tmp[0][0] 배열요소만 100으로 초기화되고 나머지는 모두 0으로 초기화 된다.

      3번은 각각의 배열요소에 초기화를 해주고 있는데, 중괄호를 사용하지 않아도 된다는 것을 보이고 있다.





    3. 2차원 배열의 첨자 생략

     첨자를 생략하는 방식은 간결함과 편의성 때문에 많이 사용된다. 이것은 모든 차원의 배열에 해당되는 데, 단지 행의 개수만 생략이 가능하다. 만약 열의 개수까지 생략해 버리면 컴파일러는 배열의 형식을 파악할 수 없어서 에러 메시지를 내보낼 것이다.



     int tmp[][] = {{5, 4, 7}, {12, 52}};


     행의 개수는 2인 것이 확실한데, 열의 개수는 위의 초기화만으로는 명확하게 알 수 없다. 1행의 5, 4, 7 다음에 생략된 열의 개수를 컴파일러가 파악할 수 없기 때문이다. 그러므로 tmp 배열의 tmp[][]가 아닌 tmp[][3] 이나 tmp[][4]로 지정함으로써 5, 4, 7이나 12, 52 다음에 얼마만큼의 요소가 생략되었는 지 파악할 수 있도록 컴파일러에게 알려준다.





    4. 2차원 배열의 응용

     성적관리 프로그램을 작성해 봄으로써 2차원의 원리를 이해해 보자.




    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    /*
     * array.c
     *
     *  Created on: 2015. 7. 16.
     *      Author: Yeonsu
     */
     
    #include <stdio.h>
     
     
    int main(void) {
     
        int i, j;
        int grade[3][3];
        int total, avg;
     
        puts("3 사람의 국, 영, 수 성적을 입력하세요.");
     
        for (i = 0; i < 3; i++)
            for (j = 0; j < 3; j++)
                scanf("%d", &grade[i][j]);
     
        for (i = 0; i < 3; i++) {
            total = 0;
     
            for (j = 0; j < 3; j++) {
                printf("%d ", grade[i][j]);
                total += grade[i][j];
            }
     
            avg = total / 3;
     
            printf("%d %d ", total, avg);
     
            if (avg >= 90) puts("A");
            else if ((avg < 90) && (avg >= 80)) puts("B");
            else if ((avg < 80) && (avg >= 70)) puts("C");
            else if ((avg < 70) && (avg >= 60)) puts("D");
            else puts("F");
        }
     
        return 0;
    }
     
    cs
















    댓글

Designed by Tistory.