G+ Summer C Study 20130712(5일차)
description
Transcript of G+ Summer C Study 20130712(5일차)
G+ Summer C Programming Study
1
2013. 07. 12
19:00G-Lab
2
지난 시간복습
3
C 언어를 공부하면무엇을 할 수 있을까 ?
4
C 언어의 모든 문장은 ____ 으로 끝난다 !
5
변수 이름의 규칙은 ?
6
C 언어에서 어떤 조건 별로할 일을 나눌 때 어떻게 할까요 ?
7
우리가 변수를 만들면컴퓨터가 내부적으로
하는 일은 ?
8
C 언어에서변수의 주소를 얻기 위해
사용하는 연산자는 ?
9
C 언어에서 일정한 규칙을 가지고반복적으로 일어나는 일들을
편리하게 처리하는방법은 ?
10
배열을 사용하는 이유는 ?
11
우리가 배열을 만들면컴퓨터가 내부적으로
하는 일은 ?
12
오늘의 TODO구조체 , 포인터
13
그렇다면구조체는 무엇일까요 ?
14
구조체는 변수를 모아서하나의 이름으로 사용하는 것을
말합니다 .
15
구조체를 선언하는 방법 1
struct 구조체이름 {변수 1 종류 변수 1 이름 ,변수 2 종류 변수 2 이름
};struct 구조체이름 구조체변수이름 ;
16
구조체를 선언하는 방법 1
struct student {int id;char grade;
};struct student std0, std1;
17
구조체를 선언하는 방법 2
struct student {int id;char grade;
} std0, std1;
18
구조체를 선언하는 방법 3
typedef struct student {int id;char grade;
} student;student std0, std1;
19
잠깐 , typedef 연산자는변수의 종류를 이름을 바꿔 쓰는 방법인데 , 구조체 선언할 때
많이 사용합니다 .
20
typedef 예 1
typedef int myint;myint a;
21
typedef 예 2
struct student stu-dent;student std0, std1;
22
구조체는 하나의 종류를 정의하는 것이므로구조체를 가지고 배열을 만들 수도 있습니다 .
ex: ) struct student std[3];
그래서 구조체를 사용자 정의 데이터 타입 이라고도 부릅니다 .
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
24
그럼 만드는 법은 알았으니활용하는 법을 생각해봅시다 .
25
구조체를 사용하지 않고int 형 변수 10 개를
만들어보세요 .char 형 변수 10 개를
만들어보세요 .
26
헤헤… 어제의 악몽이 떠오르실 것
같아서오늘은 실습으로 대체합니다 .
27
특정학생의 점수를 A나머지 학생의 점수를 B 로
해주는 프로그램입니다 .
열심히 따라 쳐봅시다 .
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;
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’;
}}
30
for( i = 0; i < 8; i++ ) {printf(“ID : %d, GRADE : %c\n”,
std[i].id, std[i].grade );}
return 0;}
31
지금부터는 첼린지를 풀면서문법을 익혀봅시다 .
32
Practice Practice!
학생은 이름과 학번 , 등급을 가지고 있다 .학생은 총 5 명이 존재한다 .각 학생의 이름 , 학번 , 등급을 입력 받는다 .ex: ) 윤재석 , 20073188, ‘C’,
김원재 , 20132317, ‘B’,임원균 , 20132442, ‘A’,안혜미 , 20132146, ‘B’,송동현 , 20132134, ‘B’
학번이 가장 높은 학생의 이름 , 학번 , 등급을 출력하여라 .
33
Practice Practice!
모든 점은 x 와 y 좌표를 가지고 있다 .세 개의 점을 생성하여 각각의 x, y 좌표를 입력 받고세 개의 점으로 생성되는 삼각형의 크기를 출력하여라 .ex: ) 0, 0
10, 00, 20결과 : 100
34
Practice Practice!
모든 점은 x 와 y 좌표를 가지고 있다 .다섯 개의 점을 생성하여 각각의 x, y 좌표를 입력 받고두 개의 점으로 생성되는 선분 중 가장 긴 선분의 길이와 생성하는 점 두 개를 출력하여라 .
35
잠시 10 분 쉬겠습니다 . 훠이훠이 ~~
36
포인터…고놈 참 어려운 놈 ?!
37
다시 한번 묻죠 .우리가 변수라는 것을 만들면컴퓨터는 어떤 일을 하나요 ?
38
다시 한번 묻죠 .우리가 배열이라는 것을 만들면컴퓨터는 어떤 일을 하나요 ?
39
하나 더 묻죠 .우리가 구조체를 쓰는 이유는
무엇인가요 ?
40
결론적으로 세 가지일 모두무엇인가를 저장하기 위한공간을 어떻게 만드느냐
이야기 입니다 .
41
변수는 한 개의 공간을배열은 여러 개의 동일한 모양의 공간을
구조체는 다양한 모양을 하나의 공간처럼
42
제가 공간이라는 말을 하면서위치라는 말을 했던 것을
기억하시나요 ?
43
공간 = 위치 = 주소컴퓨터의 메모리라는 공간에
어디엔가… 존재해야 합니다 .
44
C 언어가 다른 언어에 비해서유리한 점 중 하나가
바로 그 주소를 접근해서무엇인가를 할 수 있다는 것입니다 .
45
주소를 통해서 접근할 수 있다는 것의 장점을
예를 들어 보겠습니다 .
46
원재가 공부를 하다가프로젝트 오일러 라는
엄청난 사이트를 발견했습니다 .
47
그 소식을 들은원균이가 나도 그 정보 좀
달라고 말합니다 .
48
그럼 원재는그냥 주소만 띠익 하고 줍니다 .
49
그렇죠 ..이렇게 모든 내용을 주는 것 대신
주소만 줄 수 있는장점이 있습니다 .
50
포인터는 모든 변수 , 함수에사용할 수 있습니다 .
51
즉 , 우리가 배웠던변수들과 구조체에도
가능하다는 말입니다 .
52
포인터의 선언방법 1
int a;int *b = &a;
53
포인터의 선언방법 2
char a;char *b = &a;
54
포인터의 선언방법 3
struct student std;struct student *pstd = &std;
55
포인터는 이름처럼* 라는 특수문자를
활용합니다 .선언할 때도 ,
사용할 때도 말이죠 .
56
포인터의 사용방법 1
int a;int *b = &a;// b 는 b 가 가리키는 주소// *b 는 b 가 가리키는 것의 값을// 의미합니다 .
57
포인터의 사용방법 2
char a = ‘H’;char *b = &a;printf(“%c”, *b);printf(“%p”, b);
58
포인터의 사용방법 3
struct student std;struct student *pstd = &std;
59
Practice Practice!
int 형 변수 이름이 num 인 변수를 선언하고 , 10 을 대입합니다 .int 형 포인터 변수 이름이 pnum 인 변수를 선언합니다 .
num 를 사용하지 않고 num 의 값을 출력하시오 .
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);
61
수고하셨습니다 . 숙제 공지