2 배열과 구조.

Slides:



Advertisements
Similar presentations
패널자료 분석
Advertisements

전도축제 계획서 *일시 : 2013년 4월 21, 28일 주일 (연속 2주)
이공계의 현실과 미래 제조업 立國 / 이공계 대학생의 미래 준비
임상시험 규정 (최근 변경 사항 중심으로) -QCRC 보수 교육 과정 전달 교육
제 출 문 고용노동부 귀중 본 보고서를 ’ ~ ‘ 까지 실시한 “근로감독관 직무분석 및 교육프로그램 개발에 관한 연구”의 최종보고서로 제출합니다  연구기관 : 중앙경영연구소  프로젝트 총괄책임자 : 고병인 대표.
COMPUTER ARCHITECTIRE
통신망의 이해 접속 장치 접속 형태 전송 매체 교환 통신망 근거리 통신망 이더넷 무선 LAN 한빛미디어(주)
유청소년 운동선수의 영양관리 이 명 천 (국 민 대 학 교).
성북구 금연사례 지정토론 서울시 노원구 보건소 박 강 원.
2008 대한민국*조경박람회 한국조경사회 / 환경조경발전재단 / 리드엑스포.
국민생활체육 안전공제 년 사업계획 세미나 ~ 12.
Contents 문제제기 시장과 경쟁전략 전략유형분류 전략유형별 핵심성공요인
한국정치 이념갈등 한국정치 정치외교학과 이혁준 정치외교학과 이태권 정치외교학과 홍성진 정치외교학과 김준호
Korea Under Japanese Rule
예방의학교실, 보건대학원 예방의학 전공의 모집 설명회 박 은 철.
HOT100 소개.
노인범죄의 증가 피해자에서 가해자로 변화하는 노인들 금상욱.
2011 5학년 독서 골든벨.
오늘의 안건 시장의 변화 다양성 포용성 휴식 사례 연구 국제적 다양성.
실패 없는 도전, 아름다운 성공을 위한 2014학년도 대학입시설명회
인간중독 . ㈜아이언 팩키지.

2. 기본 전기물리학.
한국현대사 강의.
불량식품이 우리 몸에 미치는 영향 (계획서) 팀원:최호진, 김진현, 김희민 팀명: 미르.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
배워봅시다.!!!! 대 단원: I. 가정생활의 설계 중 단원: 3. 성숙한 부모역할 소 단원: (2) 임신과 출산.
3 디지털 논리 IT CookBook, 컴퓨터 구조와 원리 2.0.
풍경 그리기 전남 보성율어중학교 맹 범 호.
국회입법과정에 대한 게임이론적 분석 김재훈.
기도. 마음을 다하여, 하나되는 교회로!. 기도. 마음을 다하여, 하나되는 교회로!
복 239장 이 믿음 더욱 굳세라.
나는 하나님께 부르짖으리니 여호와께서 나를 구원하시리로다
1-1. 동아시아 교역망의 발달 명의 대외 교역 밀무역의 성행 송, 원과 달리 해금 정책 기반 조공의 형태 무역
동아스쿨 회원가입 하기.
많은물소리찬양단 “내가 여호와께 바라는 한가지 일 그 것을 구하리니 곧 내가 내 평생에 여호와의 집에 살면서 여호와의 아름다움을 바라보며 그의 성전에서 사모하는 그것이라” (시편27:4)
성취평가제 고교 보통교과 시범운영학교 2차 협의회
Molecular Spectroscopy
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
Model Predictive Control
2015년 9월 13일.
환경보건역학 2017년 출석수업 자료.
홍 길 동 Hong, Gil-Dong 국어국문학과 홍 길 동
쉽게 배우는 알고리즘 5장. 검색트리
Bioplastic PHA 1조 박철현 김상준 오재준 서동호
제 3 장. 배열과 구조체 및 포인터.
강원대학교 코러스 과제카드 변경 (재편철)
A. 로마 교회의 모습(15:14-16) 1. 내적인 善과 좋은 知識(14) 2. 깊은 關心(14)
합격을 부르는 필승 행정법 가장 이상적인 행정법
목차 INDEX 1. 회원가입 및 로그인 2. 업체정보 3. 제조검사 신청 4. 인보이스 5. 검사진행현황(현장검사 신청)
창일 교회 주일 학교 예배 예수님의 생애(죽으심)
1. 주님의 임재 안에 4. 내 주 되신 주 찬양하리 6. 내 영혼에 주의 약속 8. 내 주 되신 주 찬양하리.
재무관리 가톨릭관동대 경영학과 2017년 가을학기 강의 : 김을진
초현실주의 배경 초현실주의에 바탕이 되는 것은 다다이다. 다다는 1차 세계대전 이후 유럽의 사회적 불안정, 정치적
제품설계분석(II) 제2장.
6, 7을 알아봅시다 8, 9 를 알아봅시다. 수의 순서를 알아봅시다. 두 수의 크기를 비교하여 봅시다.
식품기사 기출문제 LSJ.
C 프로그래밍 기초.
차량안내부 /셔틀안내 차량안내부소개 총무 김천식 회계 최영민 차량안내부 모집. 차량안내부 /셔틀안내 차량안내부소개 총무 김천식 회계 최영민 차량안내부 모집.
자료구조 (Data Structure).
수학 1학년 1학기 2. 9까지의 수 ( 3/6 ) 9까지 순서수 약속, 쓰기, 읽기.
과제명 소속 : 제주대학교 00000학과 직위 : 교수 성명 :
아이폰/아이패드 사내메일 수신 설정하기 1. [설정] > 'Mail,연락처,캘린더' > '계정추가'를 선택합니다.
고개들어 1-2 고 개 들 어 주 를 맞이 해 엎드리어경배하며 찬 양 (찬양주님께영광)
2D 프로그래밍 프로젝트 게임공학과 손홍민.
12 : 삶의 이모 저모 4자로 된 한자성어를 사자성어(四字成語)라 한다. 그리고 그 중에는 숫자가 쓰인 것이 의외로 많다. 숫자를 이용한 성어를 익히면서 성어에 쓰인 숫자의 의미를 알고, 선인들의 삶의 지혜와 가치관을 알도록 하자.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
유예 X-FILE *조사자* 1301권희원 1315이예지 1317장아정 1322홍자현.
책을 읽읍시다  탈향 진지하게 설명해드림 1303 김소희 1309박지호 1315이지수.
2016년 제1차 운영위원회 평택시건강가정 ∙다문화가족지원센터
Presentation transcript:

