G+ Summer C Study 20130712(5일차)

61
G+ Summer C Programming Study 1 2013. 07. 12 19:00 G-Lab

description

5일차 20130712 7월12일 스터디에 대한 PPT 자료입니다. 다룬 내용은 구조체와 포인터 입니다. 화이팅!!

Transcript of G+ Summer C Study 20130712(5일차)

Page 1: G+ Summer C Study 20130712(5일차)

G+ Summer C Programming Study

1

2013. 07. 12

19:00G-Lab

Page 2: G+ Summer C Study 20130712(5일차)

2

지난 시간복습

Page 3: G+ Summer C Study 20130712(5일차)

3

C 언어를 공부하면무엇을 할 수 있을까 ?

Page 4: G+ Summer C Study 20130712(5일차)

4

C 언어의 모든 문장은 ____ 으로 끝난다 !

Page 5: G+ Summer C Study 20130712(5일차)

5

변수 이름의 규칙은 ?

Page 6: G+ Summer C Study 20130712(5일차)

6

C 언어에서 어떤 조건 별로할 일을 나눌 때 어떻게 할까요 ?

Page 7: G+ Summer C Study 20130712(5일차)

7

우리가 변수를 만들면컴퓨터가 내부적으로

하는 일은 ?

Page 8: G+ Summer C Study 20130712(5일차)

8

C 언어에서변수의 주소를 얻기 위해

사용하는 연산자는 ?

Page 9: G+ Summer C Study 20130712(5일차)

9

C 언어에서 일정한 규칙을 가지고반복적으로 일어나는 일들을

편리하게 처리하는방법은 ?

Page 10: G+ Summer C Study 20130712(5일차)

10

배열을 사용하는 이유는 ?

Page 11: G+ Summer C Study 20130712(5일차)

11

우리가 배열을 만들면컴퓨터가 내부적으로

하는 일은 ?

Page 12: G+ Summer C Study 20130712(5일차)

12

오늘의 TODO구조체 , 포인터

Page 13: G+ Summer C Study 20130712(5일차)

13

그렇다면구조체는 무엇일까요 ?

Page 14: G+ Summer C Study 20130712(5일차)

14

구조체는 변수를 모아서하나의 이름으로 사용하는 것을

말합니다 .

Page 15: G+ Summer C Study 20130712(5일차)

15

구조체를 선언하는 방법 1

struct 구조체이름 {변수 1 종류 변수 1 이름 ,변수 2 종류 변수 2 이름

};struct 구조체이름 구조체변수이름 ;

Page 16: G+ Summer C Study 20130712(5일차)

16

구조체를 선언하는 방법 1

struct student {int id;char grade;

};struct student std0, std1;

Page 17: G+ Summer C Study 20130712(5일차)

17

구조체를 선언하는 방법 2

struct student {int id;char grade;

} std0, std1;

Page 18: G+ Summer C Study 20130712(5일차)

18

구조체를 선언하는 방법 3

typedef struct student {int id;char grade;

} student;student std0, std1;

Page 19: G+ Summer C Study 20130712(5일차)

19

잠깐 , typedef 연산자는변수의 종류를 이름을 바꿔 쓰는 방법인데 , 구조체 선언할 때

많이 사용합니다 .

Page 20: G+ Summer C Study 20130712(5일차)

20

typedef 예 1

typedef int myint;myint a;

Page 21: G+ Summer C Study 20130712(5일차)

21

typedef 예 2

struct student stu-dent;student std0, std1;

Page 22: G+ Summer C Study 20130712(5일차)

22

구조체는 하나의 종류를 정의하는 것이므로구조체를 가지고 배열을 만들 수도 있습니다 .

ex: ) struct student std[3];

그래서 구조체를 사용자 정의 데이터 타입 이라고도 부릅니다 .

Page 23: G+ Summer C Study 20130712(5일차)

23

금방 했던 일을 그림으로 보면

std[0] std[1] std[2]

struct student std [3]; 을 하면

&std[0] &std[1] &std[2]

&std[0] == std

id id id

grade grade grade

