c 프로그래밍 프로젝트contents.kocw.net/document/cd0004-07(2013-10-21).pdf ·  ·...

14
C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 컴퓨터공학과

Upload: trantram

Post on 14-Mar-2018

226 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

C 프로그래밍 프로젝트 Chap 16. 다차원 배열

2013.10.21.

오 병 우

컴퓨터공학과

Page 2: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

16-1 2차원 배열

다차원 배열이란 무엇인가?

◈2차원 이상의 배열을 의미함

다차원 배열의 선언

배열 선언 예 몇 차원 배열인가?

int arr[100]

int arr[10][10]

int arr[5][5][5]

1차원 배열

10×10, 2차원배열

5×5×5, 3차원 배열

Department of Computer Engineering 2

Page 3: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

16-1 2차원 배열

2차원 배열의 선언

◈2차원적 메모리 구조를 구성

int main(void)

{

int arr1[4];

int arr2[3][4];

. . . . .

4개인게 3개 있다.

2차원 배열의 선언 방식 → TYPE arr[세로길이][가로길이];

Department of Computer Engineering 3

Page 4: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

2차원 배열 요소의 접근 방법

배열 생성 0 0 접근

0 1 접근

2 1 접근

일반화

세로 N, 가로 M의 위치에 값을 저장 및 참조

Department of Computer Engineering 4

Page 5: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

16-1 2차원 배열

실행결과

Department of Computer Engineering 5

Page 6: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

16-1 2차원 배열

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

◈1차원 배열과 동일하다.

다만 접근 방법을 2차원으로 해석할 뿐이다.

int a[2][3]

3개인게 2개 있다.

3

3

2

6개인게 1개 있는

것과 같다.

6

Page 7: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

2차원 배열의 메모리상 할당의 형태

Department of Computer Engineering 7

1차원적 메모리의 주소 값

2차원적 메모리의 주소 값

실제 메모리는 1차원의 형태로 주소 값이 지정이 된다.

따라서 아래와 같은 형태로 2차원 배열의 주소 값이 지정된다.

실행결과

2차원 배열의

실제 메모리

할당형태

Page 8: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

2차원 배열 초기화

초기화 리스트 안에는 행 단위로 초기화할 값들을

별도의 중괄호로 명시한다.

채워지지 않은 빈 공간은 0으로 채워진다.

Department of Computer Engineering 8

Page 9: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

2차원 배열 초기화

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

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

별도의 중괄호를 사용하지 않으면 좌 상단부터 시작해서

우 하단으로 순서대로 초기화된다.

한 줄에 표현해도 된다.

마찬가지로 빈 공간은 0으로 채워진다.

Department of Computer Engineering 9

Page 10: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

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

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

int arr1[][4]={1, 2, 3, 4, 5, 6, 7, 8};

int arr2[][2]={1, 2, 3, 4, 5, 6, 7, 8};

두 개가 모두 비면 컴파일러가 채워 넣을 숫자를

결정하지 못한다.

세로 길이만 생략할 수 있도록 약속되어 있다.

8 by 1 ??

4 by 2 ??

2 by 4 ??

int arr1[2][4]={1, 2, 3, 4, 5, 6, 7, 8};

int arr2[4][2]={1, 2, 3, 4, 5, 6, 7, 8};

컴파일러가 세로 길이를 계산해 준다.

뒤의 것은

알려줘야 함

Department of Computer Engineering 10

Page 11: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

연습 문제

#include <stdio.h>

int main(void)

{

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

/*

(1) arr1에 저장된 내용은?

(2) arr1에 저장된 내용을 2차원으로 출력할 수 있는

프로그램 코드를 작성하세요.

*/

return 0;

}

Department of Computer Engineering 11

Page 12: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

16-2 3차원! 그 이상의 배열

3차원 배열의 선언과 의미

◈3차원적 메모리 구조를 의미함

◈개념만 이해하면 충분, 일반적으로 필요 없다.

int a[3][3][3]

“몇 개인게 몇 개 있다” 개념 이해

Department of Computer Engineering 12

Page 13: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

16-2 3차원! 그 이상의 배열

3차원 메모리 구조

int a[2][3][4]

a[0][0][0] a[0][0][1] a[0][0][2] a[0][0][3]

a[0][1][0] a[0][1][1] a[0][1][2] a[0][1][3]

a[0][2][0] a[0][2][1] a[0][2][2] a[0][2][3]

a[1][0][0] a[1][0][1] a[1][0][2] a[1][0][3] X2

X3

X4

a[0][0][0]

a[0][0][1]

a[0][0][2]

a[0][0][3]

a[0][1][0]

a[0][1][1]

a[0][1][2]

a[0][1][3]

a[0][2][0]

a[0][2][1]

a[0][2][2]

a[0][2][3]

a[1][0][0]

a[1][0][1]

a[1][0][2]

a[1][0][3]

a[1][1][0]

a[1][1][1]

a[1][1][2]

a[1][1][3]

a[1][2][0]

a[1][2][1]

a[1][2][2]

a[1][2][3]

Department of Computer Engineering 13

Page 14: C 프로그래밍 프로젝트contents.kocw.net/document/CD0004-07(2013-10-21).pdf ·  · 2013-12-03C 프로그래밍 프로젝트 Chap 16. 다차원 배열 2013.10.21. 오 병 우

3차원 배열 예제

Department of Computer Engineering 14

실행결과