제 8장 구조체 Hello!! C 언어 강성호 김학배 최우영.

Slides:



Advertisements
Similar presentations
03 변수와 자료형 세종대학교 최옥경 교수 참고 : 한빛미디어 뇌를 자극하는 C, INFINITY Perfect C.
Advertisements

프로그래밍1 및 실습 (C언어) - 3장 기본자료형 (3.6부터 끝까지) -
데이터의 표현과 연산 (1) (Chapter 3)
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express Slide 1 (of 25)
제 8 장  파서 생성기 YACC 사용하기.
제1장 코드와라이브러리 Page 1 ~ 30 ■■■■■ ■ ■.
구조체 활용 구조체 활용.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
C언어: 배열 (Arrays).
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
6장. printf와 scanf 함수에 대한 고찰
제 3 장. 배열과 구조체 및 포인터.
head data link data link data link NULL a b c
자료 구조: Chapter 3 (2)구조체, 포인터
Chapter 9 – 구조형과 리스트 처리 Outline 9.1 자신 참조 구조형 9.2 선형 연결 리스트 9.3 리스트 연산
8장 포인터.
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
변수와 자료형.
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열.
Chapter 06. 선택문.
제 2 장 변수와 상수.
6장 배열.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
adopted from KNK C Programming : A Modern Approach
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
Chapter 2 Lexical Elements, Operators, and the C System
C언어 프로그래밍의 이해 Ch13. 선행처리기와 주석문.
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
제어문 & 반복문 C스터디 2주차.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
4장 자료형.
Chapter 05. 입출력 함수.
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
C 프로그래밍 기초.
-Part1- 제7장 반복문이란 무엇인가.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
3주차: Control Flow and Others
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
C.
printf("Global Korea\n");
List, ArrayList, Vector, LinkedList 가 있습니다
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
3b장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
List, ArrayList, Vector, LinkedList 가 있습니다
11장. 1차원 배열.
Presentation transcript:

제 8장 구조체 Hello!! C 언어 강성호 김학배 최우영

순서 제 8장 구조체 구조체의 개요 구조체의 형식 구조체의 연산 구조체의 중첩 공용체 구조체의 응용 요약

구조체의 개요 구조체의 정의 구조체 사용의 장점 구조체 사용의 단점 단일 명칭으로 하나 이상의 변수를 함께 묶은 형태의 변수 제 8장 구조체 구조체의 정의 단일 명칭으로 하나 이상의 변수를 함께 묶은 형태의 변수 구조체 사용의 장점 연관된 데이터에 의한 반복성 회피 매개변수로 사용 가능 함수에서 여러개의 데이터를 한 번에 주고 받을 수 있음 구조체 사용의 단점 메모리 낭비

구조체의 형식 연관된 데이터의 형태의 예 데이터베이스 프로그램에 유용한 형태의 변수 신체조건 인적사항 레코드 키 성명 가수명 제 8장 구조체 연관된 데이터의 형태의 예 데이터베이스 프로그램에 유용한 형태의 변수 신체조건 인적사항 레코드 키 성명 가수명 몸무게 주소 레코드사명 가슴둘레 전화번호 소속회사 앉은키 생일 코드번호

구조체의 형식 struct 구조체-택 { . . . . . . }; 제 8장 구조체 struct 구조체-택 { . . . . . . }; struct jum{ int x_axis; int y_axis; }; struct 구조체-택 { . . . . . . } 선언자-리스트; }point1, *point2;

구조체의 형식 struct { . . . . . . . } 선언자-리스트; struct 구조체-택 선언자-리스트; 제 8장 구조체 struct { . . . . . . . } 선언자-리스트; struct{ int x_axis; int y_axis; }point1, *point2; struct 구조체-택 선언자-리스트; struct jum point1, *point2;