2 배열과 구조

학습목표 내용 포인터의 의미를 이해하고 구현 방법을 알아본다. 배열 자료형을 이해하고 배열의 구현 방법을 알아본다. 구조체 자료형을 이해하고 구조체의 구현 방법을 알아본다. 재귀호출의 의미를 이해하고 구현 방법을 알아본다. 내용 포인트 배열 구조체 재귀호출

1. 포인터 포인터 변수의 메모리 주소값 포인터변수 주소값을 저장하는 특별한 변수 포인터 변수가 어떤 변수의 주소를 저장하고 있다는 것은 포인터 변수가 그 변수를 가리키고 있다(포인트하고 있다)는 의미 포인터 변수를 이용하여, 연결된 주소의 변수 영역을 액세스 함 포인터변수를 간단히 포인터라고 함

1. 포인터 포인터 변수의 의미 편지봉투에 받는사람의 집주소를 쓰면, 그 주소로 편지가 전달되어 집주인 이 편지를 받게 된다. 편지봉투 ☞ 포인터변수 편지봉투에 쓰는 받는사람 주소 ☞ 포인터변수에 저장된 변수의 메모리 주소 주소에 해당하는 집주인이 편지를 받는 것 ☞ 포인터변수를 통한 변수의 액세스

1. 포인터 포인터 사용 예 int i; …………❶ int *ptr = &i; …❷ ❷에서 변수 i의 주소를 포인터변수 ptr에 저장하면 ptr에는 메모리 주소 150이 저장되 므로, 포인터변수 ptr은 150번지의 변수 i를 가리키는 상태가 됨

1. 포인터 포인터 선언 포인터 선언 형식 ❶자료형 ❷포인터변수이름 포인터변수 자체의 자료형이 아니라, 포인터변수에 저장할 주소에 있는 일반 변수의 자료형 ❷포인터변수이름 일반변수이름과 구별하여 변수이름 앞에 ‘*’를 표시하여 포인터변수임을 나타낸다.

1. 포인터 포인터 변수의 자료형에 따른 메모리 액세스 범위 char *ptr; ……❶ short *ptr;……❷ int *ptr;  ……❸

