Presentation is loading. Please wait.

Presentation is loading. Please wait.

C 프로그래밍.

Similar presentations


Presentation on theme: "C 프로그래밍."— Presentation transcript:

1 C 프로그래밍

2 -Part1- 제1장 구조체와 공용체란 무엇인가

3 1.1 구조체란

4 1.1 구조체란 배울 내용 ① 구조체 정의 ② 구조체 변수 ③ 구조체 변수로 멤버 변수에 접근하기 ④ 구조체 변수의 초기화
⑤ 구조체 변수의 복사

5 1.1 구조체란 (1/18) 구조체 하나 이상의 변수를 묶어 그룹화하는 사용자 정의 자료형

6 1.1 구조체란 (2/18) 구조체의 정의 struct point { int x; int y; };
① 구조체의 시작을 알리는 키워드 ② 구조체 이름 struct point { int x; int y; }; ③ 멤버 변수 ③ 멤버 변수 ① 구조체 키워드: 구조체의 시작을 알리는 struct 키워드 지정 ② 구조체 이름: 구조체를 구분하는 이름 ③ 멤버변수: 구조체를 구성하는 구조체 멤버 변수의 이름

7 1.1 구조체란 배울 내용 ① 구조체 정의 ② 구조체 변수 ③ 구조체 변수로 멤버 변수에 접근하기 ④ 구조체 변수의 초기화
⑤ 구조체 변수의 복사

8 1.1 구조체란 (3/18) 구조체 정의, 구조체 변수 선언 – 동시에 #include <stdio.h>
struct point { int x; int y; } p1, p2, p3; int main(void) return 0;

9 1.1 구조체란 (4/18) 구조체 정의, 구조체 변수 선언 – 따로 #include <stdio.h>
struct point { int x; int y; }; int main(void) struct point p1, p2, p3; return 0;

10 == == 1.1 구조체란 (5/18) 일반 변수 vs. 구조체 변수 int b; c; a; 일반 변수의 선언 int
자료형 변수 int b; c; a; 자료형 변수 일반 변수의 선언 == int a, b, c ; 자료형 변수 struct point p1; 자료형 변수 == 구조체 변수의 선언 struct point p2; struct point p1, p2, p3; struct point p3;

11 구조체 선언 구조체 선언 형식 struct 태그 { 자료형 멤버1; 자료형 멤버2; ... };

12 구조체 변수 선언 구조체 정의와 구조체 변수 선언은 다르다.

13 1.1 구조체란 배울 내용 ① 구조체 정의 ② 구조체 변수 ③ 구조체 변수로 멤버 변수에 접근하기 ④ 구조체 변수의 초기화
⑤ 구조체 변수의 복사

14 1.1 구조체란 (6/18)---[1-1.c 실습] #include <stdio.h>
struct group // 구조체 정의 { int a; double b; }; int main(void) struct group g1; // 구조체 변수 g1 선언 g1.a=10; // 구조체 변수로 멤버 변수 접근 g1.b=1.1234; // 구조체 변수로 멤버 변수 접근 printf("g1.a의 값: %d \n", g1.a); printf("g1.b의 값: %lf \n", g1.b); return 0; }

15 1.1 구조체란 (7/18)---[1-1.c 분석] 구조체 변수 g1의 메모리 구조

16 1.1 구조체란 (8/18)---[1-2.c 실습] #include <stdio.h>
struct group // 구조체 정의 { int a; double b; }; int main(void) struct group g1; // 구조체 변수 g1 선언 scanf("%d %lf", &g1.a, &g1.b); // 데이터 입력 printf("g1.a의 값: %d \n", g1.a); printf("g1.b의 값: %lf \n", g1.b); return 0; }

17 1.1 구조체란 (9/18) 구조체 변수를 사용하는 법 구조체 변수: 멤버 변수에 접근하게 해주는 구조체 변수의 이름을 지정
접근 연산자: 구조체 변수로 멤버 변수에 접근하는 연산자 지정 멤버 변수: 접근하려는 멤버 변수의 이름을 지정

