728x90
728x90
다차원 배열 : 2차원 이상의 배열
다차원배열 선언
int arr[100] // 40바이트 할당, 1차원배열, 선
int arr[10][10] // 10*10, 2차원배열, 면
int arr[5][5][5] // 5*5*5, 3차원배열

 

2차원배열의 선언 : 2차원적 메모리 구조를 구성

12개*4바이트 = 48바이트로 구성되는 배열이 만들어짐.

2차원 배열 요소 접근 방법
#include <stdio.h>

int main()
{
    int arr[3][3];
    arr[0][0]=2; // 첫 번째 요소
    arr[1][0]=4; // 두번째 행 첫번째 요소
    arr[2][2]=8; // 마지막 요소
    

    return 0;
}

 

예제

#include <stdio.h>

int main()
{
    int somang[4][2];
    //int somang[8]; 1차원배열로 바꿀 경우도 생각해 볼 것
    int i,j;
    int popu;
    
    // 가구별 거주인구 입력
    for(i=0; i<4; i++) {
        for(j=0; j<2; j++) {
            printf("%d 층 %d 호 인구 입력 : ", i+1, j+1);
            scanf("%d", &somang[i][j]);
        }
    }
    
    // 소망빌라 층별 인구 수 출력
    for(i=0; i<4; i++) {
        popu=0;
        for(j=0; j<2; j++) {
            popu+=somang[i][j];
        }
        printf("%d 층 전체 인구 : %d \n", i+1, popu);
    }
    
    return 0;
}

 

다차원 배열의 실제 메모리 구성

1차원 배열과 동일하나 ** 접근 방법을 2차원적으로 해석할 뿐이다 **
2차원적으로 이해하는 습관을 가지자.
(시스템의 메모리구조는 1차원적이라 플랫하게 할당되긴 한다)

 

 

2차원배열 선언과 동시에 초기화
// 행 단위로 모든 요소를 초기화
int somag[3][3]={
	{1,2,3},
	{4,5,6},
	{7,8,9},
};

// 행 단위로 일부 요소만 초기화
// 나머지는 0으로
int somag[3][3]={
	{1},
	{4,5},
	{7,8,9},
};

// 1차원 배열 형태의 초기화
int somag[3][3]={1,2,3 4,5,6 7}; 
// 문법적으로는 가능하나 비추
// 내부중괄호를 활용할 것

 

초기화 리스트에 의한 배열 크기의 결정

1차원 배열의 예

int arr[] = {1,2,3,4,5};

2차원 배열의 예

int arr[][] = {1,2,3,4,5,6,7,8}; //에러
int arr[][4] = {1,2,3,4,5,6,7,8}; 
int arr[][2] = {1,2,3,4,5,6,7,8};

 

3차원 배열의 선언과 의미

3차원적 메모리 구조를 의미
일반적으로 필요 앖고 개념만 이해할 것

int a[3][3][3]

 

 

연습문제

1. 가로의 길이가 9, 세로의 길이가 3인 int형 2차원 배열을 선언하여 구구단 2,3,4단을 저장 후 출력하라 (흰트 : 2중 for문)

더보기
#include <stdio.h>

int main()
{
    
    int arr[3][9];
    //2,3,4단 출력
    for(int i=0; i<3; i++){
        for(int j=0; j<9; j++) {
            // 0 + 2, 3, 4
            arr[i][j] = (i+2)*(j+1); //구구단 결과값
            printf("%d x %d = %d\n", i+2, j+1, arr[i][j]);        
        }
    }

    return 0;
}

 

2. 생략, 

3. 3명의 학생 국영수 3 과목의 점수를 입력한 후 4행에는 각 과목의 총점,
4열에는 각 학생 총점을 계산하는 프로그램을 제작해라.

더보기

https://karen0117.tistory.com/52 참고

#include <stdio.h>

int main()
{
    
    int arr[4][4];
    // 행은 과목
    // 열은 사람
    
    int studentTotal;
    int subjectTotal;
    int total = 0;
    
    // 학생별 정보 입력
    for(int i=0; i<3; i++) {
        studentTotal=0;
        
        printf("%d 번째 학생의 점수를 입력하시오\n", i+1);
        
        // 과목별 성적 입력
        for(int j=0; j<3; j++) {
            scanf("%d", &arr[i][j]);
            studentTotal += arr[i][j];
        }
        
        arr[i][3] = studentTotal; //학생별 총점
        total += studentTotal;
        //printf("%d\n",  arr[i][3]);
    }
    
    // 과목별 총점
   for(int i=0; i<3; i++) 
   {
        subjectTotal=0;
        
        for(int j=0; j<3; j++) {
             subjectTotal +=  arr[j][i];
        }
        //마지막에 대입
        arr[3][i] = subjectTotal;
    }
    arr[3][3] = total;
    
    
    // 합쳐서 보여주는 부분
    for(int i=0; i<4; i++) {
        for(int j=0; j<4; j++) {
            printf("%d", arr[i][j]);
        }    
        printf("\n");
    }


    return 0;
}

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v