1. 포인터 포인터 연산 주소 연산자 : & 변수의 주소를 구하기 위해 사용 변수 앞에 &를 사용하여 그 변수의 주소를 사용 사용할 주소 영역의 변수와 포인터변수는 같은 자료형으로 선언 주소 연산자 사용 예 int i=10; int *ptr; ptr = &i;

1. 포인터 참조 연산자 : * *포인터 변수 = 값 ; 저장된 주소에 있는 값(변수에 저장된 값)을 액세스하는 연산자 사용 방법1: 지정한 값을 포인터가 가리키고 있는 주소에 저장 사용 방법2: 포인터가 가리키는 주소에 있는 값을 변수에 저장 *포인터 변수 = 값 ; 변수 = *포인터 변수 ;

1. 포인터 참조 연산자 : * 참조 연산자 사용 예 int i, j; int *ptr; ptr = &i; ………❶ j = *ptr;    ………❸

1. 포인터 [예제 3-8] : 포인터 연산자 사용 예 프로그램 실행 화면 > A

1. 포인터 [예제 3-8]의 실행 후 상태

1. 포인터 포인터의 초기화 포인터 초기화 방법 1 포인터 초기화 방법 2 주소연산자를 사용하여 변수의 주소 지정 예) int i; int *ptr = &i; 포인터 초기화 방법 2 동적 메모리를 할당하고 그 시작주소를 포인터 값으로 지정 예) char *ptr = (char *)malloc(100); 자료형 *포인터 변수 = 초기값 주소 ; 자료형 변수; 자료형 *포인터 변수 = 초기값 주소 ;

1. 포인터 포인터 초기화 방법 3 포인터 초기화 방법 4 포인터 초기화 방법 5 문자형 포인터에 문자열의 시작주소를 지정 예) char *ptr = "korea"; 포인터 초기화 방법 4 배열의 이름을 이용하여 배열시작주소를 지정 배열 이름은 문자열과 마찬가지로 그 시작주소를 전달할 수 있음 예) char A[100]; char *ptr = A; 포인터 초기화 방법 5 배열요소의 주소를 사용하여 지정 이런 경우에 인덱스로 표시하는 배열의 각 요소는 그 이름만으로 주소를 전달할 수 없기 때문에 주소연산자 &를 사용 예) char A[100]; char *ptr = &A[0];

2. 배열 배열(array) 같은 자료형을 가진 자료들을 나열하여 메모리에 연속으로 저장하여 만든 자료들의 그룹 같은 자료형을 가진 자료들을 나열하여 메모리에 연속으로 저장하여 만든 자료들의 그룹 인덱스(index) 배열의 요소를 간단히 구별하기 위해 사용하는 번호 C에서 인덱스는 항상 0부터 시작 모든 자료형에 대해서 배열로 구성 가능 구성 형태에 따라 1차원 배열, 2차원 배열, 3차원 배열, …

2. 배열 1차원 배열 1차원 배열 선언 형식 ❶자료형 ❷배열이름 ❸배열요소의 개수 배열의 자료형을 선언. 배열 요소들은 모두 같은 자료형이어야 하고, 그 자료형이 배열의 자료형이 됨 ❷배열이름 일반 변수와 같은 규칙으로 배열의 이름을 선언 ❸배열요소의 개수 배열요소의 개수는 배열의 크기를 의미 배열을 선언하면 메모리에 배열에 대한 공간 할당 할당 크기 : (자료형에 대한 메모리 할당 크기✕배열요소의 개수)

2. 배열 배열 선언에 따른 메모리 할당 크기

2. 배열 배열 선언에 따른 메모리 할당 크기 [예제 3-1] 프로그램 자료형에 따른 메모리 할당 크기 확인하기 실행 결과

2. 배열 1차원 배열의 초기화 배열의 선언과 함께 초기 값을 설정하는 작업 1차원 배열의 초기화 형식 초기화 형식과 의미

2. 배열 초기화 형식과 의미

2. 배열 초기화 형식과 의미

2. 배열 문자 배열 문자의 나열. “와 ”사이에 표시 문자열을 저장하기 위해서는 문자열을 구성하는 문자들을 연속적으로 저장해야 하기 때문에 char형 배열을 사용 배열의 자료형은 문자자료형(char)