18 1.1 구조체란 배울 내용 ① 구조체 정의 ② 구조체 변수 ③ 구조체 변수로 멤버 변수에 접근하기 ④ 구조체 변수의 초기화
⑤ 구조체 변수의 복사

19 1.1 구조체란 (10/18)---[1-3.c 실습] #include <stdio.h> struct point {
int x; int y; }; int main(void) struct point p1={10, 20}; // 구조체 변수의 초기화 printf("%d %d \n", p1.x, p1.y); return 0; }

20 1.1 구조체란 (11/18)---[1-3.c 분석] 구조체 변수 p1의 메모리 구조

21 1.1 구조체란 (12/18)---[1-4.c 실습] #include <stdio.h> struct point {
int x; int y; }; int main(void) struct point p1={10, 20}; struct point p2={30, 40}; struct point p3={0, 0}; p3.x = p2.x - p1.x; p3.y = p2.y - p1.y; printf("%d %d \n", p3.x , p3.y); return 0; } Y축 10 20 30 40 p1(10,20) p2(30,40) X축 Y축 X축

22 1.1 구조체란 (13/18)---[1-4.c 분석] 구조체 변수 p1, p2, p3의 메모리 구조 p3 30 p2 40 10
p1.x &p1 20 p1.y p1 30 p2.x &p2 40 p2.y p2 p3.x &p3 p3.y p3

23 1.1 구조체란 (14/18) 구조체 변수의 초기화 중괄호를 이용한 ‘구조체 변수’의 초기화 시 주의사항
구조체 변수의 선언과 구조체 변수의 초기화를 따로 하면 에러가 발생 struct point p1; p1={10, 20}; // 에러 struct point p1 = {10, 20}; // 정상 struct point p1; p1.x=10; // 정상 p1.y=20; // 정상

24 1.1 구조체란 배울 내용 ① 구조체 정의 ② 구조체 변수 ③ 구조체 변수로 멤버 변수에 접근하기 ④ 구조체 변수의 초기화
⑤ 구조체 변수의 복사

25 1.1 구조체란 (15/18) 구조체 변수의 복사 일반 변수의 복사와 같이 구조체 변수 간 복사 가능 int a=3;
int b=0; b=a; // 변수의 복사 printf("%d %d \n", a, b); struct point p1={10, 20}; struct point p2={0, 0}; p2=p // 구조체 변수의 복사

26 1.1 구조체란 (16/18)---[1-5.c 실습] #include <stdio.h> struct point {
int x; int y; }; int main(void) struct point p1={10, 20}; struct point p2={0, 0}; p2=p1; // 구조체 변수 p2에 p1을 복사 printf("%d %d \n", p1.x, p1.y); printf("%d %d \n", p2.x, p2.y); return 0; }

27 1.1 구조체란 (17/18)---[1-5.c 분석] 구조체 변수 간의 복사 10 p2 p1 20 복사 p2.x p1.x
p1.y p1 p2.x p2.y p2 복사

28 1.1 구조체란 (18/18)---[1-6.c 실습] 구조체 변수 간 산술연산 불가능
#include <stdio.h> struct point { int x; int y; }; int main(void) struct point p1={10, 20}; struct point p2={0, 0}; p2+p1; // 에러 p2-p1; // 에러 return 0; 구조체 변수 간 산술연산 불가능

29 [1-6-1.c 실습] #include<stdio.h> 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) ) // 올바른 비교 }

30 EX. 다음과 같이 출력되도록 프로그램을 완성하시오.
1) 학번,이름,학점은 scanf 함수 사용 2) 이름은 배열로 처리 함 struct student { int number; char name[10]; double grade; };

31 #include <stdio.h>
struct 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("학점: %.1lf\n", s.grade); return 0; }

32 1.2 중첩 구조체

33 1.2 중첩 구조체 배울 내용 ① 중첩 구조체 ② 중첩 구조체의 초기화 ③ typedef를 이용한 구조체의 재정의

34 1.2 중첩 구조체 (1/9) 중첩 구조체 구조체 내에 구조체가 포함 ‘구조체 변수를 멤버변수로 사용한다.’

