Microsoft PowerPoint - chap-13.pptx

Similar documents
untitled

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

Microsoft PowerPoint - Lesson12.pptx

14 주차구조체와공용체

11장 포인터

Microsoft PowerPoint - 제13장 구조체

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

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

기초컴퓨터프로그래밍

슬라이드 1

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

구조체정의 자료형 (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

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

untitled

untitled

Microsoft PowerPoint - Chapter_09.pptx

untitled

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

; 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

K&R2 Reference Manual 번역본

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

Microsoft PowerPoint - chap09-1.ppt

KNK_C_05_Pointers_Arrays_structures_summary_v02

11장 포인터

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

PowerPoint 프레젠테이션

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

02장.배열과 클래스

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

Microsoft PowerPoint - 제11장 포인터

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

Microsoft PowerPoint - chap-11.pptx

10장. 구조체

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

중간고사

Microsoft PowerPoint - chap-06.pptx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

BACK TO THE BASIC C++ 버그 헌팅: 버그를 예방하는 11가지 코딩 습관

슬라이드 1

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

OCW_C언어 기초

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

PowerPoint 프레젠테이션

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

11장 포인터

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

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

슬라이드 1

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

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

03장.스택.key

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

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

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

Microsoft PowerPoint - chap06-2pointer.ppt

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

Microsoft PowerPoint - chap12-고급기능.pptx

ABC 9장

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

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

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션


<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

본 강의에 들어가기 전

Microsoft PowerPoint - chap09.ppt

쉽게 풀어쓴 C 프로그래밍


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

chap8.PDF

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Microsoft PowerPoint - chap06-1Array.ppt

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

C 프로그래밊 개요

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

歯9장.PDF

Microsoft PowerPoint - chap-03.pptx

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>


<C7E0BAB9C0AFBCBA5F F30365F322E696E6464>

ch15

쉽게 풀어쓴 C 프로그래밍

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

C 언어의구성요소인상수, 변수, 입 출력함수에 대하여학습

chap10.PDF

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter_04.pptx

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

Hanyang Volunteer Corps volunteer image

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

PowerPoint Template

13주-14주proc.PDF

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

Transcription:

쉽게풀어쓴 C 언어 Express 제 13 장구조체 컴퓨터프로그래밍기초

구조체란? 자료형 기본자료형 : char, int, float, double 등 파생자료형 : 배열, 열거형, 구조체, 공용체 구조체 : 서로다른자료형을하나로묶는구조 구조체 vs 배열 컴퓨터프로그래밍기초 2

구조체의선언 구조체선언형식 ( 예 ) 학생에대한데이터 태그 (tag) struct 구조체 _ 태그 _ 이름 자료형멤버 _ 이름 ; 자료형멤버 _ 이름 ;... ; struct student int number; // 학번 char name[10]; // 이름 double height; // 키 ; 구조체선언은변수선언은아님 멤버 (member) 구조체를정의하는것은와플이나붕어빵을만드는틀을정의하는것과같다. 와플이나붕어빵을실제로만만들릭위해서는구조체변수를선언하여야한다. 구조체 구조체변수 컴퓨터프로그래밍기초 3

구조체선언의예 // x값과 y값으로이루어지는화면의좌표 // 사각형 struct point struct rect int x; // x 좌표 int x; int y; // y 좌표 int y; ; int width; int height; // 복소수 struct complex double real; double imag; ; // 날짜 struct date int month; int day; int year; ; // 실수부 // 허수부 ; // 직원 struct employee char name[20]; int age; int gender; int salary; ; // 이름 // 나이 // 성별 // 월급 컴퓨터프로그래밍기초 4

구조체변수선언 구조체정의와구조체변수선언은다르다. struct student int number; char name[20]; double height; ; int main(void) struct student s1;... 구조체정의 구조체변수선언 컴퓨터프로그래밍기초 5

구조체의초기화 중괄호를이용하여초기값을나열한다. struct student int number; char name[10]; double height; ; struct student s1 = 24, "Kim", 178.9 ; 컴퓨터프로그래밍기초 6

구조체멤버참조 구조체멤버를참조하려면다음과같이. 연산자를사용한다. s1.number = 26; strcpy(s1.name, "Kim"); s1.height = 183.2; // 정수멤버 // 문자열멤버 // 실수멤버. 기호는. 구조체에서멤버를참조할때사용하는연산자입니다. 컴퓨터프로그래밍기초 7

구조체를멤버로가지는구조체 struct date int year; int month; int day; ; // 구조체선언 struct student int number; // 구조체선언 char name[10]; struct date dob; // 구조체안에구조체포함 double height; ; struct student s1; // 구조체변수선언 s1.dob.year = 1983; s1.dob.month = 03; s1.dob.day = 29; // 멤버참조 컴퓨터프로그래밍기초 8

예제 #1 #include <stdio.h> #include <stdlib.h> struct student int number; char name[10]; double height; ; 구조체선언 int main(void) struct student s; s.number = 20070001; strcpy(sname" strcpy(s.name, 홍길동 "); s.height = 180.2; 구조체변수선언 구조체멤버참조 printf(" 학번 : %d\n", s.number); printf(" 이름 : %s\n", sname); s.name); printf(" 신장 : %f\n", s.height); return 0; 학번 : 20070001 컴퓨터프로그래밍이름 : 홍길동기초신장 : 180.200000 9

예제 #2 struct student int number; char name[10]; double height; ; int main(void) struct student s; 학번을입력하시오 : 20070001 이름을입력하시오 : 홍길동신장을입력하시오 ( 실수 ): 180.2 학번: 20070001 이름 : 홍길동신장 : 180.200000 printf(" 학번을입력하시오 : "); scanf("%d", &s.number); printf(" 이름을입력하시오 : "); scanf("%s", s.name); printf(" 신장을입력하시오 ( 실수 ): "); scanf("%lf", &s.height); printf(" 학번 : %d\n", s.number); printf(" 이름 : %s\n", sname); s.name); printf(" 신장 : %f\n", s.height); return 0; 컴퓨터프로그래밍기초 10

예제 #3 #include <math.h> struct point int x; int y; ; p2 (x,y) int main(void) struct point p1, p2; int xdiff, ydiff; double dist; printf(" 점의좌표를입력하시오 (x y): "); scanf("%d %d", &p1.x, &p1.y); printf(" 점의좌표를입력하시오 (x y): "); scanf("%d %d", &p2.x, &p2.y); p1 (x,y) xdiff = p1.x - p2.x; ydiff = p1.y - p2.y; dist = sqrt(xdiff * xdiff + ydiff * ydiff); printf(" 두점사이의거리는 %f 입니다.\n", dist); return 0; 점의좌표를입력하시오 (x y): 10 10 점의좌표를입력하시오 (x y): 20 20 컴퓨터프로그래밍두점사이의기초거리는 14.142136입니다. 11

예제 #4 struct point int x; int y; ; p1(x,y) struct rect struct point p1; struct point p2; ; p2(x,y) int main(void) struct rect r; int w, h, area, peri; printf(" 왼쪽상단의좌표를입력하시오 : "); scanf("%d %d", &r.p1.x, &r.p1.y); printf(" 오른쪽상단의좌표를입력하시오 : "); scanf("%d %d", &r.p2.x, &r.p2.y); 왼쪽상단의좌표를입력하시오 :11 오른쪽상단의좌표를입력하시오 :66 면적은 25 이고둘레는 20 입니다. w = r.p2.x - r.p1.x; h = rp2y r.p2.y - rp1y; r.p1.y; area = w * h; peri = 2 * w + 2 * h; printf(" 면적은 %d 이고둘레는 %d 입니다.\n", area, peri); return 0; 컴퓨터프로그래밍기초 12

구조체변수의대입과비교 같은구조체변수까리대입은가능하지만비교는불가능하다. struct point int x; int y; ; int main(void) struct point p1 = 10, 20; struct point p2 = 30, 40; p2 = p1; // 대입가능 if( p1==p2) // 비교 -> 컴파일오류!! printf("p1 와 p2 이같습니다.") if( (p1.x == p2.x) && (p1.y == p2.y) ) printf("p1와 p2이같습니다.") // 올바른비교 컴퓨터프로그래밍기초 13

구조체배열 구조체배열의선언 struct student int number; char name[20]; double height; ; int main(void) struct student list[100]; // 구조체의배열선언 list[2].number = 27; strcpy(list[2].name, " 홍길동 "); list[2].height = 178.0; 구조체배열의초기화 컴퓨터프로그래밍기초 struct student list[3] = 1, "Park", 172.8, 2, "Kim", 179.2, 3, "Lee"," 180.3 ; 14

구조체배열예제 #define SIZE 3 struct student int number; char name[20]; double height; ; int main(void) struct student list[size]; int i; for(i = 0; i < SIZE; i++) printf(" 학번을입력하시오 : "); scanf("%d", &list[i].number); printf(" 이름을입력하시오 : "); scanf("%s", " list[i].name); printf(" 신장을입력하시오 ( 실수 ): "); scanf("%lf", &list[i].height); 학번을입력하시오 : 20070001 이름을입력하시오 : 홍길동신장을입력하시오 ( 실수 ): 180.2 학번을입력하시오 : 20070002 이름을입력하시오 : 김유신신장을입력하시오 ( 실수 ): 178.3 학번을입력하시오 : 20070003 이름을입력하시오 : 이성계신장을입력하시오 ( 실수 ): 176.3 학번 : 20070001, 이름 : 홍길동, 신장 : 180.200000 학번 : 20070002, 이름 : 김유신, 신장 : 178.300000 학번 : 20070003, 이름 : 이성계, 신장 : 176.300000 for(i = 0; i< SIZE; i++) printf(" 학번 : %d, 이름 : %s, 신장 : %f\n", list[i].number, list[i].name, list[i].height); return 0; 컴퓨터프로그래밍기초 15

구조체와포인터 구조체를가리키는포인터 struct student *p; struct student s = 20070001, " 홍길동 ", 180.2 ; struct student *p; p = &s; printf(" 학번 =%d 이름 =%s 키 =%f \n", s.number, s.name, s.height); printf(" 학번 =%d 이름 =%s 키 =%f \n", p->number,p->name,p->height); h 컴퓨터프로그래밍기초 16

-> 연산자 -> 연산자는구조체포인터로구조체멤버를참조할때사용 struct student *p; struct student s = 20070001, " 홍길동 ", 180.2 ; struct student *p; p = &s; printf(" 학번 =%d 이름 =%s 키 =%f \n", snumber s.number, sname s.name, sheight); s.height); printf(" 학번 =%d 이름 =%s 키 =%f \n", (*p).number,(*p).name,(*p).height); printf(" 학번 =%d 이름 =%s 키 =%f \n", p->number, p->name, p->height); (*p) p).number p가가리키는구조체변수 p가가리키는구조체변수의멤버 number == p->number p 가가리키는구조체변수의멤버 number 컴퓨터프로그래밍기초 17

