Download presentation
Presentation is loading. Please wait.
1
Chapter 8 Arrays
2
구조화 데이터 원소 간의 연관성이 있는 자료 구조화 형 배열, Structure형, 문자열, union
데이터 구성 원소들 간에 연관이 있을 때 이를 표현한 형 기본형의 확장으로 사용자가 새로운 형을 선언 궁극적으로 C++ 등에서는 더욱 확대됨 배열, Structure형, 문자열, union
3
배열 C언어는 배열을 연속된 메모리 위치로 봄. 실제 메모리 배정은 다를 수 있으나 연속된 메모리로 봄
배열은 실제 포인터와 위치계산 방법으로 구성 0번부터 위치 부여(첨자, 인덱스)
4
Figure 8-1
5
Figure 8-2
6
Figure 8-3
7
Figure 8-4
8
Figure 8-5
9
배열 선언과 접근 선언 접근 C의 배열의 특징 형 배열이름 [배열 크기] 배열이름[위치]
int sum[100]; char elmt[50]; float avg[100] 접근 배열이름[위치] sum[59], elmt[0], avg[j] 오류: sum[100], elmt[-10], avg[990] 문제는 범위를 넘어도 오류로 나타내지 않음 C의 배열의 특징 속도를 고려 … sum[i] sum+i*sizeof(sum) 범위 검증을 하지 않음 비교연산을 줄임, 범위를 넘어선 자료를 접근해도 오류를 주지 않음 !!!!!
10
Figure 8-6
11
변수 초기화, 우선순위 선언시 초기화 가능 후에 초기화할 수도 있음
Static변수와 전역변수에 대해서는 0으로 초기화할 필요가 없음 number[3]*7 배열이 우선
12
Figure 8-7
13
값 지정 scores[4] = 23; for(i=0;i<25;i++) second[i] = first[i];
for(i=0;i<9;i++) scores[i] = i*2; 값 바꾸기 temp=numbers[1]; numbers[1]=number[3]; numbers[3]=temp; 한 칸씩 밀 때 ---- 배열에서 …. 설명(실습문제) 앞에서 temp1= temp2; temp2=number[i+1]; number[i+1]=temp1; 다른 방법???
14
Figure 8-8
15
Figure 8-9
16
다른 여러 재미있는 처리 예제 값을 제곱하기 값을 읽어서 반대로 출력하기 값을 합하여 평균 구하기 등등
17
반대로 출력 printf("\nYour numbers reversed are: \n");
for (i = readNum - 1, numPrinted = 0; i >= 0; i--) { printf("%3d", numbers[i]); if (numPrinted < 9) numPrinted++; else printf("\n"); numPrinted = 0; } /* else */ } /* for */
18
배열 인자 배열을 함수의 파라미터로 보내기 배열 이름 자체가 포인터임, 따라서 이름 자체를 파라미터로 쓸 수 있음
따라서 포인터를 보내고 받는 개념임 값 전달방식이지만 배열 자체가 포인터이므로 주소전달처럼 처리됨 단, f(num[i])처럼 전달하면 이때는 num[i]의 값이 전달됨
19
Figure 8-10
20
Figure 8-11
21
Figure 8-12
22
Figure 8-13
23
히스토그램 성적분포 구하기 문자인식 영상검색 기울어진 문서 바로 잡기
24
Figure 8-14
25
Figure 8-15
26
Figure 8-16
27
정렬 선택정렬 – 가장 작은 값을 찾아서 정렬 안 된 것 중 제일 앞과 바꿈
버블정렬 – 가장 작은 값을 뒤에서부터 찾으면서 이동시킴 삽입정렬 – 처음부터 정렬된 것에 정렬 안 된 값을 끼워 넣는 방법
28
Figure 8-17
29
Figure 8-18
30
Figure 8-19
31
Figure 8-20
32
Figure 8-21
33
Figure 8-22
34
검색 순차탐색(sequential search) --처음부터 모두 검색 이진탐색 O(n) O(log(n))
정렬된 자료에 한함. 가운데 값을 비교하면서 검색범위를 줄임 ‘n/2’를 적용
35
Figure 8-23
36
순차탐색 /* ==================== seqSearch ====================
Post FOUND: matching index stored in locn address return 1 (found) NOT FOUND: last stored in locn address return 0 (not found) */ int seqSearch (int list[], int last, int target, int *locn) { /* Local Definitions */ int looker; /* Statements */ looker = 0; while (looker < last && target != list[looker]) looker++; *locn = looker; return (target == list[looker]); } /* seqSearch */
37
Figure 8-24
38
Figure 8-25
39
이진탐색 int binarySearch (int list[], int end, int target, int *locn) {
/* Local Definitions */ int first; int mid; int last; /* Statements */ first = 0; last = end; while (first <= last) mid = (first + last) / 2; if (target > list[mid]) /* look in upper half */ first = mid + 1; else if (target < list[mid]) /* look in lower half */ last = mid - 1; else /* found equal: force exit */ first = last + 1; } /* end while */ *locn = mid; return target == list [mid]; } /* binarySearch */
40
Figure 8-26
41
Figure 8-27
42
2차원 배열 int a[10][20] 행(row), 열(column) Row-major
위치 계산 a[i][j] a+(i*20+j)*sizeof(a)로 계산하여 메모리에 연속으로 저장 및 접근
43
Figure 8-28
44
Figure 8-29
45
Figure 8-30
46
초기화/값입력 초기화 값 입력 값 전달 int table[2][3]={0,1,2,3,4,5};
뒤 예문 참조 값 전달 전체 전달 : 배열 이름 : table 행만 전달 : 행 부분까지만 표시 : table[1] table, table[0], table[1]도 포인터 값이다….
47
Figure 8-31
48
Figure 8-32
49
재미있는 예제 프로그램들 장방형 값 채우기 매트릭스 곱하기 히스토그램 구하기
50
Figure 8-33
51
다차원 배열 2차원 배열의 확장 다차원의 경우 마지막 차원까지 표현되지 않으면 주소임 int a[5][6][7][8]
a[i][j][k][l] ((((i*6)+j)*7+k)*8+l)*sizeof(int)
52
Figure 8-34
53
Figure 8-35
54
Figure 8-36
55
여러 가지 예 행과 열의 값 합하기/평균내기 다차원 배열의 응용을 생각해보자!!!
56
Figure 8-37
57
Figure 8-38
58
Figure 8-39
59
Figure 8-40
60
Figure 8-41
61
실습문제 및 예습 실습 예습 1차원 배열의 값을 한 칸씩 오른쪽 또는 왼쪽으로 옮기는 함수를 구함.
첫 번째 값이 1이면 오른쪽, -1이면 왼쪽 아니면 오류임, 오른쪽으로 옮기면 마지막 값이 첫 번째로, 왼쪽은 반대로 됨 어떤 문서를 읽어서 알파벳과 숫자의 개수를 세는 프로그램 작성… 대문자와 소문자는 구별하지 않음 31번, 38번, 52번 예습 9장 19, 21, 22, 28
Similar presentations