== &std[0].id

Page 24: G+ Summer C Study 20130712(5일차)

24

그럼 만드는 법은 알았으니활용하는 법을 생각해봅시다 .

Page 25: G+ Summer C Study 20130712(5일차)

25

구조체를 사용하지 않고int 형 변수 10 개를

만들어보세요 .char 형 변수 10 개를

만들어보세요 .

Page 26: G+ Summer C Study 20130712(5일차)

26

헤헤… 어제의 악몽이 떠오르실 것

같아서오늘은 실습으로 대체합니다 .

Page 27: G+ Summer C Study 20130712(5일차)

27

특정학생의 점수를 A나머지 학생의 점수를 B 로

해주는 프로그램입니다 .

열심히 따라 쳐봅시다 .

Page 28: G+ Summer C Study 20130712(5일차)

28

#include <stdio.h>

int main(void){

int i, inputId;struct student {

int id;char grade;

} std[8];

std[0].id = 20132146;std[1].id = 20132402;std[2].id = 20132317;std[3].id = 20132442;

Page 29: G+ Summer C Study 20130712(5일차)

29

std[4].id = 20132134;std[5].id = 20122086;std[6].id = 20102364;std[7].id = 20109999;

printf(“ 학번을 입력하세요 :”);scanf(“%d”, &inputId);

for( i = 0; i < 8; i++ ) {if( std[i].id == inputId ) {

std[i].grade = ‘A’;break;

} else {std[i].grade = ‘B’;

}}

Page 30: G+ Summer C Study 20130712(5일차)

30

for( i = 0; i < 8; i++ ) {printf(“ID : %d, GRADE : %c\n”,

std[i].id, std[i].grade );}

return 0;}

Page 31: G+ Summer C Study 20130712(5일차)

31

지금부터는 첼린지를 풀면서문법을 익혀봅시다 .

Page 32: G+ Summer C Study 20130712(5일차)

32

Practice Practice!

학생은 이름과 학번 , 등급을 가지고 있다 .학생은 총 5 명이 존재한다 .각 학생의 이름 , 학번 , 등급을 입력 받는다 .ex: ) 윤재석 , 20073188, ‘C’,

김원재 , 20132317, ‘B’,임원균 , 20132442, ‘A’,안혜미 , 20132146, ‘B’,송동현 , 20132134, ‘B’

학번이 가장 높은 학생의 이름 , 학번 , 등급을 출력하여라 .

Page 33: G+ Summer C Study 20130712(5일차)

33

Practice Practice!

모든 점은 x 와 y 좌표를 가지고 있다 .세 개의 점을 생성하여 각각의 x, y 좌표를 입력 받고세 개의 점으로 생성되는 삼각형의 크기를 출력하여라 .ex: ) 0, 0

10, 00, 20결과 : 100

Page 34: G+ Summer C Study 20130712(5일차)

34

Practice Practice!

모든 점은 x 와 y 좌표를 가지고 있다 .다섯 개의 점을 생성하여 각각의 x, y 좌표를 입력 받고두 개의 점으로 생성되는 선분 중 가장 긴 선분의 길이와 생성하는 점 두 개를 출력하여라 .

Page 35: G+ Summer C Study 20130712(5일차)

35

잠시 10 분 쉬겠습니다 . 훠이훠이 ~~

Page 36: G+ Summer C Study 20130712(5일차)

36

포인터…고놈 참 어려운 놈 ?!

Page 37: G+ Summer C Study 20130712(5일차)

37

다시 한번 묻죠 .우리가 변수라는 것을 만들면컴퓨터는 어떤 일을 하나요 ?

Page 38: G+ Summer C Study 20130712(5일차)

38

다시 한번 묻죠 .우리가 배열이라는 것을 만들면컴퓨터는 어떤 일을 하나요 ?

Page 39: G+ Summer C Study 20130712(5일차)

39

하나 더 묻죠 .우리가 구조체를 쓰는 이유는

무엇인가요 ?

Page 40: G+ Summer C Study 20130712(5일차)

40

