9 include stdio h int mainvoid int num

  • Slides: 55
Download presentation
9장. 구조체 #include <stdio. h> int main(void) { int num; printf(“Please enter an integer:

9장. 구조체 #include <stdio. h> int main(void) { int num; printf(“Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("Is negative. n"); printf("num = %dn", num); return 0; } 1

구조체 §구조체의 기본 student 구조체의 정의 및 사용 예(1/2) 01: /* Ex 09_01. c

구조체 §구조체의 기본 student 구조체의 정의 및 사용 예(1/2) 01: /* Ex 09_01. c */ 02: #include <stdio. h> 03: #include <string. h> 04: 05: struct student { 06: char name[20]; 07: int korean, english, math; 구조체의 정의 08: double average; 09: }; 10: 11: int main(void) 12: { 구조체 변수의 선언 13: struct student s 1; 14: struct student s 2 = {"박나나", 90, 78, 86}; 15: 9장. 구조체 변수의 선언 및 초기화 14

구조체 §구조체의 기본 student 구조체의 정의 및 사용 예(2/2) 16: 17: 18: 19: 20:

구조체 §구조체의 기본 student 구조체의 정의 및 사용 예(2/2) 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: } s 1. korean = 100; s 1. english = 100; s 1. math = 100; strcpy(s 1. name, "김모모"); s 1. average = (double)(s 1. korean+s 1. english+s 1. math) / 3; 구조체 변수의 사용 s 2. average = (double)(s 2. korean+s 2. english+s 2. math) / 3; printf("%s : %5. 2 fn", s 1. name, s 1. average); printf("%s : %5. 2 fn", s 2. name, s 2. average); return 0; 9장. 구조체 15

구조체 §구조체의 활용 구조체 간의 초기화 및 대입 01: 02: 03: 04: 05: 06:

구조체 §구조체의 활용 구조체 간의 초기화 및 대입 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: /* Ex 09_03. c */ #include <stdio. h> struct point { int x, y; }; int main(void) { struct point p 1 = {10, 20}; struct point p 2 = {30, 40}; struct point p 3 = p 1; struct point p 4; 구조체 변수의 선언 및 초기화 구조체 간의 초기화 printf("p 3의 좌표 : %d, %dn", p 3. x, p 3. y); p 4 = p 2; 구조체 간의 대입 printf("p 4의 좌표 : %d, %dn", p 4. x, p 4. y); } return 0; 9장. 구조체 20

구조체 §구조체의 활용 구조체 배열을 이용한 성적 처리 프로그램(1/3) 01: 02: 03: 04: 05:

구조체 §구조체의 활용 구조체 배열을 이용한 성적 처리 프로그램(1/3) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: /* Ex 09_04. c */ #include <stdio. h> #define MAX_STUDENT 5 구조체 배열의 크기 struct student { char name[20]; int korean, english, math; double average; }; 구조체의 정의 int main(void) { struct student std[MAX_STUDENT]; int i; double total_average = 0; 구조체 배열의 선언 printf("%d 명의 학생 정보를 입력하세요. n", MAX_STUDENT); 9장. 구조체 24

구조체 §구조체의 활용 구조체 배열을 이용한 성적 처리 프로그램(2/3) 19: 20: 21: 22: 23:

구조체 §구조체의 활용 구조체 배열을 이용한 성적 처리 프로그램(2/3) 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: for( i = 0 ; i < MAX_STUDENT ; i++ ) { printf("이름 : "); scanf("%s", std[i]. name); printf("국어, 영어, 수학 점수 : "); scanf("%d %d %d", &std[i]. korean, &std[i]. english, &std[i]. math); std[i]. average = (double) (std[i]. korean+std[i]. english+std[i]. math) / 3; total_average += std[i]. average; } 구조체 배열의 입력 total_average /= MAX_STUDENT; printf("n이름 국어 영어 수학 평균n"); 9장. 구조체 25

구조체 §구조체의 활용 구조체 배열을 이용한 성적 처리 프로그램(3/3) 34: 35: 36: 37: 38:

구조체 §구조체의 활용 구조체 배열을 이용한 성적 처리 프로그램(3/3) 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: } for( i = 0 ; i < MAX_STUDENT ; i++ ) { printf("%-10 s %3 d %3 d %6. 2 fn", std[i]. name, std[i]. korean, std[i]. english, std[i]. math, std[i]. average); } printf("전체 평균 : %6. 2 fn", total_average); 구조체 배열의 출력 return 0; 9장. 구조체 26

