ch08 - 구조체 (structure)...
Transcript of ch08 - 구조체 (structure)...
![Page 1: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/1.jpg)
8. 구조체 (Structure)
2015-1 프로그래밍언어
2015년 4월 11일
교수 김 영 탁
영남대학교 공과대학 정보통신공학과(Tel : +82-53-810-2497; Fax : +82-53-810-4742http://antl.yu.ac.kr/; E-mail : [email protected])
![Page 2: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/2.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 2
Outline
구조체란 무엇인가 ?구조체의 선언, 초기화, 사용구조체의 활용구조체의 배열구조체와 포인터구조체와 함수공용체열거형 typedef Bit-field 구조체
![Page 3: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/3.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 3
자료형의 분류
자료형
기본자료형: char, int, float, double 등
파생자료형: 배열 (array), 열거형 (enum), 구조체 (struct), 공용체 (union)
![Page 4: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/4.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 4
구조체의 필요성학생에 대한 데이터를 하나로 모으려면?
학번: 20100001(정수)이름: “최자영”(문자열)학점: 4.3(실수)…
int number;
char name[10];
double grade;
와 같이 개별 변수로
나타낼 수 있지만
묶을 수가 있나?
![Page 5: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/5.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 5
구조체의 필요성
구조체를 사용하면 변수들을하나로 묶을 수
있습니다.
int number;
char name[10];
double grade;
![Page 6: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/6.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 6
구조체와 배열
구조체 vs 배열
같은 자료 유형의 집합 다른 자료 유형의 집합
struct student {
int st_id;char name[50];double avg_score;. . . .
}
int data[50];
![Page 7: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/7.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 7
구조체 선언
구조체 선언 형식
struct 태그 {자료형 멤버1;자료형 멤버2;...
};
![Page 8: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/8.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 8
구조체 선언
구조체 선언은 변수 선언은 아님
구조체를 정의하는 것은 와플이나 붕어빵을 만드는 틀을 정의하는 것과 같다.
와플이나 붕어빵을 실제로 만만들릭 위해서는 구조체 변수를 선언하여야 한다.
구조체 구조체변수
![Page 9: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/9.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 9
구조체 선언의 예
// x값과 y값으로 이루어지는 화면의 좌표struct point {
int x; // x 좌표int y; // y 좌표
};
// 복소수struct complex {
double real; // 실수부double imag; // 허수부
};
// 날짜struct date {
int month;int day;int year;
};
// 사각형struct rect {
int x;int y;int width;int grade;
};
// 직원struct employee {
char name[20]; // 이름int age; // 나이int gender; // 성별int salary; // 월급
};
![Page 10: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/10.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 10
구조체 변수 선언
구조체 정의와 구조체 변수 선언은 다르다.
![Page 11: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/11.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 11
구조체의 초기화
중괄호를 이용하여 초기값을 나열한다.
struct student {int number;char name[10];double grade;
};struct student s1 = { 24, "Kim", 4.3 };
![Page 12: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/12.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 12
구조체 멤버 참조
구조체 멤버를 참조하려면 다음과 같이 ‘.’ 연산자를사용한다.
s1.number = 26; // 정수 멤버
strcpy(s1.name, "Kim"); // 문자열 멤버
s1.grade = 4.3; // 실수 멤버
.기호는구조체에서
멤버를 참조할때 사용하는
연산자입니다. .
![Page 13: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/13.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 13
예제 #1…struct student {
int number;char name[10];double grade;
};
int main(void){
struct student s;
s.number = 20070001;strcpy(s.name,"홍길동");s.grade = 4.3;
printf("학번: %d\n", s.number);printf("이름: %s\n", s.name);printf(“학점: %f\n", s.grade);return 0;
}학번: 20070001이름: 홍길동학점: 4.300000
구조체 선언
구조체 변수 선언
구조체 멤버 참조
![Page 14: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/14.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 14
예제 #2struct student {
int number;char name[10];double grade;
};
int main(void){
struct student s;
printf("학번을 입력하시오: ");scanf("%d", &s.number);
printf("이름을 입력하시오: ");scanf("%s", s.name);
printf("학점을 입력하시오(실수): ");scanf("%lf", &s.grade);
printf("학번: %d\n", s.number);printf("이름: %s\n", s.name);printf("학점: %f\n", s.grade);return 0;
}
학번을 입력하시오: 20070001이름을 입력하시오: 홍길동학점을 입력하시오(실수): 4.3학번: 20070001이름: 홍길동학점: 4.300000
구조체 선언
구조체 변수 선언
구조체 멤버의 주소 전달
![Page 15: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/15.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 15
예제 #3#include <math.h>struct point {
int x;int 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);
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입니다.
p1 (x,y)
p2 (x,y)
![Page 16: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/16.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 16
구조체를 멤버로 가지는 구조체
struct date { // 구조체 선언
int year;int month;int day;
};
struct student { // 구조체 선언
int number;char name[10];struct date dob; // date of birth, 구조체 안에 구조체 포함
double grade;};struct student s1; // 구조체 변수 선언
s1.dob.year = 1983; // 멤버 참조
s1.dob.month = 03;s1.dob.day = 29;
![Page 17: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/17.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 17
예제
#include <stdio.h>
struct point {int x;int y;
};
struct rect {struct point p1;struct point p2;
};
int main(void){
struct rect r;int w, h, area, peri;
p1(x,y)
p2(x,y)
![Page 18: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/18.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 18
예제
printf("왼쪽 상단의 좌표를 입력하시오: ");scanf("%d %d", &r.p1.x, &r.p1.y);
printf("오른쪽 상단의 좌표를 입력하시오: ");scanf("%d %d", &r.p2.x, &r.p2.y);
w = r.p2.x - r.p1.x;h = r.p2.x - r.p1.x;
area = w * h;peri = 2 * w + 2 * h;printf("면적은 %d이고 둘레는 %d입니다.\n", area, peri);
return 0;}
p1(x,y)
p2(x,y)
왼쪽 상단의 좌표를 입력하시오: 1 1오른쪽 상단의 좌표를 입력하시오: 6 6면적은 25이고 둘레는 20입니다.
![Page 19: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/19.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 19
구조체 변수의 대입과 비교
같은 구조체 변수까리 대입은 가능하지만 비교는불가능하다.
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이같습니다.")
}
![Page 20: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/20.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 20
구조체 배열 (Array of Struct)구조체를 여러 개 모은 것
![Page 21: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/21.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 21
구조체 배열 (Array of Struct)
구조체 배열의 선언
struct student {int number;char name[20];double grade;
};
int main(void){
struct student list[100]; // 구조체의 배열 선언
list[2].number = 27;strcpy(list[2].name, "홍길동");list[2].grade = 178.0;
}
![Page 22: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/22.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 22
구조체 배열의 초기화
구조체 배열의 초기화
struct student list[3] = {{ 1, "Park", 172.8 },{ 2, "Kim", 179.2 },{ 3, "Lee", 180.3 }
};
![Page 23: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/23.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 23
구조체 배열 예제
#define SIZE 3
struct student {int number;char name[20];double grade;
}; 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].grade);
}
for(i = 0; i< SIZE; i++)printf("학번: %d, 이름: %s, 학점: %f\n", list[i].number, list[i].name, list[i].grade);
return 0;}
학번을 입력하시오: 20070001이름을 입력하시오: 홍길동학점을 입력하시오(실수): 4.3학번을 입력하시오: 20070002이름을 입력하시오: 김유신학점을 입력하시오(실수): 3.92학번을 입력하시오: 20070003이름을 입력하시오: 이성계학점을 입력하시오(실수): 2.87학번: 20070001, 이름: 홍길동, 학점: 4.300000학번: 20070002, 이름: 김유신, 학점: 3.920000학번: 20070003, 이름: 이성계, 학점: 2.870000
![Page 24: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/24.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 24
구조체 배열의 응용 예 (1)
Can initialize at declarationExample:
struct Planet {char name[10];double relativeMass;double distance;
};
struct Planet earth = {“Earth”, 1.0, 150};
Declaration provides initial data to all three member variables
![Page 25: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/25.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 25
Array of Structure
Struct data elements can be organized in array
Example)struct Planet solarSystem[SOLAR_PLANETS] = { {"Mercury", 0.0558, 57.9},
{"Venus", 0.815, 108},{"Earth",1.0, 150},{"Mars", 0.107, 228},{"Jupiter", 318, 778},{"Saturn", 95.1, 1430},{"Uranus", 14.5, 2870},{"Neptune", 17.2, 4500},{"Pluto", 0.11, 5900}
};
![Page 26: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/26.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 26
Handling attributes of each element of struct arrayvoid printPlanets(struct Planet solarPlanets[], int num_planet)1. {2. for (int i = 0; i<num_planet; i++)3. {4. printf("%2d", i);5. printf(" Name: ");6. printf("%-8s", solarPlanets[i].name);7. printf(" Rel Mass: ");8. printf("%7.3f", solarPlanets[i].relativeMass);9. printf(" Dist from Sun: ");10. printf("%6.1f₩n", solarPlanets[i].distance);11. } // end for12.}
![Page 27: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/27.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 27
Sorting Array of Structure
Sorting elements in array of structure (1)void sortPlanetsByRelMass(struct Planet solarPlanets[], int num_planet)1. {2. struct Planet temp;3. int i, j, m;4. double min_RelMass;5. for (i=0; i<num_planet-1; i++) {6. m = i;7. min_RelMass = solarPlanets[i].relativeMass;8. for (j=i+1; j<num_planet; j++) {9. if (min_RelMass > solarPlanets[j].relativeMass) {10. m = j;11. min_RelMass = solarPlanets[j].relativeMass;12. }13. } // end inner for14. if (m != i) { // if new minimum found, swap15. temp = solarPlanets[i];16. solarPlanets[i] = solarPlanets[m];17. solarPlanets[m] = temp;18. }19. } // end outer for20. }
![Page 28: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/28.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 28
Sorting elements in array of structure (2)void sortPlanetsByName(struct Planet solarPlanets[], int num_planet) {1. struct Planet temp;2. int i, j, m;3. char min_Name[10] = {0};4. for (i=0; i<num_planet-1; i++) {5. m = i;6. strcpy(min_Name, solarPlanets[i].name);7. for (j=i+1; j<num_planet; j++) {8. if (strcmp(min_Name, solarPlanets[j].name) > 0) {9. m = j;10. strcpy(min_Name, solarPlanets[j].name);11. }12. } // end inner for13. if (m != i) { // if new minimum found, swap14. temp = solarPlanets[i];15. solarPlanets[i] = solarPlanets[m];16. solarPlanets[m] = temp;17. }18. } // end outer for19.}
![Page 29: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/29.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 29
1. int main() {2. struct Planet solarSystem[SOLAR_PLANETS] = 3. {{"Mercury", 0.0558, 57.9}, {"Venus", 0.815, 108}, {"Earth",1.0, 150},4. {"Mars", 0.107, 228}, {"Jupiter", 318, 778}, {"Saturn", 95.1, 1430},5. {"Uranus", 14.5, 2870}, {"Neptune", 17.2, 4500}, {"Pluto", 0.11, 5900} };
6. printf("₩n Initial state₩n");7. printPlanets(solarSystem, SOLAR_PLANETS);
8. sortPlanetsByRelMass(solarSystem, SOLAR_PLANETS);9. printf("₩n After sorting by relative mass:₩n");10. printPlanets(solarSystem, SOLAR_PLANETS);
11. sortPlanetsByDist(solarSystem, SOLAR_PLANETS);12. printf("₩n After sorting by distance from sun:₩n");13. printPlanets(solarSystem, SOLAR_PLANETS);
14. sortPlanetsByName(solarSystem, SOLAR_PLANETS);15. printf("₩n After sorting by name using strcmp and strcpy:₩n");16. printPlanets(solarSystem, SOLAR_PLANETS);17. printf("₩n₩n");18. return 0;19. }
![Page 30: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/30.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 30
result of execution
![Page 31: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/31.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 31
구조체와 포인터
• 구조체를 가리키는포인터
• 포인터를 멤버로가지는 구조체
순서로 살펴봅시다.
![Page 32: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/32.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 32
구조체를 가리키는 포인터
구조체를 가리키는 포인터
struct student *p;
struct student s = { 20070001, "홍길동", 4.3 };
p = &s;
printf("학번=%d 이름=%s 학점=%f \n", s.number, s.name, s.grade);printf("학번=%d 이름=%s 학점=%f \n", (*p).number,(*p).name,(*p).grade);
![Page 33: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/33.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 33
-> 연산자
-> 연산자는 구조체 포인터로 구조체 멤버를 참조할 때사용
struct student *p;
struct student s = { 20070001, "홍길동", 180.2 };
p = &s;
printf("학번=%d 이름=%s 키=%f \n", s.number, s.name, s.grade); printf("학번=%d 이름=%s 키=%f \n", (*p).number,(*p).name,(*p).grade);
printf("학번=%d 이름=%s 키=%f \n", p->number, p->name, p->grade);
![Page 34: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/34.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 34
-> 연산자
arrow operator
p가 가리키는 구조체 변수
p가 가리키는 구조체 변수의 멤버 number
(*p).number
p가 가리키는 구조체 변수의 멤버 number
p->number==
![Page 35: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/35.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 35
예제// 포인터를 통한 구조체 참조#include <stdio.h>
struct student {int number;char name[20];double grade;
};
int main(void){
struct student s = { 20070001, "홍길동", 4.3};struct student *p;
p = &s;
printf("학번=%d 이름=%s 키=%f \n", s.number, s.name, s.grade);printf("학번=%d 이름=%s 키=%f \n", (*p).number,(*p).name,(*p).grade);printf("학번=%d 이름=%s 키=%f \n", p->number, p->name, p->grade);
return 0;}
학번=20070001 이름=홍길동 학점=4.300000학번=20070001 이름=홍길동 학점=4.300000학번=20070001 이름=홍길동 학점=4.300000
![Page 36: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/36.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 36
포인터를 멤버로 가지는 구조체
struct date {int month;int day;int year;
};
struct student {int number;char name[20];double grade;struct date *dob;
};
![Page 37: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/37.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 37
포인터를 멤버로 가지는 구조체
int main(void){
struct date d = { 3, 20, 1980 };struct student s = { 20070001, "Kim", 4.3 };
s.dob = &d;
printf("학번: %d\n", s.number);printf("이름: %s\n", s.name);printf("학점: %f\n", s.grade);printf("생년월일: %d년 %d월 %d일\n", s.dob->year, s.dob->month, s.dob->day);return 0;
}
학번: 20070001이름: Kim
학점: 4.300000생년월일: 1980년 3월 20일
![Page 38: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/38.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 38
자기참조 구조체 (Self-referential Structure)
Self-referential structure(자기참조 구조체) a special structure that includes a pointer which points the same
type structure
// definition of data fieldtypedef struct data {
int id;char name[20];char phone[12];
} DATA;
// definition of nodetypedef struct NODE {
DATA data; // data fieldstruct NODE *link; // pointer to next node
} NODE;
![Page 39: ch08 - 구조체 (structure) -150415am0845contents.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming](https://reader030.fdocuments.net/reader030/viewer/2022040517/5e764e08e253d6611e688806/html5/thumbnails/39.jpg)
Advanced Networking Tech. Lab.Yeungnam University (yuANTL)
Programming LanguageProf. Young-Tak Kim8 - 39
자기참조 구조체의 예 –Binary Search Tree Node
A node in a binary tree is like a node in a linked list, except it has two node pointer fields:typedef struct TreeNode{
struct NodeData *pNodeData; // data fieldTreeNode *left; // link fieldTreeNode *right; // link field
} TreeNode;A constructor can aid in the creation of nodes