09 배열

Similar documents
PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-1Array.ppt

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

설계란 무엇인가?

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

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

Microsoft PowerPoint - chap06-2pointer.ppt

설계란 무엇인가?

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

슬라이드 1

Microsoft PowerPoint - 7장 배열 pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

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

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

PowerPoint Template

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

Data Structure

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

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

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - [2009] 02.pptx

PowerPoint 프레젠테이션

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

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

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

PowerPoint Presentation

02장.배열과 클래스

11장 포인터

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

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

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

OCW_C언어 기초

Microsoft PowerPoint - 제11장 포인터

PowerPoint 프레젠테이션

PowerPoint Presentation

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

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Slide 1

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

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - Java7.pptx

쉽게 풀어쓴 C 프로그래밍

untitled

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

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

Microsoft PowerPoint - Chapter_08.pptx

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

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

중간고사

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - chap05-제어문.pptx

설계란 무엇인가?

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint 프레젠테이션

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

PowerPoint Presentation

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - C_9장 포인터 pptx

03 상수, 변수, 자료형

Microsoft PowerPoint - chap04-연산자.pptx

06 세상을 변화시키는 연산자

Microsoft PowerPoint - gnu-w10-c-chap11

Microsoft PowerPoint - chap06.ppt

슬라이드 1

PowerPoint Presentation

OCW_C언어 기초

C++ Programming

Microsoft PowerPoint - chap09-1.ppt


PowerPoint 프레젠테이션

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

C 프로그래밊 개요

슬라이드 1

PowerPoint Presentation

ABC 6장

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

제4장 기본 의미구조 (Basic Semantics)

Chapter_06

Microsoft PowerPoint - 제3장-배열.pptx

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint Presentation

Infinity(∞) Strategy

Data Structure

C 프로그래밊 개요

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

PowerPoint Presentation

Microsoft PowerPoint - chap-03.pptx

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

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

C 프로그램의 기본

슬라이드 1

Microsoft PowerPoint - chap-06.pptx

문서의 제목 나눔명조R, 40pt

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

Transcription:

Part 09 배열 1

이장의내용 배열이란 배열선언과초기화 배열인수전달 2차원배열 재미있는몇가지이야기 배열활용연습 2

9.1 배열이란 3

이상한요구사항 5 개의정수를받아서역순으로출력하는프로그램을작성하라. 실행예 입력 : 19 10 8 29 36 출력 : 36 29 8 10 19 점진적세분화 1. 5 개의정수를읽어 x0, x1, x2, x3, x4 에저장한다. (scanf 를이용하여바로구현가능 ) 2. x4, x3, x2, x1, x0 순으로출력한다. (printf 를이용하여바로구현가능 ) 4

revprint.c 마음에듭니까? scanf 와 printf 패턴이중복되는것이마음에불편하지요? scanf 중복 " 배열 " 을이용하면이중복을제거할수있습니다. printf 중복 실행결과 : 다섯개의정수를입력해주세요. 19 10 8 29 36 입력된정수를역순으로출력하면다음과같습니다. 36 29 8 10 19 5

배열소개 배열이란? 같은자료형의자료여러개를하나로묶은것 또는이런자료를나타내는자료형 배열원소참조 첨자연산자 (index operator) [] 를이용하여참조한다. C 배열의첨자는항상 0부터시작한다. 배열예 다섯개의원소로이루어진배열 x 6

revprint2.c 크기 5 인 int 배열 x 첨자연산자 [] 가주소연산자 & 보다높은우선순위임. 따라서 &(x[i]) 와같은뜻임 실행결과 : 다섯개의정수를입력해주세요. 19 10 8 29 36 입력된정수를역순으로출력하면다음과같습니다. 36 29 8 10 19 7

배열원소훑어보기 배열원소를차례로훑어볼경우에는 for 문이제격이다. 크기 N 인배열 a 의원소를차례로훑어보는관용어구 (programming idiom) for (int i = 0; i < N; ++i) {... a[i]... } 표준 C(C99) 와예전 C 와의차이점 표준 C 에서는 for 의초기화수식부분에서변수를선언할수있음 이렇게선언된변수의유효범위는 for 문내부로한정됨 표준이전 C 에서는다음과같이별도의블록으로작성함 { int i = 0; for (i = 0; i < N; ++i) {... a[i]... } } 8

9.2 배열선언과초기화 9

배열선언과초기화 배열선언 첨자연산자내부에크기를명시하여선언 int a[5]; // 크기 5인 int형배열 일반변수선언과함께선언할수있음 int x, y, a[5]; 배열초기화 중괄호 {} 내부에초기값을나열 int a[5] = {1, 3, 5, 7, 9}; 초기화목록이있을경우배열크기생략가능 int x[] = {1, 3, 5, 7, 9}; 초기값개수와배열크기가다르면 int x[5] = {1, 3}; // 나머지는 0 int x[3] = {1, 3, 5, 7, 9}; // 오류! 10

arrname.c 배열이름의비밀 배열이름은배열이할당된메모리공간의시작주소 (base address) 임 실행결과 : 배열이름값 x = 1245036 배열전체크기 sizeof(x) = 20 배열원소크기 sizeof(x[0]) = 4 11