예제 // 포인터를통한구조체참조 #include <stdio.h> struct student int number; char name[20]; double height; ; int main(void) struct student s = 20070001, " 홍길동 ", 180.2 ; struct student *p; p = &s; printf(" 학번 =%d 이름 =%s 키 =%f \n", s.number, s.name, s.height); printf(" 학번 =%d 이름 =%s 키 =%f \n", (*p) p).number,( (*p) p).name,( (*p) p).height); printf(" 학번 =%d 이름 =%s 키 =%f \n", p->number, p->name, p->height); return 0; 학번 =20070001 이름 = 홍길동키 =180.200000 학번 =20070001 이름 = 홍길동키 =180.200000 학번 =20070001 이름 = 홍길동키 =180.200000 컴퓨터프로그래밍기초 18

포인터를멤버로가지는구조체 struct date int month; int day; int year; ; struct student int number; char name[20]; double height; struct date *dob; ; int main(void) struct date d = 3, 20, 1980 ; struct student s = 20070001, "Kim", 180.2 ; 학번 : 20070001 이름 :Kim 신장 : 180.200000 생년월일 : 1980 년 3 월 20 일 s.dob = &d; 컴퓨터프로그래밍기초 printf(" 학번 : %d\n", s.number); printf(" 이름 : %s\n", s.name); printf(" 신장 : %f\n", s.height); printf(" 생년월일 : %d년 %d월 %d일\n", s.dob->year, s.dob->month, s.dob->day); return 0; 19