2. 배열 문자 배열의 초기화 문자열을 그대로 지정하거나 초기값 문자리스트를 사용 문자배열을 문자열 “String” 으로 초기화하는 예 S1 : 문자열을 사용한 초기화 char s1[10] = “String” ; S2 : 초기값 문자리스트를 사용한 초기화 char s2[10] = { ‘S’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’} ;

2. 배열 다차원 배열 다차원 배열의 선언 배열의 차수 만큼 [배열크기] 항목을 추가 2차원 배열의 선언 형식 2차원 이상의 배열 다차원 배열의 선언 배열의 차수 만큼 [배열크기] 항목을 추가 2차원 배열의 선언 형식 ❶ 배열 크기 : 행의 개수. 행 인덱스 크기 ❷ 배열 크기 : 열의 개수. 열 인덱스 크기

2. 배열 2차원 배열 선언에 대한 논리적 구조와 물리적 구조 int i[2][3];

2. 배열 3차원 배열의 선언 형식 ❶ 배열 크기 : 면의 개수. 면 인덱스 크기 ❷ 배열 크기 : 행의 개수. 행 인덱스 크기 ❸ 배열 크기 : 열의 개수. 열 인덱스 크기

2. 배열 3차원 배열 선언에 대한 논리적 구조와 물리적 구조 int i[2][3][4];

2. 배열 다차원 배열의 초기화 2차원 배열의 초기화 초기값의 지정형태는 다차원 배열이 배열의 배열이라는 것을 생각하여 초 기값을 구분하여 지정하거나, 1차원 배열처럼 초기값 리스트를 지정하여 순 서대로 배열요소의 초기값으로 설정 2차원 배열의 초기화 예 int i[2][3] = {{1,2,3}, {4,5,6}} ; int i[2][3] = {1,2,3,4,5,6} ; int i[][3] = {{1,2,3}, {4,5,6}} ;

2. 배열 3차원 배열의 초기화 3차원 배열의 초기화 예 int i[2][3][4] = { {1, 2, 3, 4},                  {5, 6, 7, 8},                  {9,10,11,12},        {13,14,15,16},                  {17,18,19,20},                  {21,22,23,24}               };

2. 배열 문자 다차원 배열 char c[3][20]= { "Hong Gil Dong",                   "Computer Department",                   "Seoul, Korea"     };

2. 배열 포인터와 문자 배열 포인터를 사용하여 문자열 연산 처리 [예제 3-9] : 포인터를 이용한 문자열 처리 프로그램 ptr1 = string1;

2. 배열 [예제 3-9] : 포인터를 이용한 문자열 처리 프로그램 ptr1+7과 &string[7]의 관계

2. 배열 [예제 3-9] : 포인터를 이용한 문자열 처리 프로그램 ptr2 = &string1[7];

2. 배열 [예제 3-9] : 포인터를 이용한 문자열 처리 프로그램 for(i=16; i>=0; i--){         putchar(*(ptr1+i));     } for 반복문을 사용하여 문자열을 거꾸로 출력

2. 배열 [예제 3-9] : 포인터를 이용한 문자열 처리 프로그램 포인터를 사용한 문자열 복사 포인터를 사용하여 string1의 문자열 변경

2. 배열 [예제 3-9] : 포인터를 이용한 문자열 처리 프로그램 예제 3-9의 실행 결과 >

2. 배열 포인터 배열 포인터 자료형을 배열로 구성 포인터 배열의 선언형식 자료형 *포인터배열이름 [배열크기] ; 여러 개의 포인터를 하나의 배열로 구성한 배열의 특징과 포인터의 특징을 모두 활용할 수 있다. 포인터 배열의 선언형식 포인터 배열에서 각 배열요소는 포인터 2차원 문자배열을 1차원 포인터배열로 표현 2차원 배열의 행의 개수 : 포인터배열의 크기 포인터배열의 각 배열요소 : 각 문자열에 대한 시작주소를 가진 포인터 자료형 *포인터배열이름 [배열크기] ;

2. 배열 2차원 배열과 1차원 포인터배열

2. 배열 예제 3-10 : 포인터 배열을 이용한 문자열 저장 프로그램 실행 결과 >

3. 구조체 구조체 구조체도 배열처럼 여러 개의 데이터를 그룹으로 묶어서 하나의 자료 형으로 정의하고 사용하는 자료형 배열은 같은 자료형 만을 그룹으로 묶을 수 있지만, 구조체는 서로 다른 자료형을 그룹으로 묶을 수 있으므로 복잡한 자료 형태를 정의하는데 유용하게 사용됨 레코드(record) 자료를 체계적으로 관리하기 위해서 구성한 일정한 단위 형식으로 필드(field) 레코드를 구성하는 하위 항목 파일(file) 여러 레코드가 모여서 하나의 파일을 구성 여러 자료형의 필드를 가지고 있는 레코드를 만들 때 구조체 사용함

