Microsoft PowerPoint C-구조체

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

기초컴퓨터프로그래밍

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

chap8.PDF

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드]

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

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

제1장 Unix란 무엇인가?

Microsoft PowerPoint - Chapter_09.pptx

KNK_C_05_Pointers_Arrays_structures_summary_v02

11장 포인터

; 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

Microsoft PowerPoint - chap09-1.ppt

14 주차구조체와공용체

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

제1장 Unix란 무엇인가?

02장.배열과 클래스

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

Microsoft PowerPoint - chap06-2pointer.ppt

K&R2 Reference Manual 번역본

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

2009년 상반기 사업계획

본 강의에 들어가기 전

PowerPoint 프레젠테이션

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

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

본 강의에 들어가기 전

슬라이드 1

The Pocket Guide to TCP/IP Sockets: C Version

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

歯9장.PDF

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

Microsoft PowerPoint - 09-CE-23-윈도우 소켓

Chapter 4. LISTS

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

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

C 프로그래밊 개요

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

untitled

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

ABC 9장

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

The Pocket Guide to TCP/IP Sockets: C Version

11장 포인터


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

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

Microsoft PowerPoint - chap09.ppt

untitled

Microsoft PowerPoint - 15-EmbedSW-10-Socket

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

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

Microsoft PowerPoint - 07_(C_Programming)_(Korean)_Composite_Data_Types

본 강의에 들어가기 전

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

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - 06-CompSys-16-Socket.ppt

이번장에서학습할내용 구조체란무엇인가? 구조체의선언, 초기화, 사용 구조체의배열 구조체와포인터 구조체와함수 공용체 열거형 typedef 구조체는복잡한내용을일목요연하여정리하는데유용하게사용됩니다. 2

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

슬라이드 1

Chapter 4. LISTS

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

11장 포인터

설계란 무엇인가?

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Microsoft PowerPoint - Lesson12.pptx

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


Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

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

Microsoft PowerPoint - chap-13.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - 제3장-배열.pptx

untitled

10장. 구조체

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

Microsoft PowerPoint - [2009] 02.pptx

untitled

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

chap 5: Trees

Frama-C/JESSIS 사용법 소개

PowerPoint Template

Microsoft PowerPoint - Chapter 6.ppt

슬라이드 1

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

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

Chapter 4. LISTS

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

chap7.key

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

Chapter #01 Subject

Microsoft PowerPoint - Chapter_08.pptx

Algorithms

Transcription:

순천향대학교컴퓨터공학과이상정 1 학습내용 구조체 (structure) 구조체선언, 멤버참조 구조체초기화, 인수전달 자기참조구조체, 연결리스트 공용체 (union) 비트필드 (bit field) 순천향대학교컴퓨터공학과 2

구조체란? 구조체는하나의변수명으로여러개의상이한자료를한꺼번에다루려고할때사용 구조체선언 struct 태그명 ; 멤버리스트 순천향대학교컴퓨터공학과 3 구조체변수선언 1 구조체를선언한후이를이용하여구조체변수를선언한예 struct man char name[20]; char gender; int age; ; struct man teacher, student[60], *ptr; 순천향대학교컴퓨터공학과 4

구조체변수선언 2 구조체의선언과구조체변수의선언을동시에한예 struct man char name[20]; char gender; int age; teacher, student[60], *ptr; 순천향대학교컴퓨터공학과 5 구조체변수선언 3 태그명을붙이지않고구조체변수선언 struct char name[20]; char gender; int age; teacher, student[60], *ptr; 순천향대학교컴퓨터공학과 6

구조체변수메모리할당 teacher 20 바이트 1 바이트 4 바이트 student[0] student[1] student[2] student[59] 순천향대학교컴퓨터공학과 7 구조체멤버참조 연산자 설명. 구조체변수의멤버지정 -> 포인터가지시하는구조체변수의멤버지정 teacher.age = 30; teacher.gender = M ; student[15].age = 19; ptr = &teacher; ptr->age = 40; 순천향대학교컴퓨터공학과 8