9.3 배열인수전달 12

배열인수전달 배열을인수로전달할때에는 ' 배열이름 ' 만전달함 매개변수는일반배열처럼선언하지만, 이때크기는무시됨 배열이름만전달 매개변수선언시배열크기는무시되므로 int sum(int a[]) 와같은뜻임 실행결과 : 1 + 2 +... + 10 = 55 13

배열크기전달 배열매개변수선언시크기는무시되므로, 배열크기는별도의인수로전달함 배열크기계산배열전체크기 (sizeof x) 를원소크기 (sizeof x[0]) 로나눔 배열크기전달 실행결과 : 1 + 2 +... + 10 = 55 2 + 4 +... + 10 = 30 14

배열매개변수를통한배열원소변경 배열매개변수값 배열매개변수에는배열이름 ( 배열시작주소 ) 가전달되므로 배열매개변수를통해배열을바꾸면전달된원본배열이변경됨 배열매개변수에배열이름을전달한상황 함수 f 에서함수 g 를호출할때, 배열 a 를매개변수 x[] 에전달했다면 x 는 a 의시작주소 ( 그림의 xxx) 이므로 피호출자 g 에서 x[1] 의값을변경하면 a[1] 값이변경된다. 15

sum2.c (1/2) sum main x read main 의배열 x 의원소값을 read 가채워주고 sum 이 x 의원소합을구함 16

sum2.c (2/2) 함수 sum 은매개변수 a 로전달된배열의원소합을구하여돌려준다. 프로시저 read 는매개변수 a 로전달된배열의각원소값을표준입력에서읽는다. 실행결과 : 5 개의정수를입력하세요 : 1 3 5 7 9 입력한숫자의합은 25 입니다. 17

9.4 2 차원배열 18

다차원배열 다차원배열이란? 여러개의첨자를갖춘배열 선, 면, 입체, 1 차원, 2 차원, 3 차원, 2 차원배열선언및초기화 int x[2][3]; int y[2][3] = {{1,3,5}, {2,4,6}}; 2 차원배열을초기화할때에는초기화목록내에초기화목록을명시한다. 19

2 차원배열활용예 N N 정방행렬을입력받은후, 각행과열의합을구하는프로그램을작성하라. N N 행렬 x 의원소를읽는다. 각행과각열의합을구하여 rsum, csum 에저장한다. 행렬 x 와 rsum, csum 을출력한다. 20

rcsum.c (1/3) 각배열원소를 0 으로초기화 정방행렬 x 를읽고각행과열의합의구하고 x 와계산결과를출력함 21

rcsum.c (2/3) 정방행렬 a 의각원소를읽음 정방행렬 a 의각행의합 rsum 과각열의합 csum 을구함 22

rcsum.c (3/3) 각원소의출력폭은 lseg 의길이보다하나작게정함 각원소출력폭을별도의인수로받음 실행결과 : 3 x 3 정수행렬을입력하세요 : 1 2 3 4 5 6 7 8 9 1 2 3 6 4 5 6 15 7 8 9 24 ---------------------+ 12 15 18 23

9.5 재미있는몇가지이야기 24

실행중 printf 의출력폭지정 printf 의출력폭을별도의인수로받을수있음 출력폭을 * 로지정하고인수로출력폭을넘김 활용예 width 가 6 이라면다음문장은 printf("%*d", width, a[i][j]); 다음문장처럼해석된다. printf("%6d", a[i][j]); 25

C 에 2 차원배열은없다?! 사실 2 차원배열은 1 차원배열의 1 차원배열 배열원소가 1 차원배열인배열 2 차원배열도 1 차원배열로취급할수있음 int y[2][3] = {{1,3,5}, {2,4,6}}; y[0] 는 {1,3,5}, y[1] 은 {2,4,6} 따라서 int y[2][3] = {1,3,5,2,4,6}; 처럼초기화할수있다. 26

9.6 배열활용연습 27

배열활용연습 : 난수발생 난수발생함수 int x = rand(); // 0~RAND_MAX 사이의난수발생 난수발생범위변경 0이상 n이하난수를발생시키려면 ( 범위내정수는 n+1개 ) rand() % (n+1) x이상 y이하의난수를발생시키려면 ( 범위내정수는 y x + 1개 ) rand() % (y x + 1) + x 초기발생난수변경 time이반환한 calendar time을 srand의인수로전달 srand((unsigned int)time(null)); 28

histogram.c (1/3) 발생시킬난수개수 난수발생범위 (LB: 하한, UB: 상한 ) n 개의별표 * 를출력함 각배열원소에대해첨자값과원소값을출력하고원소개수만큼별표를출력함 29

histogram.c (2/3) 초기발생난수변경 lower 이상, upper 이하범위의난수를발생시켜되돌려줌 LB 이상 UB 이하의 n 개난수를발생시켜배열 a 의각원소에저장 30