구조체 §구조체의 활용 구조체 포인터의 사용 예(1/2) 01: 02: 03: 04: 05: 06: 07:

구조체 §구조체의 활용 구조체 포인터의 사용 예(1/2) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: /* Ex 09_05. c */ #include <stdio. h> #include <math. h> struct point { int x, y; }; 구조체의 정의 double Get. Distance(struct point* p 1, struct point* p 2); 구조체 포인터를 매개변수로 갖는 함수 선언 int main(void) { struct point pt 1 = {0, 0}; struct point pt 2 = {10, 10}; double distance; distance = Get. Distance(&pt 1, &pt 2); printf("두 점 사이의 거리 : %5. 2 fn", distance); 9장. 구조체 변수의 주소를 함수의 인자로 전달 29

구조체 §구조체의 활용 구조체 포인터의 사용 예(2/2) 20: 21: 22: 23: 24: 25: 26:

구조체 §구조체의 활용 구조체 포인터의 사용 예(2/2) 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: } return 0; double Get. Distance(struct point* p 1, struct point* p 2) { int dx = p 2 ->x - p 1 ->x; int dy = p 2 ->y - p 1 ->y; } 구조체 포인터를 인자로 갖는 함수 정의 return sqrt(dx*dx + dy*dy); 9장. 구조체 30

구조체 §비트필드의 사용 예(1/2) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10:

구조체 §비트필드의 사용 예(1/2) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: /* Ex 09_06. c */ #include <stdio. h> struct time { unsigned int sec : 6; unsigned int min : 6; unsigned int hour : 5; }; int main(void) { struct time t 1; 비트필드의 정의 비트필드 변수의 선언 printf("time 구조체의 크기 : %dn", sizeof(struct time)); 9장. 구조체 비트필드의 크기 34

공용체와 열거체 §공용체 공용체의 사용 예(1/2) 01: 02: 03: 04: 05: 06: 07: 08:

공용체와 열거체 §공용체 공용체의 사용 예(1/2) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: /* Ex 09_07. c */ #include <stdio. h> union data { unsigned long dword; unsigned char byte[4]; }; int main(void) { union data d 1; int i; 공용체의 정의 공용체 변수의 선언 printf("data 공용체의 크기 : %dn", sizeof(union data)); 9장. 구조체 공용체의 크기 구하기 39

공용체와 열거체 §공용체 공용체의 사용 예(2/2) 16: 17: 18: 19: 20: 21: 22: }

공용체와 열거체 §공용체 공용체의 사용 예(2/2) 16: 17: 18: 19: 20: 21: 22: } d 1. dword = 0 x 12345678; printf("d 1. dword = %08 xn", d 1. dword); for( i = 0 ; i < 4 ; i++ ) printf("d 1. byte[%d] = %02 xn", i, d 1. byte[i]); 공용체의 사용 return 0; 9장. 구조체 40

공용체와 열거체 §열거체 열거체의 사용 예(1/2) 01: 02: 03: 04: 05: 06: 07: 08:

공용체와 열거체 §열거체 열거체의 사용 예(1/2) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: /* Ex 09_08. c */ #include <stdio. h> enum week {sun, mon, tue, wed, thu, fri, sat}; int main(void) { enum weekday; weekday = mon; 열거체의 정의 열거체형 변수의 선언 열거 상수의 사용 switch( weekday ) { case sun: printf("일요일입니다. n"); break; case mon: printf("월요일입니다. n"); break; 9장. 구조체 46

공용체와 열거체 §열거체 열거체의 사용 예(2/2) 20: 21: 22: 23: 24: 25: 26: 27:

공용체와 열거체 §열거체 열거체의 사용 예(2/2) 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: } case tue: printf("화요일입니다. n"); break; case wed: printf("수요일입니다. n"); break; case thu: printf("목요일입니다. n"); break; case fri: printf("금요일입니다. n"); break; case sat: printf("토요일입니다. n"); break; } return 0; 9장. 구조체 47

typedef §typedef의 정의 typedef의 사용 예 01: 02: 03: 04: 05: 06: 07: 08:

typedef §typedef의 정의 typedef의 사용 예 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: /* Ex 09_09. c */ #include <stdio. h> struct point { int x; int y; }; 구조체의 정의 typedef struct point POINT; typedef 정의 int main(void) { struct point p 1 = {10, 20}; POINT p 2; p 2 = p 1; 같은 구조체 변수 간의 대입 printf("p 2의 좌표 : %d, %dn", p 2. x, p 2. y); } return 0; 9장. 구조체 50