결론적으로 세 가지일 모두무엇인가를 저장하기 위한공간을 어떻게 만드느냐

이야기 입니다 .

Page 41: G+ Summer C Study 20130712(5일차)

41

변수는 한 개의 공간을배열은 여러 개의 동일한 모양의 공간을

구조체는 다양한 모양을 하나의 공간처럼

Page 42: G+ Summer C Study 20130712(5일차)

42

제가 공간이라는 말을 하면서위치라는 말을 했던 것을

기억하시나요 ?

Page 43: G+ Summer C Study 20130712(5일차)

43

공간 = 위치 = 주소컴퓨터의 메모리라는 공간에

어디엔가… 존재해야 합니다 .

Page 44: G+ Summer C Study 20130712(5일차)

44

C 언어가 다른 언어에 비해서유리한 점 중 하나가

바로 그 주소를 접근해서무엇인가를 할 수 있다는 것입니다 .

Page 45: G+ Summer C Study 20130712(5일차)

45

주소를 통해서 접근할 수 있다는 것의 장점을

예를 들어 보겠습니다 .

Page 46: G+ Summer C Study 20130712(5일차)

46

원재가 공부를 하다가프로젝트 오일러 라는

엄청난 사이트를 발견했습니다 .

Page 47: G+ Summer C Study 20130712(5일차)

47

그 소식을 들은원균이가 나도 그 정보 좀

달라고 말합니다 .

Page 48: G+ Summer C Study 20130712(5일차)

48

그럼 원재는그냥 주소만 띠익 하고 줍니다 .

Page 49: G+ Summer C Study 20130712(5일차)

49

그렇죠 ..이렇게 모든 내용을 주는 것 대신

주소만 줄 수 있는장점이 있습니다 .

Page 50: G+ Summer C Study 20130712(5일차)

50

포인터는 모든 변수 , 함수에사용할 수 있습니다 .

Page 51: G+ Summer C Study 20130712(5일차)

51

즉 , 우리가 배웠던변수들과 구조체에도

가능하다는 말입니다 .

Page 52: G+ Summer C Study 20130712(5일차)

52

포인터의 선언방법 1

int a;int *b = &a;

Page 53: G+ Summer C Study 20130712(5일차)

53

포인터의 선언방법 2

char a;char *b = &a;

Page 54: G+ Summer C Study 20130712(5일차)

54

포인터의 선언방법 3

struct student std;struct student *pstd = &std;

Page 55: G+ Summer C Study 20130712(5일차)

55

포인터는 이름처럼* 라는 특수문자를

활용합니다 .선언할 때도 ,

사용할 때도 말이죠 .

Page 56: G+ Summer C Study 20130712(5일차)

56

포인터의 사용방법 1

int a;int *b = &a;// b 는 b 가 가리키는 주소// *b 는 b 가 가리키는 것의 값을// 의미합니다 .

Page 57: G+ Summer C Study 20130712(5일차)

57

포인터의 사용방법 2

char a = ‘H’;char *b = &a;printf(“%c”, *b);printf(“%p”, b);

Page 58: G+ Summer C Study 20130712(5일차)

58

포인터의 사용방법 3

struct student std;struct student *pstd = &std;

Page 59: G+ Summer C Study 20130712(5일차)

59

Practice Practice!

int 형 변수 이름이 num 인 변수를 선언하고 , 10 을 대입합니다 .int 형 포인터 변수 이름이 pnum 인 변수를 선언합니다 .

num 를 사용하지 않고 num 의 값을 출력하시오 .

Page 60: G+ Summer C Study 20130712(5일차)

60

Practice Practice!

int 형 변수 2 개를 선언하고 , 10 과 20 을 대입합니다 .int 형 포인터 변수 2 개를 선언합니다 .

int a = 10, b = 20, t;int *pa = &a, *pb = &b;

a 와 b 의 값을 a 와 b 를 사용하지 않고 변경하시오 .printf(“a:%d, b:%d\n”, a, b);

Page 61: G+ Summer C Study 20130712(5일차)

61

수고하셨습니다 . 숙제 공지