구조체멤버참조예 #include <stdio.h> ptr -> age = 40; struct man char name[20]; char gender; int age; ; int main( ) struct man teacher, *ptr; printf("name : %s, ",ptr -> name); printf("gender : %c, ",ptr -> gender); printf("age : %d n",ptr -> age); return 0; ptr = &teacher; strcpy(teacher.name, "Kim"); teacher.gender = 'm'; teacher.age = 30; printf("name : %s, ",teacher.name); printf("gender : %c, ",teacher.gender); printf("age : %d n",teacher.age); 순천향대학교컴퓨터공학과 9 구조체초기화예 : 프로그램의미는? #include <stdio.h> struct char bell; int width; int lines; crt = ' 7', 80, 24 ; int pause(int *so_far); int main() char c; int num_lines; num_lines =1; for(;;) if (num_lines == 1) putchar(crt.bell); printf("print something on the screen. n"); ++num_lines; 순천향대학교컴퓨터공학과 10 c = pause(&num_lines); if (c == '#') break; return 0; int pause(int *so_far) char c; if (*so_far!= crt.lines-2) return(0); printf(" n t Pressanykeytocontinue"); printf("or # key to end"); c = getchar( ); *so_far = 1; return(c);

구조체인수전달예 #include <stdio.h> struct man char name[20]; char gender; char age; ; void disp1(struct man stud); void disp2(struct man *stud); int main( ) struct man student=" 홍길동 ", 'm', 20; void disp1(struct man stud) printf("%s : %c : %d n",stud.name,stud.gender,stud.age); void disp2(struct man *stud) printf("%s : %c : %d n",stud->name,stud->gender,stud->ag e); disp1(student); disp2(&student); return 0; 순천향대학교컴퓨터공학과 11 #include <stdio.h> struct man char name[10]; char gender; int age; ; struct man setstud(char name[], char gender, int age) ; void disp(struct man stud); int main( ) struct man student; student = setstud("kim",'m',20); disp(student); student = setstud("lee",'f',19);, disp(student); 순천향대학교컴퓨터공학과 12 return 0; 구조체반환예 struct man setstud(char name[], char gender, int age) struct man dt; strcpy(dt.name, name); dt.gender = gender; dt.age = age; return(dt); void disp(struct man stud) printf("%s : %c : %d n",stud.name,stud.gender, stud.age);

#include <stdio.h> struct class char name[20]; int kor, mat,eng; int total; float avg; student[] =" 홍민식 ",90,83,85, 85 " 전인국 ",90,85,94, 94 " 남운영 ",88,81,85, " 하상오,85,90,80, "",-1 ; void calculation(struct l class *st); void disp(struct class *st); int main() calculation(student); disp(student); return 0; 순천향대학교컴퓨터공학과 13 성적계산예 void calculation(struct class *st) while (st->kor!= -1) st->total = st->kor + st->mat + st->eng; st->avg = (float)st->total/3; st++; void disp(struct class *st) printf(" 이름국어수학영어총점평균 n"); printf("-------------------------------- n"); while (st->kor!= -1) printf("%4s %4d %4d %4d %5d %4.1f n", st->name,st->kor,st->mat,st->eng, st->total, st->avg); st++; 소켓주소구조체 (1) 통신객체 ( 클라이언트또는서버 ) 의인터넷주소를표현 주소체계 (address family) AF_INET ( 인터넷 ), AF_UNIX, AF_NS IP 주소 : 4 바이트 포트번호 : 2 바이트 C 언어에서소켓주소는구조체 sockaddr 로정의 struct sockaddr u_short sa_family; /* 주소체계, unsigned short*/ char sa_data[14]; /* 주소 */ ; 순천향대학교컴퓨터공학과 14

