Slide 1

Similar documents
Microsoft PowerPoint - chap06-1Array.ppt

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

슬라이드 1

Microsoft PowerPoint - chap06-2pointer.ppt

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

설계란 무엇인가?

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - chap06-5 [호환 모드]

PowerPoint Presentation

Microsoft PowerPoint - ch07 - 포인터 pm0415

Slide 1

설계란 무엇인가?

Microsoft PowerPoint - 7장 배열 pptx

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA PROGRAMMING 실습 02. 표준 입출력

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - chap11-포인터의활용.pptx

02장.배열과 클래스

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - chap10-함수의활용.pptx

KNK_C_05_Pointers_Arrays_structures_summary_v02

PowerPoint 프레젠테이션

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

PowerPoint Template

11장 포인터

Slide 1

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

슬라이드 1

슬라이드 1

Microsoft PowerPoint - chap03-변수와데이터형.pptx

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

OCW_C언어 기초

금오공대 컴퓨터공학전공 강의자료

untitled

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

adfasdfasfdasfasfadf

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

PowerPoint Presentation

Slide 1

Slide 1

Microsoft PowerPoint - chap04-연산자.pptx

2002년 2학기 자료구조

C++ Programming

Slide 1

Slide 1

쉽게 풀어쓴 C 프로그래밍

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint - C++ 5 .pptx

윤성우의 열혈 TCP/IP 소켓 프로그래밍

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Frama-C/JESSIS 사용법 소개

PowerPoint Presentation

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint Template

Data Structure

Microsoft PowerPoint - chap06.ppt

C 언어 프로그래밊 과제 풀이

Data Structure

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

설계란 무엇인가?

Microsoft PowerPoint - e pptx

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

Microsoft PowerPoint - chap09-1.ppt

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - chap12-고급기능.pptx

API 매뉴얼

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

PowerPoint 프레젠테이션

강의 개요

Microsoft PowerPoint - chap11.ppt [호환 모드]

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

PowerPoint Presentation

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

Microsoft PowerPoint - 06-Pointer and Memory.pptx

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - chap06-4 [호환 모드]

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

C 언어와 프로그래밍 개요

Microsoft PowerPoint - chap-11.pptx

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint 웹 연동 기술.pptx

Microsoft PowerPoint - 제11장 포인터

chap x: G입력

슬라이드 1

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

UI TASK & KEY EVENT

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint Presentation

Transcription:

