PowerPoint 프레젠테이션

Similar documents
<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

기초컴퓨터프로그래밍

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

11장 포인터

chap 5: Trees

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

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

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

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

Microsoft PowerPoint - ch08 - 구조체 (structure) am0845

11장 포인터

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

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

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Microsoft PowerPoint - chap06-2pointer.ppt

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

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

chap8.PDF

untitled

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

PowerPoint 프레젠테이션

PowerPoint Presentation


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

Microsoft PowerPoint - Chapter_09.pptx

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

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

슬라이드 1

Microsoft PowerPoint - 제11장 포인터

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

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

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

02장.배열과 클래스

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

Microsoft PowerPoint - chap09.ppt

ABC 9장

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Microsoft PowerPoint - chap09-1.ppt

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

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - [2009] 02.pptx

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

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

10장. 구조체

슬라이드 1

Lab 3. 실습문제 (Single linked list)_해답.hwp

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - Chapter_04.pptx

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

OCW_C언어 기초

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

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

쉽게 풀어쓴 C 프로그래밍

Chapter 4. LISTS

Microsoft PowerPoint - chap06-1Array.ppt

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

OCW_C언어 기초

C# Programming Guide - Types

Microsoft Word - FunctionCall

JAVA PROGRAMMING 실습 08.다형성

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

C++ Programming

PowerPoint Presentation

Microsoft PowerPoint - 06-Pointer and Memory.pptx

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

7장

14 주차구조체와공용체

PowerPoint Template

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

K&R2 Reference Manual 번역본

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

PowerPoint Presentation

Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (제 2 장. 복소수 기초)

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

BMP 파일 처리

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

untitled

C++ Programming

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

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

Microsoft PowerPoint - 제3장-배열.pptx

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

chap x: G입력

PowerPoint Template

본 강의에 들어가기 전

슬라이드 1

Microsoft PowerPoint - chap12-고급기능.pptx

슬라이드 1

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

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.

chap 5: Trees

Transcription:

1 컴퓨터개론및실습 강의 8 1

2 구조체 (Structure) 2

구조체 (structure) 3 구조체가필요한이유 평면위의점 P(a,b) 는 x 축좌표 a 와 y 축좌표 b 를가지는구조이다. 이와같이하나의데이터형이여러개의독립적인원소를가진구조를 효과적으로처리하기위해서 C 언어에서는구조체를사용한다. y P(a,b) x 3