구조체의 연산 구조체 멤버의 연산자 Case I 구조체명.구성원명 struct number{ doouble real; 제 8장 구조체 구조체 멤버의 연산자 Case I 구조체명.구성원명 struct number{ doouble real; double imaginary; }; struct number x1; x1.real = 2.0; x1.imaginary = 3.0;

구조체의 연산 [예제 8-1] #include <stdio.h> main(){ struct people{ 제 8장 구조체 [예제 8-1] #include <stdio.h> main(){ struct people{ char name; int height; int weight; } data_1,data_2; data_1.name='a'; data_1.height=170; data_1.weight=70; data_2.name='b'; data_2.height=165; data_2.weight=55; printf("data_1.name=%c data_1.height=%d data_1.weight=%d\n", data_1.name,data_1.height,data_1.weight) ; 계속

구조체의 연산 제 8장 구조체 [예제 8-1] 계속 printf("data_2.name=%c data_2.height=%d data_1.weight=%d\n", data_2.name,data_2.height,data_2.weight) ; } [실행결과] data_1.name=a data_1.height=170 data_1.weight=70 data_2.name=b data_2.height=165 data_2.weight=55

구조체의 연산 [예제 8-2] #include <stdio.h> struct profile { 제 8장 구조체 [예제 8-2] #include <stdio.h> struct profile { char name[20]; char address[20]; char telephone[20]; char birthday[20]; } data={"HAN","SEOUL","361-2528","75/03/10" }; main(){ printf("name address telephone birthday\n"); printf("%s %s %s %s\n", data.name,data.address,data.telephone,data.birthday); } [실행결과] name address telephone birthday HAN SEOUL 361-2528 75/03/10

구조체의 연산 [예제 8-3] #include <stdio.h> struct profile { 제 8장 구조체 [예제 8-3] #include <stdio.h> struct profile { char name[20]; char address[20]; char telephone[20]; char birthday[20]; } ; main(){ struct profile data={"HAN","SEOUL","361-2528","75/03/10" }; printf("name address telephone birthday\n"); printf(" %s %s %s %s\n", data.name,data.address,data.telephone,data.birthday); } [실행결과] name address telephone birthday HAN SEOUL 361-2528 75/03/10

구조체의 연산 [예제 8-4] #include <stdio.h> #include <string.h> 제 8장 구조체 [예제 8-4] #include <stdio.h> #include <string.h> struct profile { char name[20]; char address[20]; char telephone[20]; char birthday[20]; } ; 계속