소켓주소구조체 (2) sockaddr 는 IP 주소와포트가구분이되지않아서불편 다음과같이 sockaddr_in 으로재정의하여사용 struct in_addr u_long s_addr; /* 32비트의 IP 주소를저장할구조체 */ ; struct sockaddr_in short sin_family; il /* 주소체계 */ u_short sin_port; /* 16비트포트번호 */ struct in_addr sin_addr; /* 32 비트 IP 주소 */ char sin_zero[8]; /* 전체크기를 16바이트로맞추기위한 dummy */ ; 순천향대학교컴퓨터공학과 15 소켓주소구조체사용예 클라이언트연결부분예 struct sockaddr_in serveraddr;... if ((s = socket(pf_inet, SOCK_STREAM, 0)) < 0) printf("can't create socket n"); exit(1); /* 서버의소켓주소구조체 serveraddr 을 ' 0' 으로초기화 */ bzero((char *)&serveraddr, sizeof(serveraddr)); /* serveraddr 의주소지정 */ serveraddr.sin_family = AF_INET; inet_pton(af_inet, "220.78.22.45", &servaddr.sin_addr); serveraddr.sin_port = htons(9000); /* 연결요청 */ if (connect(s, (struct sockaddr *)&server_addr, sizeof(serveraddr)) < 0) printf("can't connect. n"); exit(1);... 순천향대학교컴퓨터공학과 16

과제 4-1 다음프로그램의실행결과를보이고, 각결과가출력되는과정을분석하라. 실행시에러가발생하면원인을찾고수정하라. #include <stdio.h> typedef struct int num; char name[20]; char phone[8]; person; void set(person *pp, int num, char *name, char *phone); 순천향대학교컴퓨터공학과 17 int main() person p; printf("size of person record = %d n", sizeof(person)); set(&p, 1208, " 송준기 ", "687-7735"); printf("%4d [%-8s] TEL. %s n", p.num, p.name, p.phone); return 0; void set(person *pp, int num, char *name, char *phone) int i; pp->num = num; i= 0; while(*name) pp->name[i++]= *name++; pp->name[i]= ' 0'; for(i = 0; *phone; i++) pp->phone[i] = *phone++; pp->phone[i] phone[i] = 0x00; 순천향대학교컴퓨터공학과 18

과제 4-2 앞의성적계산프로그램을다음과같이수정하라. 각학생의수를먼저입력받은후학생의이름과성적을학생수대로입력받아구조체배열에저장하는함수 input() 을작성 student를인수로받고, 학생인원을반환 성적순서대로정렬하는함수 sort() 작성 성적순서대로출력 순천향대학교컴퓨터공학과 19 구조체의구조체 struct point int x; int y; ; struct rect struct point pt1; struct point pt2; ; struct rect screen; screen.pt1.x = 2; screen.pt1.y = 3; screen.pt2.x = 5; screen.pt2.y = 10; y. (x,y) pt1 (2,3) pt2 (5,10) x 순천향대학교컴퓨터공학과 20

자기참조구조체 구조체내부에자기자신의구조체를지시하는포인터를갖는것을자기참조구조체라한다. 동일한형의구조체를연결하여연결리스트 (linked list) 구조를만드는데많이사용 연결리스트구조는자료의삽입이나삭제가자료실체의이동이없이내부의포인터의값만을변경하여줌으로써가능 struct node ; int data; struct node* next; 순천향대학교컴퓨터공학과 21 간단한연결리스트예 (1) #include <stdio.h> struct list char name[20]; char gender; int age; struct list *next; a = "Kim",'m',36, b = "Lee",'f',33, c = "Park",'m',44, *ptr; int main( () a.next = &b; b.next = &c; c.next = ' 0'; for (ptr = &a; ptr; ptr = ptr->next) printf("%-8s %c %2d n",ptr->name,ptr->gender,ptr->age); return 0; 순천향대학교컴퓨터공학과 22

간단한연결리스트예 (2) a Kim m 36 b Lee f 33 c Park m 44 0 순천향대학교컴퓨터공학과 23 공용체 (union) 공용체에서는모든멤버들을동일기억공간에중복되게할당 멤버중가장큰바이트크기를갖는공간을확보하고다른모든멤버들은동일한번지에할당 구조체는각멤버를연속되는기억공간에각각할당 공용체의선언은구조체의선언과같고단지선언자가 struct 가아닌 union 인점만이다름 순천향대학교컴퓨터공학과 24