SeoulTech 2011-2 nd 프로그래밍입문 (2) Chapter 5. 배열 박종혁교수 (http://www.parkjonghyuk.net) Tel: 970-6702 Email: jhpark1@snut.ac.kr

Learning Objectives 배열의소개 배열의선언과참조 For 루프와배열 메모리상의배열 함수에서의배열 함수인자로써의배열과리턴값 배열프로그램 부분적으로채워진배열, 검색, 정렬 다차원배열 5-2

배열소개 배열의정의 : 같은데이터형을가지는데이터의집합 첫번째 집합적 데이터형 그룹화 int, float, double, char 들은단순데이터형 아이템의리스트에사용 시험성적, 온도, 이름등 단순한변수의중복된선언을피하기위함 리스트를하나의개체처럼조작이가능 5-3

배열의선언 배열의선언 메모리할당 int score[5]; score 라는이름의 5 개정수형배열선언 5 개의변수를선언하는효과 : int score[0], score[1], score[2], score[3], score[4] 배열의구성요소 : 인덱스 (Index) 또는첨자 (subscript) 변수 배열의요소 (element) 대괄호안의값을인덱스또는첨자라고한다 [0] to [size 1] 5-4

배열에접근하기 인덱스 / 첨자를이용한접근 cout << score[3]; 대괄호의두가지사용법 : 선언부분에서는배열의크기를지정 나머지부분에서는배열의인덱스또는첨자를의미 크기, 첨자는반드시리터럴일필요는없음 int score[max_scores]; score[n+1] = 99; n 이 2 이면, score[3] 5-5

배열의사용 강력한저장매커니즘 다음과같은명령이가능 : i 번째인덱스변수까지이렇게실행하라 여기에서 i 는프로그램에의해계산된다 score 배열의모든요소를출력하라 사용자로부터입력받아 score 배열을채워라 스코어배열에서가장높은값을찾아라 스코어배열에서가장낮은값을찾아라 5-6

디스플레이 5.1 배열을사용한프로그램 (1 of 2) 5-7

디스플레이 5.1 배열을사용한프로그램 (2 of 2) 5-8

배열과 for 루프 자연카운팅루프 배열요소를순회하면서동작 예 : for (idx = 0; idx<5; idx++) { cout << score[idx] << "off by " << max score[idx] << endl; } 루프컨트롤변수 (idx) 는 0 부터 5 까지카운트됨 루프바디부분은 0 에서 4 까지실행된다 5-9

주요배열의함정 배열의인덱스는항상 0 으로시작! 0 은컴퓨터과학자들에게첫번째숫자 배열범위를벗어나는프로그래밍 예측할수없는결과 컴파일러는이러한에러를감지하지못함! 프로그래머가배열범위를벗어나지않게해야한다 5-10

주요배열의함정의예 인덱스의범위는 0 부터 array_size 1 까지 예 : double temperature[24]; // 24는배열의크기 // temperature 라는이름의 24개의 double 형데이터를가지는배열을선언 배열의요소는다음과같음 : temperature[0], temperature[1] temperature[23] 일반적인실수 : temperature[24] = 5; 인덱스 24 는범위를벗어남! 경고없이좋지않은결과를초래한다 실행도중오류발생 5-11

배열의크기를정의된상수로사용 배열의크기에정의 / 명명된상수를항상사용 예 : const int NUMBER_OF_STUDENTS = 5; int score[number_of_students]; 가독성향상 융통성향상 유지보수성향상 5-12

정의된상수의사용 배열의크기가필요할때언제든지사용가능 for 루프에서 : for (idx = 0; idx < NUMBER_OF_STUDENTS; idx++) { // 배열의조작 } 연관된크기의계산 : lastindex = (NUMBER_OF_STUDENTS 1); 함수로배열을넘겨줄때 (later) 크기의변경 프로그램에서한부분만수정하면된다! 5-13

메모리상의배열 (1/2) 단순배열을상기해보면 : 주소 를가지고메모리에할당 배열선언은전체배열을메모리에할당시킴 연속적인할당 주소가연속적으로할당된다는의미 인덱스계산이허용됨 배열시작점 ( 인덱스 0) 으로부터인덱스를증가시킴으로써 5-14

메모리상의배열 (2/2) 5-15

배열의초기화 단순변수들이선언과동시에초기화할수있는것과같이 : int price = 0; // 0은초기값 배열은다음과같이가능 : int children[3] = {2, 12, 1}; 다음과같은의미 : int children[3]; children[0] = 2; children[1] = 12; children[2] = 1; 5-16

배열의자동초기화 배열의크기보다적은수의값이주어진경우 : 처음부터순서대로채워짐 나머지는배열기본형의 0 값으로채워짐 배열의크기가없는경우 초기화값의숫자에따라배열의크기결정 예 : int b[] = {5, 12, 11}; 배열 b 의크기는 3 이된다 5-17

함수에서의배열 함수인자로서의배열 인덱스변수 배열의각각의요소 (element) 는함수의파라미터로사용될수있다 전체배열 모든배열요소는하나의개체로함수로전달될수있다 함수의리턴값으로서의배열 가능하다 chapter 10 5-18

인자로서의인덱스변수 인덱스변수는배열기본형의단순변수처럼취급된다 함수의선언 : void myfunction(double par1); 변수의선언 : int i; double n, a[10]; 다음과같은함수의호출이가능 : myfunction(i); // i는 double형으로변환 myfunction(a[3]); // a[3] 은 double 형 myfunction(n); // n은 double 형 5-19

인덱스변수사용시주의사항 myfunction(a[i]); i 의값이먼저결정 값이결정되고인덱스변수가전달됨 myfunction(a[i*5]); 컴파일러의관점에서는완벽하게정당한호출 프로그래머는배열의범위내에들도록책임져야함 5-20

인자로서의전체배열 전체배열은형식매개변수가될수있다 함수호출에서인자로전달되는것은배열의이름 배열매개변수 라한다 배열의크기도전달해야한다 일반적으로두번째매개변수 단순한 int 형의형식매개변수 5-21

디스플레이 5.3 배열매개변수를가지는함수 5-22

인자로서의전체배열의예 주어진이전의예 : main() 함수의정의에서이함수들이호출되는경우 : int score[5], numberofscores = 5; fillup(score, numberofscores); 첫번째매개변수는전체배열 두번째매개변수는정수형값 배열매개변수에대괄호가없는것에주의! 5-23

인자로서의배열 : 어떻게? 실제로무엇이전달되는가? 배열을 3개의부분으로나누어보면 첫번째인덱스변수의주소 (arrname[0]) 배열의기본형 배열의크기 단지첫번째부분이전달됨! 배열주소의시작부분 call-by-reference 와매우유사 5-24

배열매개변수 익숙하지않은형태 배열매개변수에서대괄호가없음 배열의크기는별도로전달이되어야한다 장점 : 단일함수로어떠한크기의배열도채울수있다! 함수의 재사용 특성을보여주는예시 예 : int score[5], time[10]; fillup(score, 5); fillup(time, 10); 5-25

const 매개변수수정자 상기할것 : 배열매개변수는실제로첫번째요소의주소가전달됨 call-by-reference 와유사 함수는배열의수정이가능하다! 종종필요하지만때로는필요하지않음! 수정으로부터배열내용을보호 배열매개변수앞에 const 수정자를사용 상수배열매개변수 컴파일러에게수정이허가되지않음을알려준다 5-26

배열을리턴하는함수 기본형을리턴하는것과같이배열을리턴하지못함 포인터 의사용이필요하다 chapter 10 에서논의할것임 5-27

자주사용되는유형 배열프로그래밍 부분적으로채워진배열 최대크기가반드시선언되어야한다 정렬 검색 ( 탐색 ) 5-28

부분적으로채워진배열 필요한배열크기의정확한예측은어렵다 가능한가장큰크기로선언되어야한다 배열에서입력된마지막데이터의위치를추적해야한다 추적 (tracking) 에필요한변수가추가되어야한다 int numberused; 배열에서현재요소의숫자를추적 5-29

디스플레이 5.5 부분적으로채워진 배열 (1 of 5) 5-30

디스플레이 5.5 부분적으로채워진 배열 (2 of 5) 5-31

디스플레이 5.5 부분적으로채워진 배열 (3 of 5) 5-32

디스플레이 5.5 부분적으로채워진 배열 (4 of 5) 5-33

디스플레이 5.5 부분적으로채워진 배열 (5 of 5) 5-34

전역상수 vs. 매개변수 상수는일반적으로전역으로선언 main() 함수의윗부분에선언 함수는배열크기상수를매개변수로갖는다 배열크기를의미하는매개변수를전달해줄필요가없을까? 기술적으로는 yes 왜우리는매개변수를사용하는가? 함수는대체로분리된파일에정의된다 함수는다른프로그램에의해재사용될수있다! 5-35

배열탐색 배열의전형적인사용 디스플레이 5.6 5-36

디스플레이 5.6 배열탐색 (1 of 4) 5-37

디스플레이 5.6 배열탐색 (2 of 4) 5-38

디스플레이 5.6 배열탐색 (3 of 4) 5-39

디스플레이 5.6 배열탐색 (4 of 4) 5-40

디스플레이 5.7 선택정렬 선택정렬알고리즘 5-41

디스플레이 5.8 배열정렬 (1 of 4) 5-42

디스플레이 5.8 배열정렬 (2 of 4) 5-43

디스플레이 5.8 배열정렬 (3 of 4) 5-44

디스플레이 5.8 배열정렬 (4 of 4) 5-45

다차원배열 하나이상의인덱스가추가된배열 char page[30][100]; 두개의인덱스 : 배열의배열 표현 : page[0][0], page[0][1],, page[0][99] page[1][0], page[1][1],, page[1][99] page[29][0], page[29][1],, page[29][99] C++ 은어떠한수의인덱스도허용 일반적으로두개이상사용하지않음 5-46

다차원배열매개변수 1 차원배열과유사 1 차원의크기는주어지지않는다 두번째매개변수로서제공됨 2 차원의크기는주어진다 예 : void DisplayPage(const char p[][100], int sizedimension1) { for (int index1=0; index1<sizedimension1; index1++) { for (int index2=0; index2 < 100; index2++) cout << p[index1][index2]; cout << endl; } } 5-47

요약 1 배열은같은형데이터의집합 배열의인덱스변수는다른단순한변수와동일하게사용된다 for- 루프 N 번반복하면서배열을통과 프로그래머는배열의범위를초과하지않게해야한다 배열매개변수는새로운종류 call-by-reference 와유사 5-48

요약 2 배열요소는연속적으로저장 메모리에연속적으로위치 함수에전달될때는단지첫번째배열요소의주소가전달 부분적으로채워진배열 tracking 필요 상수배열매개변수 배열내용의수정을방지 다차원배열 배열의배열을생성 5-49

Q&A 1-50