구조체의 연산 [예제 8-4] 계속 main(){ struct profile data; 제 8장 구조체 [예제 8-4] 계속 main(){ struct profile data; strcpy(data.name,"HAN"); strcpy(data.address,"SEOUL"); strcpy(data.telephone,"361-2528"); strcpy(data.birthday,"75/03/10"); printf("name address telephone birthday\n"); printf("%s %s %s %s\n", data.name,data.address,data.telephone,data.birthday); }

구조체의 연산 구조체 멤버의 연산자 Case II 구조체명->구성원명 struct number{ doouble real; 제 8장 구조체 구조체 멤버의 연산자 Case II 구조체명->구성원명 struct number{ doouble real; double imaginary; }; struct number *x2; (*x2).real ⇒ x2->real (*x2).imaginary ⇒ x2->imaginary

구조체의 연산 [예제 8-5] #include<stdio.h> 제 8장 구조체 [예제 8-5] #include<stdio.h> #include<string.h> [실행결과] main(){ Product name is pencil struct product { Color is white ,and cost is $3 char name[20]; char color[20]; int cost; } a,*pnt ; pnt=&a; strcpy(pnt->name,"pencil"); strcpy(pnt->color,"white"); pnt->cost = 3; printf("Product name is %s\n",pnt->name); printf("Color is %s ,and cost is $%d\n", pnt->color,pnt->cost); }

구조체의 연산 [예제 8-6] #include<stdio.h> struct hello{ char *pnt1; 제 8장 구조체 [예제 8-6] #include<stdio.h> struct hello{ char *pnt1; char *pnt2; char *pnt3; } greeting ; main(){ int x; printf("Input'1'if morning,'2'if afternoon,'3'if evening \n"); scanf("%d",&x); greeting.pnt1 = "Good morning"; greeting.pnt2 = "Good afternoon"; greeting.pnt3 = "Good evening"; 계속

구조체의 연산 [예제 8-6] 계속 if(x==1) printf("%s",greeting.pnt1); else if(x==2) 제 8장 구조체 [예제 8-6] 계속 if(x==1) printf("%s",greeting.pnt1); else if(x==2) printf("%s",greeting.pnt2); else if(x==3) printf("%s",greeting.pnt3); else printf("error"); } [실행결과] Input'1'if morning,'2'if afternoon,'3'if evening 1 Good morning

구조체의 연산 [예제 8-7] #include <stdio.h> main() { struct number{ 제 8장 구조체 [예제 8-7] #include <stdio.h> main() { struct number{ int x; int y; }; struct number a[5], *pnt; pnt = a; int i; for(i=0 ;i<5 ;i++) printf("pnt+%d 's address is %p and it points to %p\n", i,&pnt+i,pnt+i); } 계속

구조체의 연산 제 8장 구조체 [예제 8-7] 계속 [실행결과] pnt+0 's address is 1669:0FFC and it points to 1669:0FE8 pnt+1 's address is 1669:1000 and it points to 1669:0FEC pnt+2 's address is 1669:1004 and it points to 1669:0FF0 pnt+3 's address is 1669:1008 and it points to 1669:0FF4 pnt+4 's address is 1669:100C and it points to 1669:0FF8

구조체의 중첩 중첩된 구조체란 : 중첩된 구조체는 구조체내에 구성원으로서 구조체를 가진다. struct jum{ 제 8장 구조체 중첩된 구조체란 : 중첩된 구조체는 구조체내에 구성원으로서 구조체를 가진다. struct jum{ int x_axis; int y_axis; }; /* 중첩된 구조체 형태 */ struct rectangle{ struct jum point1; struct jum point2;

구조체의 중첩 [예제 8-8] #include<stdio.h> struct dot { int x; int y; }; 제 8장 구조체 [예제 8-8] #include<stdio.h> struct dot { int x; int y; }; struct square { struct dot topleft; struct dot bottomrgt; } rectangle; long area; main(){ printf("Input the x coordinate of top left: "); scanf("%d",&rectangle.topleft.x); printf("Input the y coordinate of top left: "); 계속

구조체의 중첩 [예제 8-8] 계속 scanf("%d",&rectangle.topleft.y); 제 8장 구조체 [예제 8-8] 계속 scanf("%d",&rectangle.topleft.y); printf("Input the x coordinate of bottom right: "); scanf("%d",&rectangle.bottomrgt.x); printf("Input the y coordinate of bottom right: "); scanf("%d",&rectangle.bottomrgt.y); area=(rectangle.bottomrgt.x - rectangle.topleft.x) * (rectangle.topleft.y - rectangle.bottomrgt.y); printf("The area of the rectangular form is %ld\n",area); } [실행결과] Input the x coordinate of top left: 2 Input the y coordinate of top left: 6 Input the y coordinate of bottom right: 8 Input the y coordinate of bottom right: 3 The area of the rectangular form is 18

구조체의 중첩 [예제 8-9] #include<stdio.h> main(){ struct dot{ int x; 제 8장 구조체 [예제 8-9] #include<stdio.h> main(){ struct dot{ int x; int y; struct dot *pnt; } dot1 ; dot1.pnt = & dot1 ; printf("address of dot1 is %p\n",&dot1); printf("dot1.pnt points to itself (%p)\n",dot1.pnt); printf("address of dot1.pnt is %p\n",&dot1.pnt); } [실행결과] address of dot1 is 166D:0FF8 dot1.pnt points to itself (166D:0FF8) address of dot1.pnt is 166D:0FFC

공용체 공용체의 정의 동일한 기억장소를 서로 다른 데이터형이 공동으로 사용하는 유도형 데이터이다. 제 8장 구조체 공용체의 정의 동일한 기억장소를 서로 다른 데이터형이 공동으로 사용하는 유도형 데이터이다. struct s_tag{ union u_tag{ int x; int x; int y; int y; char *p; char *p; s_val; u_val; }; }; 구조체와 공용체는 기억장소 할당에 차이가 있다

구조체와 공용체의 차이 공용체와 구조체가 기억장소에 저장되는 형태 구조체 모든 멤버에 기억장소가 각각 할당 공용체 제 8장 구조체 공용체와 구조체가 기억장소에 저장되는 형태 구조체 모든 멤버에 기억장소가 각각 할당 공용체 가장 크기가 큰 멤버변수의 기억장소만큼 할당 같은 기억장소에 반복해서 멤버 설정 각 멤버의 선두번지가 일치하고 있음에 유의할것 u_val.p u_val.x s_val.x s_val.y s_val.p u_val.y 기억장소를 공유한다 . 각 멤버가 서로 다른 기억장소를 차지한다 . 공용체의 경우 구조체의 경우

구조체와 공용체의 차이 [예제 8-10] /* 구조체와 공용체의 비교 */ #include <stdio.h> 제 8장 구조체 [예제 8-10] /* 구조체와 공용체의 비교 */ #include <stdio.h> union number{ int x; int y; } ex1; struct num{ } ex2; main(){ ex1.x = 1234; ex1.y = 4321; 계속

구조체와 공용체의 차이 제 8장 구조체 [예제 8-10] 계속 printf("union member variable = %d\n", ex1.x); ex2.x = 1234; ex2.y = 4321; printf("struct member variable = %d\n",ex2.x); } [실행결과] union member variable = 4321 struct member variable = 1234

구조체의 응용 매개변수를 구조체로 취하는 함수의 형태 struct person{ char name[20]; char sex; 제 8장 구조체 매개변수를 구조체로 취하는 함수의 형태 struct person{ char name[20]; char sex; int age; }; /* 구조체 p를 매개변수로 받는 함수이다 */ /* 구조체 p의 각 멤버들의 값을 보여주는 함수 */ void display1(struct person p) { printf("%s : %c : %d \n", p.name, p.sex, p.age); }

구조체 응용 [예제 8-11] #include <stdio.h> struct person{ 제 8장 구조체 [예제 8-11] #include <stdio.h> struct person{ char name[20]; char sex; int age; }; void display(struct person p) /* person구조체형 변수 p선언 */ { printf("%s : %c : %d \n", p.name, p.sex, p.age); } 계속

구조체 응용 [예제 8-11] 계속 main() { struct person people={ "Chan Ho Park", 제 8장 구조체 [예제 8-11] 계속 main() { struct person people={ "Chan Ho Park", 'm', 26 }; printf("\n name sex age \n"); display(people); } [실행결과] name sex age Chan Ho Park : m : 26

구조체 응용 [예제 8-12] #include <stdio.h> [실행결과] 제 8장 구조체 [예제 8-12] #include <stdio.h> [실행결과] struct person{ name sex age char name[20]; Chan Ho Park : m : 26 char sex; int age; }; void display(struct person *p){ printf("%s : %c : %d \n", p->name, p->sex, p->age); } main(){ struct person people={ "Chan Ho Park", 'm', 26 }; printf("\n name sex age \n"); display(&people); }

구조체 응용 [예제 8-13] #include<stdio.h> struct marks { int math; 제 8장 구조체 [예제 8-13] #include<stdio.h> struct marks { int math; int phys; int biol; } temp = {0,0,0}; marks funct(int math, int phys,int biol); void main(void){ struct marks point ; int a,b,c,i,t; printf("Input total number of tests : "); scanf("%d",&t); for(i=0;i<t;i++) { printf("Input marks in math, %d th test : ",i+1); scanf("%d",&a); 계속

구조체 응용 제 8장 구조체 [예제 8-13] 계속 printf("Input marks in physics, %d th test : ",i+1); scanf("%d",&b); printf("Input marks in biology, %d th test : ",i+1); scanf("%d",&c); point=funct(a,b,c); /* 함수 호출 */ } printf("*****************************************\n"); printf("average marks in math : %d\n",point.math/t); printf("average marks in physics : %d\n",point.phys/t); printf("average marks in biology : %d\n",point.biol/t); marks funct(int math, int phys,int biol) { temp.math = math + temp.math; temp.phys = phys + temp.phys; temp.biol = biol + temp.biol; return temp; } 계속

구조체 응용 [예제 8-13] 계속 [실행결과] Input total number of tests : 2 제 8장 구조체 [예제 8-13] 계속 [실행결과] Input total number of tests : 2 Input marks in math, 1 th test : 60 Input marks in physics, 1 th test : 70 Input marks in biology, 1 th test : 90 Input marks in math, 2 th test : 50 Input marks in physics, 2 th test : 80 Input marks in biology, 2 th test : 100 ***************************************** average marks in math : 55 average marks in physics : 75 average marks in biology : 95

구조체의 응용 자기참조 구조체 종류 자기참조 구조체란 여러 종류의 데이터 구조를 연계시킨 연계 구조체이다 제 8장 구조체 자기참조 구조체 자기참조 구조체란 여러 종류의 데이터 구조를 연계시킨 연계 구조체이다 종류 선형 연결 리스트( linear linked list ) 단일 연결 리스트 이중 연결 리스트 이진 트리 구조( binary tree structure )

구조체의 응용 선형 연결 리스트( linear linked list ) : 단일연결, 다중연결 head head p p p p 제 8장 구조체 선형 연결 리스트( linear linked list ) : 단일연결, 다중연결 struct linked_list{ char *p; struct linked_list *next; }; head p p p p struct linked_list{ char ch; struct linked_list *forward; struct linked_list *backward; }; head

구조체의 응용 이진 트리 구조( binary tree structure ) struct binary{ char *p; 제 8장 구조체 이진 트리 구조( binary tree structure ) struct binary{ char *p; struct binary *left; struct binary *right; }; p left child right child p p p p p p

구조체 예제 예제 구조체 리스트의 추가 struct node{ char *name; char sex; int age; 제 8장 구조체 예제 구조체 struct node{ char *name; char sex; int age; struct node *next; }; struct node *head; 리스트의 추가 struct node *p; for(p=head; p->next !=NULL; ){ p=p->next; p->next=&d; d.next = NULL; }

구조체 예제 리스트에 삽입 p->next = q->next; q->next = p; ( 삽입 전 ) q 제 8장 구조체 리스트에 삽입 p->next = q->next; q->next = p; ( 삽입 전 ) q q->next · ( 삽입 후 ) q q->next->next · p ·

· p p->next->next 제거전 제거후 p p->next · 구조체 예제 리스트 제거 제 8장 구조체 리스트 제거 p->next = p->next->next; · p p->next->next 제거전 제거후 p p->next ·

비트필드 int형 데이터를 비트단위로 조작하는 구조체 비트필드 구조체의 선언문 형식 예제 struct 구조체-택{ 제 8장 구조체 int형 데이터를 비트단위로 조작하는 구조체 비트필드 구조체의 선언문 형식 struct 구조체-택{ 형지정자 필드명: 비트수; . . . . . }; 예제 struct int_num{ unsigned field1: 2; unsigned fiedl2: 4; unsigned field3: 8; }num;

비트필드 특 징 형지정자 → int 와 unsigned 둘 중에 하나만 사용 비트필드 전체는 0∼16사이의 숫자이다 제 8장 구조체 특 징 형지정자 → int 와 unsigned 둘 중에 하나만 사용 비트필드 전체는 0∼16사이의 숫자이다 "필드명"은 생략가능 필드는 하위비트에서 상위비트로 배치 비트필드도 구조체와 같이 참조연산자 .(dot)사용 첫번째 비트필드만 초기화 가능 구조체나 공용체의 구성원으로만 선언 가능

한글코드의 비트필드 할당 han.code 한글코드 MSB LSB 15 14 13 12 11 10 9 8 7 6 5 4 3 2 제 8장 구조체 han.code 한글코드 MSB LSB 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 han.final 한글종성(5비트) han.medial 한글중성(5비트) han.initial 한글초성(5비트) han.flag 한글/영문 on : 한글, off : 영문