공용체의메모리배치예 union test char a; short int b; long int c; u; 1000 번지 => 멤버 a,b,c 는모두같은번지에할당 1001 번지 1002 번지 1003 번지 u.a (char) ub(int) u.b uc(long) u.c 순천향대학교컴퓨터공학과 25 공용체사용예 (1) #include <stdio.h> union u_tag char c; short s; long l; u_val; int main() u_val.l = (long)0x12345678; printf("%lx n",u,u_val.l); printf("%x n",u_val.s); printf("%x n",u_val.c); return 0; 순천향대학교컴퓨터공학과 26

공용체사용예 (2) u_val 0x78 0x56 0x34 0x12 u_val.c u_val.s u_val.l 순천향대학교컴퓨터공학과 27 비트필드 (bit field) 정수의개개의비트를지정하고조작하기위해사용 struct 태그명.. 자료형멤버명 : 비트폭 ;.. 순천향대학교컴퓨터공학과 28

비트필드사용예 (1) #include <stdio.h> #define ON 1 #define OFF 0 struct reg unsigned bit_0 : 1; unsigned bit_1 : 1; unsigned bit_2 : 1; unsigned bit_3 : 1; unsigned bit_4 : 1; unsigned bit_5 : 1; unsigned bit_6 : 1; unsigned bit_7 : 1; hex, *ps; int main() ps = &hex; hex.bit_0 = hex.bit_2 = hex.bit_6 = hex.bit_7 = ON; hex.bit_1 = hex.bit_3 = hex.bit_4 = hex.bit_5 = OFF; printf(" %x n", *(int *)ps); if (hex.bit_7 == ON) printf("msb = 1 n"); else printf("msb = 0 n"); return 0; 순천향대학교컴퓨터공학과 29 비트필드사용예 (2) 실행결과 c5 MSB = 1 MSB LSB 7 6 5 4 3 2 1 0 ps hex 1 1 0 0 0 1 0 1 순천향대학교컴퓨터공학과 30

typedef typedef 는새로운자료형의이름을작성 기존의자료형에별도의이름 ( 동의어 ) 부여 typedef 는보통구조체의형을선언하는데많이사용 typedef int Word; Word n; Word 가 int 의동의어로선언 여기서 Word n; 은 int n; 과같은의미 순천향대학교컴퓨터공학과 31 typedef 예 (1) struct man ; char name[20]; char gender; int age; typedef struct man Man_t; Man_t teache, student[60]; struct man 을 Man_t 로선언하여이후 Man_t 는 struct man 과같은의미를갖는다. 순천향대학교컴퓨터공학과 32

typedef 예 (2) Typedef int *Intptr; Intptr p1, p2; p1, p2 는다음과같이선언한것과같다 int *p1, *p2; 순천향대학교컴퓨터공학과 33 과제 4-3 아래의두구조체를이용하여 x-y 평면상의 2 개의점의좌표를입력받아이두점을대각꼭지점으로하는직사각형을구성할때이직사각형의면적을구하는프로그램을작성하여라. struct point int x; int y; ; struct rect struct point pt1; struct point pt2; ; 순천향대학교컴퓨터공학과 34

과제 4-4 4 다음구조체를이용하여생년월일과오늘의날짜를입력받아오늘이생후몇일째인지계산하는프로그램을작성하라. struct int leap[13]; int common[13]; daytab = 366, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 365, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; 순천향대학교컴퓨터공학과 35 특별과제 과제 4-3 을수정하여임의의 5 개의점을입력받고, 임의의두점을대각꼭지점으로하는직사각형을구성할때최대의면적을갖는직사각형의두꼭지점과최대면적을구하는프로그램을작성하라. 5개의점을갖는 struct point dot[5] 배열을선언하고, 각두점의사각형경우의수 ( 이중루프 ) 에대해면적을구한후최대면적인경우조사하여해당좌표를 struct rect screen 에저장 순천향대학교컴퓨터공학과 36