histogram.c (3/3) 초기발생난수를변경하고 NUM 개의난수를발생시켜 a 에저장한후 a 에대한히스토그램을출력함 실행결과 : 0 [ 19]:******************* 1 [ 8]:******** 2 [ 20]:******************** 3 [ 3]:*** 4 [ 5]:***** 5 [ 12]:************ 6 [ 9]:********* 7 [ 12]:************ 8 [ 16]:**************** 9 [ 15]:*************** 31

Key Point 32

Key Point 1 배열이란같은자료형의변수여러개를묶은자료, 또는이러한자료형을뜻한다. 배열첨자연산자는대괄호 [] 를이용하여나타낸다. C 언어에서배열첨자는항상 0 부터시작한다. 따라서 n 번째원소를참조하려면첨자 n-1 을사용해야한다. 배열을선언할때는배열원소자료형으로선언하되배열이름다음에배열크기를첨자연산자 ([]) 로묶어서선언한다. 배열이름은배열이할당된메모리공간의시작주소다. 배열을함수의인수로전달할때는배열이름을전달한다. 일차원배열인수를받는형식매개변수는배열크기가생략된형태로선언한다. 배열을인수로전달할때, 배열의크기는별도의인수로전달해야한다. 33

Key Point 2 배열인수를전달받은함수에서배열원소에값을저장하면원본배열의원소값이바뀐다. 2 차원배열이란배열의첨자가두개인배열이다. 2 차원배열을초기화할때에는초기화목록내에다시초기화목록을기입한형태를사용한다. 34

Key Point( 고급주제 ) printf 의포맷스트링에서너비지정상수를별도의인수로받도록할수있는데이때 "%*d" 와같이포맷스트링의너비를 * 로지정한다. C 에는 2 차원배열이없다. C 에서 2 차원배열은 1 차원배열의 1 차원배열로구현된다. C 의다차원배열도 1 차원배열의초기화목록을이용하여초기화할수있다. C 에서난수를이용해야할경우에는난수발생함수 rand() 를이용할수있다. rand() 가생성하는초기난수를변경하려면 srand((unsigned)time(null)); 와같이 time() 과함께 srand() 를호출한후에 rand() 를호출하면된다. 35

요약 (1/2) 배열 같은자료형의자료를일렬로묶은자료혹은그러한자료형 배열원소는첨자연산자 [] 를통해참조함 배열선언및초기화 배열을선언할때에는배열크기를첨자연산자내에명시함 배열을초기화하기위해서는초기값목록을 {, } 로묶어명시함 배열인수전달 배열을인수로전달할때에는배열이름만전달함 배열크기는필요에따라서별도의인수로전달함 배열매개변수를이용한배열변경 배열이름은배열이할당된공간의시작주소이므로 배열매개변수를통해배열원소를변경하면원본배열도변경됨 36

요약 (2/2) 다차원배열 다차원배열은첨자를덧붙임으로써선언할수있음 다차원배열은배열의배열로간주함 2차원배열은 1차원배열을배열원소로하는 1차원배열임 난수발생함수 난수가필요한경우에는 rand() 를이용할수있음 난수발생범위는나머지연산자 % 를이용하여변경가능 초기발생난수를임의로변경하려면 srand() 이용 srand((unsigned int)time(null)); 37

프로그래밍실습 38

프로그래밍실습 1 중심극한정리를확인하는프로그램작성 1. 크기 N 인모집단 a 를생성한후, 이를확률분포로변경 double sum(double a[], int NUM); void to_pdf(double a[], int NUM, double sum); 2. 모집단 a 에서크기 2 인샘플을모두구한후샘플평균들을배열 b 에기록함 void normalize(double a[], double b[], int NUM); 3. 샘플들의평균분포 b 도확률분포로변경 (to_pdf 이용 ) 4. 배열값을 scale 만큼확대하여히스토그램을그림 void histogram(double a[], int NUM, int scale); 5. 모집단 a 의확률분포와샘플평균분포 b 의확률분포를히스토그램으로출력함 (b 의히스토그램은정규분포와유사해야함 ) 39

프로그래밍실습 1 ( 출력예 ) 샘플평균의분포 b 의확률분포를출력하면다음과같이정규분포와유사하게출력되어야한다 x = 0 [ 0.04]:*** x = 1 [ 0.09]:******** x = 2 [ 0.11]:*********** x = 3 [ 0.14]:************** x = 4 [ 0.19]:****************** x = 5 [ 0.16]:**************** x = 6 [ 0.11]:*********** x = 7 [ 0.09]:******** x = 8 [ 0.06]:***** x = 9 [ 0.01]:* 40

프로그래밍실습 2 틱택토 (Tick-Tac-Toe) 프로그램 1. 말판의좌표는그림과같이정한다. 2. 각위치의말판을입력하면빈자리인가확인하고말판을놓은후, 변화된말판을출력한다. 각선수는 O, X 로출력한다. 선수 O 가 b3 에두었다면그림과같이출력되어야한다. 3. 매번돌을놓을때마다승패를판단하고, 특정선수가이겼을경우축하메시지를출력한다. 1 2 3 +---+---+---+ A +---+---+---+ B O +---+---+---+ C +---+---+---+ 41