3. 구조체 필드와 레코드, 파일의 관계

3. 구조체 구조체 선언 여러 자료형의 변수들을 그룹으로 묶어서 하나의 자료형으로 선언 구조체이름, 자료형, 데이터 항목으로 구성 구조체의 이름 - 구조체로 정의하는 새로운 자료형의 이름 항목 - 구조체를 구성하는 내부 변수들의 이름 구조체의 항목은 배열의 각 배열요소에 해당 배열요소는 모두 같은 자료형으로 되어있으므로 배열요소에 대한 선언 없이 사용이 가능하지만, 구조체에서는 각 항목이 다른 자료형을 가질 수 있기 때문에 항목별로 자료형과 항목이름(변수이름)을  선언해야 한다.

3. 구조체 구조체 선언은 사용할 구조체의 모양을 정의한 것뿐이므로 사용할 구조체 변수를 다시 선언해야 한다. 구조체 선언은 사용할 구조체의 모양을 정의한 것뿐이므로 사용할 구조체 변수를 다시 선언해야 한다. 선언된 구조체 변수는 일반변수와 똑같이 취급하고 사용

3. 구조체 구조체 사용 예) 직원 관리 구조체 구조체 선언 구조체 employee의 구조

3. 구조체 구조체 사용 예) 직원 관리 구조체 구조체 변수 선언 struct  employee  Lee, Kim, Park;

3. 구조체 구조체 사용 예) 직원 관리 구조체 구조체 변수의 선언 유형

3. 구조체 구조체의 초기화 구조체 변수 선언 시에 각 데이터 항목에 대한 값을 중괄호 안에 나열

3. 구조체 구조체 데이터 항목의 참조 구조체 변수에 있는 각 데이터 항목을 참조하기 위해서 구조체 연산자 사용

3. 구조체 점 연산자 : . 구조체 변수에 있는 데이터 항목을 개별적으로 지정할 때 사용 예)

3. 구조체 화살표 연산자 : -> 구조체 포인터 변수에서 포인터가 가리키는 구조체 변수의 데이터항목을 지정하기 위해서 화살표 연산자 사용 예)

3. 구조체 구조체의 연산 데이터 항목 참조 연산 구조체 복사 연산 점연산자와 화살표연산자를 이용하여 구조체의 데이터 항목을 개별적으로 참조 예) struct  employee  Lee; struct  employee  *Sptr; Sptr = &Lee; Lee.year = 2005; Sptr -> pay = 3000; Sptr -> name = “Ann”; 구조체 복사 연산 예) struct  employee  Lee, Kim, team[5]; Lee = Kim; Lee = team[2]; team[2] = team[3];

3. 구조체 구조체 변수의 주소 구하기 연산 예) struct employee Lee, team[5]; 포인터의 주소연산자를 사용하여 구조체 변수의 주소를 구하거나, 구조체 변수가 배열인 경우에는 배열의 특성에 따라 구조체 배열 변수의 이름에서 주소를 구할 수 있다. 예) struct  employee  Lee, team[5]; struct  employee  *Sptr1, *Sptr2; Sptr1 = &Lee; Sptr2 = team;

4. 재귀호출 재귀호출(순환호출) 자기 자신을 호출하여 순환 수행되는 것 함수에서 실행해야 하는 작업의 특성에 따라 일반적인 호출방식보다 재귀호출방식을 사용하여 함수를 만들면 프로그램의 크기를 줄이고 간단하게 작성 재귀 호출의 예)  factorial n에 대한 factorial : 1부터 n까지의 모든 자연수를 곱하여 구하는 연산 n! = n x (n-1)! (n-1)! = (n-1) x (n-2)! (n-2)! = (n-2) x (n-3)! … 2! = 2 x 1! 1! = 1 마지막에 구한 하위 값을 이용하여 상위 값을 구하는 작업을 반복

4. 재귀호출 factorial 함수에서 n=4 인 경우의 실행

4. 재귀호출 예제 3-14 : 재귀 호출을 이용한 factorial 프로그램 실행 화면 >