자체참조구조체 struct student int number; char name[10]; double height; h struct student *next; ; int main(void) struct student s1 = 30, "Kim", 167.2, NULL ; struct student s2 = 31, "Park", 179.1, NULL ; struct student *first = NULL; struct student *current = NULL; first = &s1; s1.next = &s2; s2.next = NULL; current = first; while( current!= NULL ) printf(" 학생의번호 =%d 이름 =%s, 키 =%f\n", current->number, current->name, current->height); current = current->next; 학생의번호 =30 이름 =Kim, 키 =167.200000 학생의번호 =31 이름 =Park, 키 =179.100000 컴퓨터프로그래밍기초 20

구조체와함수 구조체를함수의인수로전달하는경우 구조체의복사본이함수로전달되게된다. 만약구조체의크기가크면그만큼시간과메모리가소요된다. int equal(struct student s1, struct student s2) if( strcmp(s1.name, s2.name) == 0 ) return 1; else return 0; 구조체의포인터를함수의인수로전달하는경우 시간과공간을절약할수있다. int equal(struct student const *p1, struct student const *p2) if( strcmp(p1->name, p2->name) == 0 ) return 1; else return 0; 컴퓨터프로그래밍기초 21

구조체를반환하는경우 복사본이반환된다. struct student make_student(void) struct student s; printf(" 나이 : ); scanf("%d", &s.age); printf(" 이름 : ); scanf("%s", s.name); printf(" 키 : ); scanf("%f", &s.height); 구조체 s 의복사본이반환된다. return s; 컴퓨터프로그래밍기초 22

예제 #include <stdio.h> struct vector float x; float y; ; struct vector get_vector_sum(struct vector*, struct vector *); int main(void) id) struct vector a = 2.0, 3.0 ; struct vector b = 5.0, 6.0 ; struct vector sum; sum = get_vector_sum(&a, &b); printf(" 벡터의합은 (%f, %f) 입니다.\n", sum.x, sum.y); a + b a b return 0; struct vector get_vector_sum(struct vector *a, struct vector *b) struct t vector result; result.x = a->x + b->x; result.y = a->y + b->y; return result; 컴퓨터프로그래밍벡터의합은기초(7.000000, 9.000000) 입니다. 23

예제 -skip #include <stdio.h> struct point int x; int y; ; // 기울기와 y절편을계산 int get_line_parameter(struct point p1, struct point p2, float *slope, float *yintercept) if( p1.x == p2.x ) return (-1); else *slope = (float)(p2.y - p1.y)/(float)(p2.x )(p - p1.x); *yintercept = p1.y - (*slope) * p1.x; return (0); int main(void) struct point pt1 = 3, 3, pt2 = 6, 6; float s,y; if( get_line_parameter(pt1, t t1 pt2, &s, &y) == -1 ) printf(" 오류 : 두점의 x좌표값이동일합니다.\n"); else printf(" 기울기는 %f, y절편은 %f\n", s, y); return 0; 컴퓨터프로그래밍기울기는기초 1.000000, y절편은 0.000000 24

공용체 공용체 (union) 같은메모리영역을여러개의변수가공유 공용체를선언하고사용하는방법은구조체와아주비슷 union example char c; int i; ; // 같은기억공간공유 // 같은기억공간공유 컴퓨터프로그래밍기초 25

예제 #include <stdio.h> union example int i; char c; ; int main(void) union example v; 공용체선언공용체변수선언. char 형으로참조. v.c = 'A'; printf("v.c:%c v.i:%i\n", v.c, v.i ); vi= v.i 10000; int 형으로참조. printf("v.c:%c v.i:%i\n", v.c, v.i); v.c:a v.i:65 v.c: v.i:10000 컴퓨터프로그래밍기초 26 26

ip 주소예제 -skip #include <stdio.h> union ip_address unsigned long laddr; unsigned char saddr[4]; ; int main(void) union ip_address addr; addr.saddr[0] = 1; addr.saddr[1] = 0; addr.saddr[2] = 0; addr.saddr[3] = 127; printf("%x\n", addr.laddr); return 0; 7f000001 컴퓨터프로그래밍기초 27

타입필드를같이사용하는예 #include <stdio.h> #define STU_NUMBER 1 #define REG_NUMBER 2 struct student int type; union int stu_number; // 학번 char reg_number[15]; // 주민등록번호 id; char name[20]; ; void print(struct student s) switch(s.type) case STU_NUMBER: printf(" 학번 : %d\n", s.id.stu_number); printf(" 이름 : %s\n", s.name); break case REG_NUMBER: printf(" 주민등록번호 : %s\n", s.id.reg_number); printf(" 이름 : %s\n", s.name); break default: printf(" 타입오류 \n"); break 컴퓨터프로그래밍기초 28

타입필드를같이사용하는예 int main(void) struct student s1, s2; s1.type = STU_NUMBER; s1.id.stu_number = 20070001; strcpy(s1.name, " 홍길동 "); s2.type 2t = REG_NUMBER; strcpy(s2.id.reg_number, "860101-1058031"); strcpy(s2.name, " 김철수 "); print(s1); print(s2); return 0; 학번 : 20070001 이름 : 홍길동주민등록번호 : 1244868 이름 : 김철수 컴퓨터프로그래밍기초 29

열거형 열거형 (enumeration) 이란변수가가질수있는값들을미리열거해놓은자료형 ( 예 ) 요일을저장하고있는변수는 일요일, 월요일, 화요일, 수요일, 목요일, 금요일, 토요일 중의하나의값만가질수있다. 열거형은 enum 이라는키워드를사용하여만들어진다. enum 태그 _ 이름 값 1, 값 2,... ; enum days1 MON, TUE, WED, THU, FRI, SAT, SUN ; enum days2 MON=1, TUE, WED, THU, FRI, SAT, SUN ; enum days3 MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7 ; enum days4 MON, TUE=2, WED=3, THU, FRI, SAT, SUN ; enum days1 d; d=wed; 컴퓨터프로그래밍기초 30

열거형의예 enum days SUN, MON, TUE, WED, THU, FRI, SAT ; enum colors white, red, blue, green, black ; enum boolean 0, 1 ; enum months JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC ; enum major COMMUNICATION, COMPUTER, ELECTRIC, ELECTRONICS ; enum component MAIN_BOARD, CPU, GRAPHIC_CARD, CARD DISK, MEMORY ; enum levels low = 1, medium, high ; enum CarOptions SunRoof = 0x01, Spoiler = 0x02, FogLights = 0x04, 04 TintedWindows = 0x08, 컴퓨터프로그래밍기초 31

열거형과다른방법과의비교 정수사용기호상수열거형 switch(code) case 1: printf("lcd TV\n"); break; case 2: printf("pdp TV\n"); break; #define LCD 1 #define PDP 2 switch(code) case LCD: printf("lcd TV\n"); break; case PDP: printf("pdp TV\n"); break; enum tvtype LCD, PDP ; enum tvtype code; switch(code) case LCD: printf("lcd TV\n"); break; case PDP: printf("pdp TV\n"); break; 컴퓨터는알기쉬우나사람은 기호상수를작성할때오류를 컴파일러가중복이일어나지않 기억하기어렵다. 저지를수있다. 도록체크한다. 컴퓨터프로그래밍기초 32

예제 // 열거형 #include <stdio.h> enum days MON, TUE, WED, THU, FRI, SAT, SUN ; char *days_name[] = "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday" ; int main(void) enum days d; for(d=mon; d<=sun; d++) printf("%d 번째요일의이름은 %s입니다\n", d, days_name[d]); 0 번째요일의이름은 monday 입니다 1번째요일의이름은 tuesday입니다 2번째요일의이름은 wednesday입니다 3번째요일의이름은 thursday입니다 4 번째요일의이름은 friday 입니다 5번째요일의이름은 saturday입니다컴퓨터프로그래밍 6번째요일의기초이름은 sunday입니다 33

예제 -skip #include <stdio.h> enum tvtype tube, lcd, plasma, projection ; int main(void) enum tvtype type; TV 종류코드를입력하시오 : 3 프로젝션 TV를선택하셨습니다. return 0; 컴퓨터프로그래밍기초 printf("tv 종류코드를입력하시오 : "); scanf("%d", &type); switch(type) case tube: printf(" 브라운관 TV를선택하셨습니다.\n"); break; case lcd: printf("lcd TV를선택하셨습니다.\n"); break; case plasma: printf("pdp TV를선택하셨습니다.\n"); break; case projection: printf(" 프로젝션 TV를선택하셨습니다.\n"); break; default: printf(" 다시선택하여주십시오.\n"); break; 34

typedef typedef 은새로운자료형 (type) 을정의 (define) C 의기본자료형을확장시키는역할 typedef old_type new_type; 새로운자료형을정의 typedef unsigned char BYTE; 기존의자료형 새로운자료형 point typedef 기본자료형 int float 컴퓨터프로그래밍기초 35

typedef 의예 기본자료형 int short unsigned int unsigned short unsigned char char 재정의된자료형 INT32 INT16 UINT32 UINT16 UCHAR, BYTE CHAR typedef int INT32; typedef struct complex typedef unsigned int UINT32; double real; double imag; INT32 i; // int i; 와같다. COMPLEX; UINT32 k; // unsigned int k; 와같다. COMPLEX x, y; typedef struct point int x; int y; POINT; POINT p,q; typedef enum FALSE, TRUE BOOL; BOOL condition; // enum FALSE, TRUE condition; typedef char * STRING_PTR; STRING_PTR p; // char *p; 컴퓨터프로그래밍기초 36

typedef 과 #define 비교 이식성을높여준다. 코드를컴퓨터하드웨어에독립적으로만들수있다 ( 예 ) int형은 2바이트이기도하고 4바이트, int형대신에 typedef 을이용한 INT32 나 INT16 을사용하게되면확실하게 2바이트인지 4바이트인지를지정할수있다. #define을이용해도 typedef과비슷한효과를낼수있다. 즉다음과같이INT32를정의할수있다. #define UINT32 unsigned int typedef float VECTOR[2];// #define 으로는불가능하다. 문서화의역할도한다. typedef을사용하게되면주석을붙이는것과같은효과 컴퓨터프로그래밍기초 37

예제 #include <stdio.h> typedef struct point int x; int y; POINT; POINT translate(point p, POINT delta); int main(void) POINT p = 2, 3 ; POINT delta = 10, 10 ; POINT result; result = translate(p, delta); printf(" 새로운점의좌표는 (%d, %d) 입니다.\n", result.x, result.y); return 0; POINT translate(point p, POINT delta) POINT new_p; new_p.x = p.x + delta.x; new_p.y = p.y + delta.y; return new_p; 컴퓨터프로그래밍기초새로운점의좌표는 (12, 13) 입니다. 38

Q & A 컴퓨터프로그래밍기초 39