35 1.2 중첩 구조체 (2/9)---[1-7.c 실습] int main(void) #include <stdio.h>
{ struct student stu; stu.no= ; stu.s.math=90; stu.s.english=80; stu.s.total=stu.s.math+stu.s.english; printf("학번: %d \n", stu.no); printf("총점: %lf \n", stu.s.total); return 0; } #include <stdio.h> struct score { double math; double english; double total; }; struct student int no; struct score s ;

36 1.2 중첩 구조체 (3/9)---[1-7.c 분석] struct student stu

37 #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; printf("왼쪽 상단의 좌표를 입력하시오: "); scanf("%d %d", &r.p1.x, &r.p1.y); printf("오른쪽 상단의 좌표를 입력하시오: "); scanf("%d %d", &r.p2.x, &r.p2.y);

38 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; }

39 1.2 중첩 구조체 배울 내용 ① 중첩 구조체 ② 중첩 구조체의 초기화 ③ typedef를 이용한 구조체의 재정의

40 1.2 중첩 구조체 (4/9)---[1-8.c 실습] 중첩 구조체의 초기화 방법 2가지
#include <stdio.h> struct score { double math; double english; double total; }; struct student int no; struct score s; 중첩 구조체의 초기화 방법 2가지 int main(void) { struct student stu={ , {90, 80, 0}}; // struct student stu={ , 90, 80, 0}; stu.s.total=stu.s.math+stu.s.english; printf("학번: %d \n", stu.no); printf("총점: %lf \n", stu.s.total); return 0; }

41 1.2 중첩 구조체 (5/9)---[1-8.c 분석] (1) 중첩 중괄호를 사용한 초기화

42 1.2 중첩 구조체 (6/9)---[1-8.c 분석] (2) 중첩 중괄호를 생략한 초기화

43 1.2 중첩 구조체 배울 내용 ① 중첩 구조체 ② 중첩 구조체의 초기화 ③ typedef를 이용한 구조체의 재정의

44 1.2 중첩 구조체 (7/9) typedef의 사용 방법

45 1.2 중첩 구조체 (8/9)---[1-9.c 실습(1/2)]
#include <stdio.h> typedef struct score { double math; double english; double average; } SCORE; struct student int no; SCORE s; // struct socre s; }; typedef struct student STUDENT ; int main(void) { STUDENT stu={ , {90, 80, 0}}; stu.s. average=(stu.s.math+stu.s.english)/2; printf("학번: %d \n", stu.no); printf("평균점수: %lf \n", stu.s.average); return 0; }

46 1.2 중첩 구조체 (9/9)

47 #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; } // translate 함수를 완성하시오.

48 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; }

49 1.3 구조체와 배열

50 구조체 배열 struct student { int number; char name[20]; double grade; };

51 1.3 구조체와 배열 배울 내용 ① 멤버 변수로 배열 사용하기 ② 구조체 변수로 배열 사용하기
③ 멤버 변수로 배열을 사용할 때 주의 사항

52 1.3 구조체와 배열 (1/7)---[1-10.c 실습(1/2)]
#include <stdio.h> struct student { char no[10]; // 학번 (멤버변수에 배열 사용) char name[20]; // 이름 (멤버변수에 배열 사용) double math; // 수학 점수 double english; // 영어 점수 double total; // 총점 }; int main(void) struct student stu1={" ", "Park", 80, 80, 0}; // 학생 1의 정보 struct student stu2={" ", "Kim", 95, 85, 0}; // 학생 2의 정보 struct student stu3={" ", "Lee", 100, 90, 0}; // 학생 3의 정보

53 1.3 구조체와 배열 (2/7)---[1-10.c 실습(2/2)]
stu1.total=stu1.math+stu1.english; printf("학번: %s, 이름: %s \n", stu1.no, stu1.name); printf("총점: %lf \n", stu1.total); printf("\n"); stu2.total=stu2.math+stu2.english; printf("학번: %s, 이름: %s \n", stu2.no, stu2.name); printf("총점: %lf \n", stu2.total); stu3.total=stu3.math+stu3.english; printf("학번: %s, 이름: %s \n", stu3.no, stu3.name); printf("총점: %lf \n", stu3.total); return 0; }

