1 / 61

Chapter 8

Chapter 8. Arrays. 원소 간의 연관성이 있는 자료 구조화 형 데이터 구성 원소들 간에 연관이 있을 때 이를 표현한 형 기본형의 확장으로 사용자가 새로운 형을 선언 궁극적으로 C++ 등에서는 더욱 확대됨 배열 , Structure 형 , 문자열 , union. 구조화 데이터. C 언어는 배열을 연속된 메모리 위치로 봄 . 실제 메모리 배정은 다를 수 있으나 연속된 메모리로 봄 배열은 실제 포인터와 위치계산 방법으로 구성 0 번부터 위치 부여 ( 첨자 , 인덱스 ). 배열.

brede
Download Presentation

Chapter 8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 8 Arrays

  2. 원소 간의 연관성이 있는 자료 구조화 형 데이터 구성 원소들 간에 연관이 있을 때 이를 표현한 형 기본형의 확장으로 사용자가 새로운 형을 선언 궁극적으로 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. 선언 형 배열이름 [배열 크기] 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. int a[10][20] 행(row), 열(column) Row-major 위치 계산 a[i][j]  a+(i*20+j)*sizeof(a)로 계산하여 메모리에 연속으로 저장 및 접근 2차원 배열

  43. Figure 8-28

  44. Figure 8-29

  45. Figure 8-30

  46. 초기화 int table[2][3]={0,1,2,3,4,5}; int table[2][3]={{0,1,2},{3,4,5}}; int table[][3]= {{0,1,2},{3,4,5}}; int table[2][3]={0}; 값 입력 뒤 예문 참조 값 전달 전체 전달 : 배열 이름 : table 행만 전달 : 행 부분까지만 표시 : table[1] table, table[0], table[1]도 포인터 값이다…. 초기화/값입력

  47. Figure 8-31

  48. Figure 8-32

  49. 장방형 값 채우기 매트릭스 곱하기 히스토그램 구하기 재미있는 예제 프로그램들

  50. Figure 8-33

More Related