구조체의정의 4 구조체의정의 평면위의점 P(a,b) 는 x 축좌표 a 와 y 축좌표 b 를가지는구조를 표현하기위해서 structure tag struct point { // struct 은 C언어의키워드 (keyword) 이다. double x; // x-coordinate double y; // y-coordinate }; 으로 point 의구조를정의한다. 위와같이, 구조체의형식만정의하는 경우에는 {} 의마지막이세미콜론으로끝나는점에주의해야한다. 구조체의형식 {} 내부에정의되는것을멤버 (member) 라고하고, 구조체의 이름을 tag 라고한다. tag member 4

구조체 (structure) 의예 5 구조체의몇가지예 앞에서고려한구조체 point 처럼여러가지의구조체를활용할수있다. struct point { double x; // x-coordinate double y; // y-coordinate }; // 평면위의점을처리하기위한구조체 struct person { // 인사기록을관리하기위한구조체 char name[30]; // identification char sex; // male or female int age; // age }; struct complex { double x; // real double y; // imaginary }; // 복소수를처리하기위한구조체 5

구조체의객체 (object) 6 객체 (object) 또는구조체변수 (structure variable) 의선언 앞에서정의한구조체 point 의구조를가지는객체 ( 그림의점 P,Q,R) 의 선언은 x,y x,y struct point P = {3,1}, Q = {1,2}, R; 의형태로구조체이름 (tag) 다음에객체이름과초기값을지정한다. 중괄호 {} 로 묶는초기화를하지않는경우에는이름만지정한다. 이것은 int p = 3, q = 2, r ; 으로정수 p,q,r 을선언할때와거의유사하다. 위에서보듯이, struct point 는 int 와같이하나의데이터형으로취급하면된다. y Q(1,2) R(4,3) P(3,1) x 6

구조체의연산 (Operations on Structure) 7 멤버에의접근 구조체의멤버는도트 (.) 다음에멤버이름을붙여 read/write 할수있다. struct point P,Q,R; 으로초기값을설정하지않은 객체에대해서 P.x = 3; P.y = 1; Q.x = 1; Q.y = 2; 으로각점의멤버값을설정할수있다. struct point { double x; // x-coordinate double y; // y-coordinate }; y Q(1,2) R(4,3) P(3,1) x 7

구조체의연산 (Operations on Structure) 8 구조체의포인터구조체를가리키는포인터는 prefix * 를앞에붙여서정의하고, 구조체의객체를저장하는기억장소의주소는 prefix & 를붙여얻는다. struct point P,Q,R, *ip = &P,*iQ = &Q; 포인터에의한멤버의접근은포인터다음에 postfix -> (minus, greater than) 을 붙여서이용할수있다. 즉 ip 는 P 의포인터이므로 ( ip = &P ) (*ip).x ip->x P.x 는모두동일하며, read/write 가능하다. 위에서, 도트 (.) 는가장우선순위가높은 연산자이므로 (*ip) 와같이괄호가필요하다. y Q(1,2) R(4,3) P(3,1) x 8

구조체의연산 (Operations on Structure) 9 구조체의복사 구조체의객체는자신만의기억장소를가지는데이터이며, 복사는대응하는 각멤버별로이루어진다. struct point P = {3,1}, Q ={1,2}; Q = P; 위에서 Q = P; 는다음의두명령과동일하다. Q.x = P.x; Q.y = P.y; 문자열복사와의차이 char p[] = abc, q[] = xyz ; 에서 p = q; 인명령은포인터의주소를옮기는것이므로, 복사를하려면 strcpy(p,q); 을실행해야하는점이정수, 구조체의복사와다른점이다. 9

구조체와함수 10 함수를이용하여구조체 point 의멤버를바꿀수있다. struct point makepoint(double x,double y) { struct point tmp; y tmp.x = x; tmp.y = y; return tmp; } P = makepoint(3,1); Q = makepoint(1,2); Q(1,2) R(4,3) P(3,1) x 함수 makepoint 의매개변수 x,y 와구조체의멤버 x,y 는전혀별개의 변수이다. 구조체의멤버는.x 또는 ->x 에의해서만접근할수있으므로, 영문자로시작하는일반변수 x 와서로구별할수있는것은당연한다. 10

구조체와함수 11 구조체 point 를함수의매개변수로사용할수있다. 아래의그림처럼 평행사변형의법칙을이용하여두벡터의합을구하는함수를정의한다. struct point addpoint(struct point A, struct point B) { y A.x += B.x; A.y += B.y; return A; } Q(1,2) R = addpoint(p,q); R(4,3) P(3,1) x 함수 addpoint 는구조체를매개변수로받고, 구조체를리턴해준다. 11

형정의 (typedef) 12 형정의 (typedef) 구조체 point 의객체를선언하기위해서사용되는 struct point 는 int 와 같이하나의데이터형으로취급할수있으므로, 형정의 (typedef) 를이용하여 새로운데이터형을정의할수있다. typedef struct point Point; // 새로운데이터형 Point 를정의 Point P,Q,R; 은 struct point P,Q,R; 과동일하다. 그리고앞에서사용한함수선언을 struct point addpoint(struct point A, struct point B); Point addpoint(point A, Point B); 으로다시써서프로그램을간단히할수있다. 이것은마치 #define 을 아래와같이사용한것과유사하다. // #define Point struct point 12

구조체의응용예 13 복소수연산을위한구조체 typedef struct Complex cplx; struct Complex { }; double x; double y; cplx make(double x,double y) { cplx z = {x,y}; return z; } cplx mul(cplx u, cplx v) { } return make(u.x*v.x-u.y*v.y, u.x*v.y+u.y*v.x ); cplx div(cplx u, cplx v) { } double d = 1./(v.x*v.x+v.y*v.y +1.e-60); // to avoid division-by-zero return make( (u.x*v.x+u.y*v.y)*d, (-u.x*v.y+u.y*v.x)*d ); cplx u,v,z; u = make(1,2); v = make(3,4); z = mul(u,v); printf("%g %g\n", z.x, z.y); z = div(u,v); printf("%g %g\n", z.x, z.y); -5 10 0.44 0.08 13

sizeof 14 sizeof 데이터의크기를구하는것은 sizeof 를 sizeof (data_type) sizeof (variable) 으로사용한다. sizeof(char) // 1 sizeof(int) // 4 sizeof(long) // 4 sizeof(float) // 4 sizeof(double) // 8 sizeof(int); int n; sizeof(n); 위의두가지표현은모두정수형데이터의크기 4 를나타낸다. 앞에서정의한구조체 point 의경우 sizeof(struct point) 는두개의실수형을멤버로가지므로 16 을리턴한다. 14

구조체의구조체 15 구조체의구조체도아주유용하다. 예를들어, 사각형을표현하기위해서 대각선으로마주보는 2 개의점을지정할수있다. 이경우, struct point { double x; double y; }; struct rect { struct point pt1; struct point pt2; }; 으로쓸수있다. 사각형의한점 pt1 의좌표가 (3,2) 이면 struct rect box; box.pt1.x = 3; box.pt1.y = 2; 와같이좌표값에접근할수있다. 15

구조체의배열 16 삼각형을이루는 3 개의점을나타내기위해서는 3 개의 point 객체가 필요하고, 이것을배열로다음과같이선언할수있다. struct point ABC[3] = { 0,0, 3,0, 1,2 }; 멤버의갯수가 2 개임으로알기때문에순서대로 2 개씩구조체를초기화한다. 그러나, 보다명확히하기위해서각구조체의초기화를 {} 으로묶을수있다. 이때, 각 {} 에서생략된멤버값은바로앞의값으로초기화된다. struct point PQR[3] = { {0}, {3,0}, {1,2} }; 16

유니온 (union) 17 어떤상품을진열하는데가격또는메이커중에서한가지만표시하면되는 경우에구조체를 struct item { int price; char maker[10]; }; 으로선언하게되면기억장소를낭비하게된다. 왜냐하면 price, maker 중에하나만사용하기때문이다. 이러한경우, 두가지데이터형을하나의공통된기억장소에저장하고각각다른이름으로호출할수있다. struct item { int utype; // save which type is used union { int price; // type is int char maker[10]; // type is char }; }; 17

유니온 (union) 18 struct item { int utype; // save which type is used union { int price; // type is int char maker[10]; // type is char }; }; struct item A; 유니온은구조체와동일한형식으로선언된다. 유니온의모든멤버는기억장소가같다. 즉, &A.price와 &A.maker 는동일하다. 유니온의기억장소의크기는멤버중에서가장큰기억장소를가지는멤버로결정된다. 유니온의가장처음나오는멤버의형으로초기화된다. 위의경우 int price 가첫번째멤버이므로정수로초기화된다. 18

union 의응용예 19 유니온의사용예 struct item A; A.utype = 1; A.price = 120; if (A.utype == 1 ) printf("%d \n", A.price ); else if(a.utype == 2 ) printf("%s \n", A.maker ); A.utype = 2; strcpy(a.maker,"company"); if (A.utype == 1 ) printf("%d \n", A.price ); else if(a.utype == 2 ) printf("%s \n", A.maker ); printf( No way!!! %d \n", A.price ); 결과 120 company No way!!! 1886220131 19

구조체의상대참조 20 두개의구조체가상대를각각참조하는경우 struct t {... struct s *p; }; // p points to an s struct s {... struct t *q; // q points to a t }; 포인터의크기 (sizeof) 는정해져있으므로 struct s 의정의를몰라도된다??? 아래에서정의될것임 위에서구조체 t 를정의할때구조체 s 는아직정의되어있지않다. 따라서, 닭이먼저냐, 계란이먼저냐의문제처럼두개의구조체가서로를 참조할때는어느한쪽은반드시정의되지않은상태이므로, 포인터로 참조해야만한다 ( 포인터는 sizeof 값이일정하게정해져있기때문이다 ). 20

구조체의자기참조 21 이진트리 어떠한입력에서발생할수있는모든단어의발생횟수를세는문제를다음과같이이진트리 (binary tree) 라고불리는자기참조구조체를이용하여해결할수있다. 트리는서로다른각단어마다하나의마디 (node) 를갖는데각마디는다음과같은정보를가진다. 단어에대한포인터 발견된횟수 왼쪽가지에대한포인터 (a pointer to the text of the word) (a count of the number of occurrence) (a pointer to the left child node) 오른쪽가지에대한포인터 (a pointer to the right child node) 어떠마디도두개이상의가지를가질수없으며, 가지의번호는 0 과 1 로표현된다. 각마디의왼쪽가지에는그마디보다작은값을갖는마디만있고, 오른쪽가지에는그마디의가지보다큰값을갖는마디만오게된다. 21

구조체의자기참조 22 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party is now 22

구조체의자기참조 23 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the 23

구조체의자기참조 24 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the time 24

구조체의자기참조 25 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for time 25

구조체의자기참조 26 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for time all 26

구조체의자기참조 27 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for time all good 27

구조체의자기참조 28 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for men time all good 28

구조체의자기참조 29 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for men time all good to 29

구조체의자기참조 30 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for men time all come good to 30

구조체의자기참조 31 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for men time count 2 all come good to 31

구조체의자기참조 32 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party is now the count 2 for men time all come good to 32

구조체의자기참조 33 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for men time all good to aid come 33

구조체의자기참조 34 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for men of time all good to aid come 34

구조체의자기참조 35 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for men of time all good their to aid come 35

구조체의자기참조 36 이진트리의예 아래의입력으로단어의발생횟수를세는이진트리를만들어보자. now is the time for all good men to come to the aid of their party now is the for men of time all good party their to aid come 36

구조체의자기참조 37 struct treenode { char *word; // point to the text int count; // number of occurrences struct treenode *left; // pointer for the left child struct treenode *right; // pointer for the right child }; 구조체가자기자신을포함하는것은안되지만자신을가리키는포인터를 포함하는것은가능하다. 이러한탐색과정은어떤마디에대해일치하지않으면그가지에대해똑같은 과정을하게되므로순환 (recursive) 과정이된다. 이것을구현하는것이 포인터에의한자기참조이다. 37

구조체의자기참조 38 struct treenode *treealloc(void) // make a treenode { return (struct treenode *) malloc(sizeof(struct treenode)); // 다음페이지참조 } struct treenode *addtree (struct treenode *p, char *w) { int cond; if( p == NULL ) { // a new word has arrived p = treealloc(); // make a new node p->word = strdup(w); // string duplicate p->count = 1; p->left = p->right = NULL; } else if( (cond = strcmp(w, p->word)) == 0 ) p->count++; // repeat word else if( cond < 0 ) p->left = addtree(p->left,w); // less than into left subtree else p->right = addtree(p->right,w); // greater than into right subtree return p; } 38

malloc, free 39 동적기억장소할당 (dynamic storage allocation) malloc 는기억장소블록 (block of bytes) 을할당하고그곳을가리키는포인터를 리턴한다. 이때, 기억장소의크기는 sizeof 를이용하면된다. free(p) 는포인터 p 가가리키는동적기억장소블록을해제 (release) 하여다른 기억장소로사용될수있도록한다. 이때, free(p); p = NULL; 으로포인터 p 가 더이상아무곳도가리키지않도록마무리하는것이많은경우도움이된다. struct treenode *treealloc(void) // make a treenode { return (struct treenode *) malloc(sizeof(struct treenode)); } 39