54 1.3 구조체와 배열 배울 내용 ① 멤버 변수로 배열 사용하기 ② 구조체 변수로 배열 사용하기
③ 멤버 변수로 배열을 사용할 때 주의 사항

55 1.3 구조체와 배열 (3/7)---[1-11.c 실습(1/2)]
구조체 변수로 배열 사용 int main(void) { int i=0; struct student stu[3]={ {" ", "Park", 80, 80, 0}, {" ", "Kim", 95, 85, 0}, {" ", "Lee", 100, 90, 0} }; for(i=0; i<3; i++) stu[i].total=stu[i].math+stu[i].english; printf("학번: %s, 이름: %s \n", stu[i].no, stu[i].name); printf("총점: %lf \n", stu[i].total); printf("\n"); } return 0; #include <stdio.h> struct student { char no[10]; char name[20]; double math; double english; double total; };

56 1.3 구조체와 배열 (4/7)---[1-11.c 분석]

57

58 [array_0f_struct.c 실습] #include <stdio.h> #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); } [array_0f_struct.c 실습]

59 for(i = 0; i< SIZE; i++)
{ printf("학번: %d, 이름: %s, 학점: %lf\n", list[i].number, list[i].name, list[i].grade); } return 0;

60 1.3 구조체와 배열 배울 내용 ① 멤버 변수로 배열 사용하기 ② 구조체 변수로 배열 사용하기
③ 멤버 변수로 배열을 사용할 때 주의 사항

61 1.3 구조체와 배열 (5/7)---[1-13.c 실습] <<에러>> 배열의 시작 주소에 문자열을 입력
#include <stdio.h> struct student { char no[10]; // 멤버 변수로 배열 선언 char name[20]; // 멤버 변수로 배열 선언 }; int main(void) struct student stu; stu.no=" "; // 에러 stu.name="Park"; // 에러 printf("학번: %s, 이름: %s \n", stu.no, stu.name); return 0; } <<에러>> 배열의 시작 주소에 문자열을 입력

62 <<에러 해결 1>>
1.3 구조체와 배열 (6/7)---[1-14.c 실습] #include <stdio.h> #include <string.h> struct student { char no[10]; // 멤버 변수로 배열 선언 char name[20]; // 멤버 변수로 배열 선언 }; int main(void) struct student stu; strcpy (stu.no, " "); strcpy (stu.name, "Park"); printf("학번: %s, 이름: %s \n", stu.no, stu.name); return 0; } <<에러 해결 1>> strcpy()함수 사용(PART3-2장 참조)

63 <<에러 해결 2>>
1.3 구조체와 배열 (7/7)---[참고] #include <stdio.h> struct student { char* no; // 멤버 변수로 포인터 선언 char* name; // 멤버 변수로 포인터 선언 }; int main(void) struct student stu; stu.no = " ”; stu.name = "Park“; printf("학번: %s, 이름: %s \n", stu.no, stu.name); return 0; } <<에러 해결 2>> 멤버 변수로 포인터 선언(다음 슬라이드참조)

64 Ex1.각각의 음식에 대하여 음식의 이름, 칼로리 정보를 구조체로 표현한다
각각의 식사 코스에서 등장하는 음식들을 구조체의 배열로 표현하고 각 식사 코스의 전체 칼로리를 계산하는 프로그램을 작성하시오. #include <stdio.h> struct food { char name[100]; int calories; }; int calc_total_calroies(struct food array[], int size); int main(void) { struct food food_array[3]= {{"hambuger", 900}, {"bulgogi", 500}, {"sushi", 700}};

65 printf("%d\n", total); return 0; } int calc_total_calroies(struct food array[], int size) { int i, total=0;

66 int total = calc_total_calroies(food_array, 3);
printf("%d\n", total); return 0; } int calc_total_calroies(struct food array[], int size) { int i, total=0; for(i=0;i<size;i++){ total += array[i].calories; return total;

67 1.4 구조체와 포인터

68 1.4 구조체와 포인터 ① 멤버 변수로 포인터 사용하기 ② 구조체 변수로 포인터 사용하기
③ 자기 참조 구조체와 외부 참조 구조체

69 1.4 구조체와 포인터 (1/15) 멤버 변수로 포인터 사용하기 struct point {
int* x; // 멤버 변수로 1차원 포인터 선언 int* y; // 멤버 변수로 1차원 포인터 선언 }; struct point { int* x; // 멤버 변수로 1차원 포인터 선언 int** y; // 멤버 변수로 2차원 포인터 선언 }

70 1.4 구조체와 포인터 (3/15)---[1-15.c 실습] . 연산자가 *연산자보다 우선순위가 높다
#include <stdio.h> struct point { int* x; // 1차원 포인터 멤버변수 int* y; // 1차원 포인터 멤버변수 }; int main(void) int num1=4; int num2=5; struct point p1; p1.x=&num1; p1.y=&num2; printf("%d %d \n", num1, num2); printf("%d %d \n", *p1.x, *p1.y); return 0; } . 연산자가 *연산자보다 우선순위가 높다

71 1.4 구조체와 포인터 (4/15)---[1-16.c 실습] #include<stdio.h> struct point
{ int* x; // 1차원 포인터 멤버변수 int** y; // 2차원 포인터 멤버변수 }; int main(void) int num1 = 3; struct point p1; p1.x = &num1; p1.y = &p1.x; printf("%d %d %d \n", num1, *p1.x, **p1.y); return 0; }

72 1.4 구조체와 포인터 (5/15)---[1-17.c 실습] #include<stdio.h> struct point
{ int x; int y; }; int main(void) struct point p1={20,30}; printf("구조체 변수 p1의 주소: %x \n", &p1); printf("멤버 변수 p1.x의 주소: %x \n", &p1.x); return 0; }

73 포인터를 멤버로 가지는 구조체 struct date { int month; int day; int year; };
struct student { int number; char name[20]; double grade; struct date *dob;

74 포인터를 멤버로 가지는 구조체 int main(void) { struct date d = { 3, 20, 1980 };
struct student s = { , "Kim", 4.3 }; s.dob = &d; printf("학번: %d\n", s.number); printf("이름: %s\n", s.name); printf("학점: %lf\n", s.grade); printf("생년월일: %d년 %d월 %d일\n", s.dob->year, s.dob->month, s.dob->day); return 0; } 학번: 이름: Kim 학점: 생년월일: 1980년 3월 20일

75 [st-pointer.c 실습] #include <stdio.h> struct date { int month;
int day; int year; }; struct student { int number; char name[20]; double grade; struct date *dob; int main(void) { struct date d = { 3, 20, 1980 }; struct student s = { , "Kim", 4.3 }; s.dob = &d; [st-pointer.c 실습]

76 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; }

77 1.4 구조체와 포인터 배울 내용 ① 멤버 변수로 포인터 사용하기 ② 구조체 변수로 포인터 사용하기
③ 자기 참조 구조체와 외부 참조 구조체

78 구조체를 가리키는 포인터 구조체를 가리키는 포인터
struct student s = { , "홍길동", 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);

79 -> 연산자 -> 연산자는 구조체 포인터로 구조체 멤버를 참조할 때 사용
struct student s = { , "홍길동", }; 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);

80 -> 연산자 ==

81 [pointer_to_st.c 실습] // 포인터를 통한 구조체 참조 #include <stdio.h>
struct student { int number; char name[20]; double grade; }; int main(void) { struct student s = { , "홍길동", 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; } [pointer_to_st.c 실습]

82 1.4 구조체와 포인터 (6/15)---[1-18.c 실습] #include<stdio.h>
struct student { char no[10]; // 학번 char name[20]; // 이름 double total; // 총점 }; int main(void) struct student stu = {" ", "Park", 160}; struct student* p=NULL; // 1차원 구조체 포인터 변수 선언 p = &stu; printf("%s %s %lf \n",stu.no, stu.name, stu.total); printf("%s %s %lf \n",(*p).no, (*p).name, (*p).total); printf("%s %s %lf \n",p->no, p->name, p->total); return 0; }

83 1.4 구조체와 포인터 (7/15)---[1-19.c 실습(1/2)]
#include<stdio.h> struct student { char no[10]; // 학번 char name[20]; // 이름 double total; // 총점 }; int main(void) struct student stu = {" ", "Park", 160}; struct student* p=NULL; struct student** pp=NULL;

84 1.4 구조체와 포인터 (8/15)---[1-19.c 실습(2/2)]
p = &stu; pp = &p; printf("%s %s %lf \n",stu.no, stu.name, stu.total); printf("%s %s %lf \n",(*p).no, (*p).name, (*p).total); printf("%s %s %lf \n",p->no, p->name, p->total); printf("%s %s %lf \n",(**pp).no, (**pp).name, (**pp).total); printf("%s %s %lf \n",(*pp)->no, (*pp)->name, (*pp)->total);  return 0; }

85 1.4 구조체와 포인터 배울 내용 ① 멤버 변수로 포인터 사용하기 ② 구조체 변수로 포인터 사용하기
③ 자기 참조 구조체와 외부 참조 구조체

86 1.4 구조체와 포인터 (9/15) 구조체 내에서 자기 구조체 참조 구조체 내에서 외부 구조체 참조

87 1.4 구조체와 포인터 (10/15)---[1-20.c 실습(1/2)]
#include<stdio.h> struct student { char name[20]; // 이름 int money; // 나이 struct student* link; // 자기 참조 구조체 포인터 변수 }; int main(void) struct student stu1 = {"Kim", 90, NULL}; struct student stu2 = {"Lee", 80, NULL}; struct student stu3 = {"Goo", 60, NULL};

88 1.4 구조체와 포인터 (11/15)---[1-20.c 실습(2/2)]
stu1.link = &stu2; stu2.link = &stu3; printf("%s %d \n", stu1.name, stu1.money); printf("%s %d \n", stu1.link->name, stu1.link->money); printf("%s %d \n", stu1.link->link->name, stu1.link->link->money);   return 0; }

89 1.4 구조체와 포인터 (12/15)---[1-21.c 실습(1/2)]
struct student { char name[20]; int money; struct student* left_link; struct student* right_link; }; struct student stu1 = {"Kim", 90, NULL, NULL}; struct student stu2 = {"Lee", 80, NULL, NULL}; struct student stu3 = {"Goo", 60, NULL, NULL};

90 1.4 구조체와 포인터 (13/15)---[1-21.c 실습(2/2)]
stu1.left_link = &stu2; stu1.right_link= &stu3; printf("%s %d \n", stu1.name, stu1.money); printf("%s %d \n", stu1.left_link->name, stu1.left_link->money); printf("%s %d \n", stu1.right_link->name, stu1.right_link->money);

91 1.4 구조체와 포인터 (14/15)---[1-22.c 실습(1/2)]
#include<stdio.h> struct point { int x; // x좌표 int y; // y좌표 }; struct student { char name[20]; struct point* link; int main(void) { struct student stu1 = {"Kim", NULL}; struct student stu2 = {"Lee", NULL}; struct point p1 = {30, 40}; struct point p2 = {60, 80}; stu1.link = &p1; stu2.link = &p2; printf("%s %d %d \n", stu1.name, stu1.link->x, stu1.link->y); printf("%s %d %d \n", stu2.name, stu2.link->x, stu2.link->y); return 0; }

92 1.4 구조체와 포인터 (15/15)---[1-22.c 분석]

93 #include <stdio.h>
struct student { int number; char name[10]; double grade; struct student *next; }; int main(void) { struct student s1 = { 30, "Kim", 4.3, NULL }; struct student s2 = { 31, "Park", 3.7, NULL }; struct student *first = NULL; struct student *current = NULL; first = &s1; s1.next = &s2; s2.next = NULL; current = first; while( current != NULL ) // 나머지 부분을 완성 하시오.

94 { printf("학생의 번호=%d 이름=%s, 성적=%f\n", current->number, current->name, current->grade); current = current->next; }

95 1.5 구조체와 함수

96 1.4 구조체와 포인터 배울 내용 ① 구조체를 함수의 인자로 전달하기 – 값에 의한 호출과 주소에 의한 호출
① 구조체를 함수의 인자로 전달하기 – 값에 의한 호출과 주소에 의한 호출 ② 구조체를 함수의 반환형으로 전달하기 – 값 반환과 주소 반환

97 1.5 구조체와 함수 (1/10) 값에 의한 호출(Call by value) 구조체의 복사본이 함수로 전달 된다

98 1.5 구조체와 함수 (2/10)---[1-23.c 실습] #include<stdio.h>
struct point // 구조체 정의 { int x; int y; }; void function (struct point call); // 함수의 선언 int main(void) struct point p = {10, 20}; function(p); // 값에 의한 호출(call by value)   return 0; } void function (struct point call) // 함수의 정의 printf("%d %d \n", call.x, call.y); // 10, 20 출력

99 1.5 구조체와 함수 (3/10)---[1-23.c 분석] int main(void) {
struct point p = { 10, 20 }; function ( p ); } p는 call에 복사됨 void function (struct point call) { printf("%d %d \n", call.x, call.y);}

100 1.5 구조체와 함수 (4/10) 주소에 의한 호출 (call by reference)

101 1.5 구조체와 함수 (5/10)---[1-24.c 실습] #include<stdio.h> struct point
{ int x; int y; }; void function (struct point* call); // 함수의 선언 int main(void) struct point p = {10, 20}; function(&p); // 주소에 의한 호출(call by reference) return 0; } void function (struct point* call) // 함수의 정의 printf("%d %d \n", call->x, call->y); printf("%d %d \n", (*call).x, (*call).y);

102 1.5 구조체와 함수 (6/10)---[1-24.c 분석] int main(void) {
struct point p = { 10, 20 }; function ( &p ); } p의 주소가 포인터 변수 call에 저장 void function (struct point* call) { printf("%d %d \n", call->x, call->y); printf("%d %d \n", (*call).x, (*call).y); }

103 1.4 구조체와 포인터 배울 내용 ① 구조체를 함수의 인자로 전달하기 – 값에 의한 호출과 주소에 의한 호출
① 구조체를 함수의 인자로 전달하기 – 값에 의한 호출과 주소에 의한 호출 ② 구조체를 함수의 반환형으로 전달하기 – 값 반환과 주소 반환

104 1.5 구조체와 함수 (7/10) 구조체의 값(value)을 반환(return)하는 함수 함수의 반환형: 구조체 값 반환
struct point function ( ) { struct point p={10, 20}; return p; } 함수의 반환형: 구조체 값 반환 ① 반환 형태 ② 구조체 변수 이름

105 1.5 구조체와 함수 (8/10)---[1-25.c 실습] #include<stdio.h> struct point
{ int x; int y; }; struct point function(void); // 함수의 선언 int main(void) struct point p;   p = function(); // 함수 호출 printf("%d %d \n", p.x, p.y); return 0; } struct point function(void) // 함수의 정의 struct point call = {10, 20}; return call; // 구조체 변수 call 반환

106 1.5 구조체와 함수 (9/10) 구조체 주소(reference)를 반환(return)하는 함수
struct point* function ( ) { static struct point p={10, 20}; return &p; } 함수의 반환형: 구조체 주소반환 ① 반환 형태 ② 구조체 변수의 주소

107 1.5 구조체와 함수 (10/10)---[1-26.c 실습] #include<stdio.h> struct point
{ int x; int y; }; struct point* function(void); // 함수의 선언 int main(void) struct point *p;   p = function(); // 함수 호출 printf("%d %d \n", p->x, p->y); printf("%d %d \n", (*p).x,(*p).y); return 0; } struct point* function(void) // 함수의 정의 static struct point* call = {10, 20}; return &call; // 구조체 변수 call의 주소 반환

108 수고 하셨습니다

109


Download ppt "C 프로그래밍."

Similar presentations


Ads by Google