ABC 11장

Size: px
Start display at page:

Download "ABC 11장"

Transcription

1 13 장고급프로그래밍 김명호

2 내용 C 시스템의메모리배치 대형프로그램의구성 정적외부변수와함수 추상자료형 가변인자함수 미리정의된매크로와가변인자매크로 자기참조구조체 라이브러리 신호 1

3 C 프로그램실행메모리 메모리배치 스택 상위메모리 힙 데이터 텍스트 하위메모리 2

4 C 프로그램실행메모리 메모리배치 스택 : 함수의지역변수, 매개변수, 리턴주소저장 힙 : malloc(), calloc() 에의해할당되는공간 텍스트 : 실행코드 ( 문장 ) 저장 데이터 : 전역변수, 정적변수저장 실행파일에는텍스트와초기화된전역변수와정적변수저장 초기화되지않은것에대해서는이름과크기만저장 (BSS, Block Started by Symbol) 3

5 프로그램 13.1 메모리배치 int same; // BSS 부분에저장 float gallon2liter = ; // 데이터부분에저장 float g2l[n][2]; // BSS 부분에저장 int last = 1; // 데이터부분에저장 float compute(float); // main() 과 compute() 함수의모든문장은텍스트부분에저장 int main(void){ float liter, gallon; int i;... float compute(float input){ static int cnt = 0; // BSS 부분에저장 float result; int i;... 4

6 C 프로그램실행메모리 메모리배치 스택 Liter, Gallon i 상위메모리 힙 데이터 Same, g2l, cnt Gallon2liter, last main : 텍스트... compute :... 하위메모리 5

7 대형프로그램구성 프로그램은여러파일로작성될수있음 보통관련된함수들을하나의파일에저장함 한프로그램을이루는파일들은보통같은디렉터리에저장됨 6

8 프로그램 13.2 (main.c) #include <stdio.h> 대형프로그램구성 typedef struct grade{ int grade[3]; char p_f[3]; int sum; float avg; grade; int grade_proc3(grade *); int main(void){ grade st = {{0, {0, -1, -1.0; printf(" 성적입력 ( 국어, 산수, 과학 ) : "); scanf("%d%d%d", &st.grade[0], &st.grade[1], &st.grade[2]); if (grade_proc3(&st)) return 1; printf(" 국어 : %d (%c)\n", st.grade[0], st.p_f[0]); printf(" 산수 : %d (%c)\n", st.grade[1], st.p_f[1]); printf(" 과학 : %d (%c)\n", st.grade[2], st.p_f[2]); printf(" 총점 : %d\n", st.sum); printf(" 평균 : %.2f\n", st.avg); return 0; 7

9 대형프로그램구성 프로그램 13.2 (grade.c) #include <stdio.h> typedef struct grade{ int grade[3]; char p_f[3]; int sum; float avg; grade; int grade_proc3(grade * stp) { if (stp == NULL) { printf(" 오류 : NULL 포인터 \n"); return -1; stp -> sum = stp -> grade[0] + stp -> grade[1] + stp -> grade[2]; stp -> avg = stp -> sum / 3.0; stp -> p_f[0] = stp -> grade[0] < 60? 'f' : 'p'; stp -> p_f[1] = stp -> grade[1] < 60? 'f' : 'p'; stp -> p_f[2] = stp -> grade[2] < 60? 'f' : 'p'; return 0; 8

10 컴파일 대형프로그램구성 프로그램을이루는모든파일을명시하면됨 gcc -o grade main.c grade.c 파일별컴파일 gcc -c main.c gcc -c grade.c gcc -o grade main.o grade.o 수정된파일만컴파일하면됨 gcc -c main.c gcc -o grade main.o grade.o 9

11 사용자헤더파일 대형프로그램구성 프로그램을이루는파일들이공통으로사용하는헤더파일이나, 매크로, 함수원형, 구조체선언등을모아두는파일 확장자로 h 를사용함 다른소스파일과같은디렉터리에둠 대형프로그램을여러명이같이개발할때유용함 헤더파일을여러번포함해도되게끔작성하는것이좋음 10

12 프로그램 13.3 (grade.h) #include <stdio.h> typedef struct grade{ int grade[3]; char p_f[3]; int sum; float avg; grade; int grade_proc3(grade *); 대형프로그램구성 11

13 대형프로그램구성 프로그램 13.3 (main.c) #include "grade.h" int main(void) { grade st = {{0, {0, -1, -1.0; printf(" 성적입력 ( 국어, 산수, 과학 ) : "); scanf("%d%d%d", &st.grade[0], &st.grade[1], &st.grade[2]); if (grade_proc3(&st)) return 1; printf(" 국어 : %d (%c)\n", st.grade[0], st.p_f[0]); printf(" 산수 : %d (%c)\n", st.grade[1], st.p_f[1]); printf(" 과학 : %d (%c)\n", st.grade[2], st.p_f[2]); printf(" 총점 : %d\n", st.sum); printf(" 평균 : %.2f\n", st.avg); return 0; 12

14 대형프로그램구성 프로그램 13.3 (grade.c) #include "grade.h" int grade_proc3(grade * stp) { if (stp == NULL) { printf(" 오류 : NULL 포인터 \n"); return -1; stp -> sum = stp -> grade[0] + stp -> grade[1] + stp -> grade[2]; stp -> avg = stp -> sum / 3.0; stp -> p_f[0] = stp -> grade[0] < 60? 'f' : 'p'; stp -> p_f[1] = stp -> grade[1] < 60? 'f' : 'p'; stp -> p_f[2] = stp -> grade[2] < 60? 'f' : 'p'; return 0; 13

15 대형프로그램구성 프로그램 13.3 (grade.h) #ifndef _GRADE_H_ // 같은헤더파일이두번이상포함되는것을방지함 #define _GRADE_H_ #include <stdio.h> typedef struct grade{ int grade[3]; char p_f[3]; int sum; float avg; grade; void grade_proc3(grade *); #endif // _GRADE_H_ 14

16 함수밖에선언된변수 외부변수 모든함수에서참조가가능함 함수간에정보전달을위해유용함 다른파일에정의된외부변수는 extern 을사용하여참조할수있음 15

17 프로그램 13.4 (main.c) #include <stdio.h> 외부변수 int quotient, rem; // 전역변수선언 int divide(int, int); int main(void) { int a = 10, b = 3; extern int quotient, rem; // 전역변수참조선언, 생략할수있음 if (divide(a, b)) printf("0으로나눌수없습니다.\n"); else printf("%d / %d : 몫은 %d이고나머지는 %d입니다.\n", a, b, quotient, rem); return 0; 16

18 외부변수 프로그램 13.4 (divide.c) int is_zero(int); int divide(int dividend, int divisor) { extern int quotient, rem; // 전역변수참조선언 if (is_zero(divisor)) return -1; quotient = dividend / divisor; rem = dividend % divisor; return 0; int is_zero(int num) { if (num) return 0; return 1; 17

19 정적외부변수 외부변수에 static 이적용된변수 정적외부변수는그변수가선언된파일내에있는함수에서만사용될수있음 데이터접근을제한하여안전한프로그램을만들수있음 18

20 정적외부함수 함수정의에 static 이적용된함수 정적외부함수는그함수가정의된파일내에있는함수에서만사용될수있음 19

21 정적외부변수 프로그램 13.5 (password.c) #include <stdbool.h> static int passwd = 78; static bool is_login = false; static void set_login(bool ok){ is_login = ok; int access(int num){ if (num!= passwd) { set_login(false); return -1; set_login(true); return 0; int change_passwd(int new){ if (!is_login) return -1; passwd = new; return 0; // 정적외부변수, 다른파일에서사용못함 // 정적외부변수, 다른파일에서사용못함 // 정적외부함수, 다른파일에서호출못함 20

22 프로그램 13.5 (main.c) 정적외부변수 #include <stdio.h> int access(int); int change_passwd(int); int main(void){ int num, new, select = 1; while (select){ printf("0: 종료, 1: 로그인, 2: 패스워드변경 \n번호를선택하세요 :"); scanf("%d", &select); switch(select) {... case 1: printf(" 패스워드 : "); scanf("%d", &num); if (access(num)) printf(" 잘못된패스워드입니다.\n"); else printf(" 로그인됐습니다.\n"); break; 21

23 정적외부변수 프로그램 13.5 (main.c) case 2: printf(" 새로운패스워드 : "); scanf("%d", &new); if (change_passwd(new)) printf(" 패스워드를변경할수없습니다.\n"); else printf(" 패스워드가변경됐습니다.\n"); break; default: printf(" 잘못된번호입니다.\n"); return 0; 22

24 $ password 0: 종료, 1: 로그인, 2: 패스워드변경번호를선택하세요 :1 패스워드 : 78 로그인됐습니다. 0: 종료, 1: 로그인, 2: 패스워드변경번호를선택하세요 :2 새로운패스워드 : 90 패스워드가변경됐습니다. 0: 종료, 1: 로그인, 2: 패스워드변경번호를선택하세요 :0 프로그램을종료합니다. $ password 0: 종료, 1: 로그인, 2: 패스워드변경번호를선택하세요 :1 패스워드 : 90 잘못된패스워드입니다. 0: 종료, 1: 로그인, 2: 패스워드변경번호를선택하세요 :2 새로운패스워드 : 90 패스워드를변경할수없습니다. 0: 종료, 1: 로그인, 2: 패스워드변경번호를선택하세요 :0 프로그램을종료합니다. 프로그램결과 23

25 추상자료형 처리해야할데이터집합과그연산을정의한명세 데이터는추상자료형에서정의된연산자에의해서만다루어지기때문에데이터를보호할수있음 구현에대해서는고려하지않음 24

26 프로그램 13.1 #include <stdio.h> #define N 10 int same; float gallon2liter = ; float g2l[n][2]; int last = 1; float compute(float); 25

27 프로그램 13.1 int main(void){ float liter, gallon; int i; while (last){ printf(" 겔론 : "); scanf("%f", &gallon); liter = compute(gallon); printf("%.2f 겔론은 %.2f 리터입니다.\n", gallon, liter); printf("%d 번변환했습니다.\n", N); for (i = 0; i < N; i++) printf("%.2f 겔론 : %.2f 리터 \n", g2l[i][0], g2l[i][1]); return 0; 26

28 프로그램 13.1 float compute(float input){ static int cnt = 0; float result; int i; for (i = 0; i < cnt; i++) if (g2l[i][0] == input) { same++; return g2l[i][1]; result = input * gallon2liter; g2l[cnt][0] = input; g2l[cnt][1] = result; cnt++; if (cnt == N) last = 0; return result; 27

29 프로그램 13.1 int main(void){ float liter, gallon; int i; while (last){... liter = compute(gallon); float compute(float input){ static int cnt = 0; float result; int i;... 28

30 메모리스택 함수호출에의해생성되는함수프레임은메모리의스택부분에저장됨 함수프레임 : 지역변수, 매개변수, 리턴주소로구성됨 저장된함수프레임은함수가종료되면삭제됨 가장나중에호출된함수가가장빨리종료되기때문에메모리스택에서가장먼저삭제되는것은가장최근에쌓인함수프레임임 ( 후입선출 ) 29

31 추상자료형 함수호출예 ( 프로그램 13.1) main() 함수호출 return address liter gallon i main() 프레임 30

32 추상자료형 함수호출예 ( 프로그램 13.1) compute() 함수호출 return address liter gallon i input return address result i main() 프레임 compute() 프레임 31

33 추상자료형 함수호출예 ( 프로그램 13.1) compute() 함수 return return address liter gallon i main() 프레임 32

34 추상자료형 추상자료형스택 (stack) 데이터를선형으로저장하는자료구조로나중에저장한것을먼저사용함 ( 후입선출 ) 삽입 삭제 33

35 추상자료형 처리해야할데이터집합과그연산을정의한명세 데이터는추상자료형에서정의된연산자에의해서만다루어지기때문에데이터를보호할수있음 구현에대해서는고려하지않음 34

36 추상자료형 추상자료형스택 (stack) 연산자 push : 스택에데이터삽입 pop : 스택으로부터데이터삭제 top : 스택의톱에있는데이터를삭제하지않고확인 empty : 스택이비어있는지검사 full : 스택이꽉찼는지검사 reset : 스택초기화 35

37 추상자료형스택구현 데이터를선형으로저장하는방법 배열 링크드리스트 문자를저장하는스택을배열로구현 #define MAX 100 typedef struct stack { char s[max]; int top; stack; 36

38 스택연산자구현예 push 연산자 추상자료형스택구현 함수 13.1 void push(char c, stack *stk) { stk -> top++; stk -> s[stk -> top] = c; 37

39 추상자료형스택구현 프로그램 13.6 (stack.h) #include <stdio.h> #include <stdbool.h> #define MAX_LEN 100 #define EMPTY -1 #define FULL (MAX_LEN - 1) typedef struct stack { char s[max_len]; int top; stack; void reset(stack *stk); void push(char c, stack *stk); char pop(stack *stk); char top(const stack *stk); bool empty(const stack *stk); bool full(const stack *stk); 38

40 추상자료형스택구현 프로그램 13.6 (stack.c) #include "stack.h" void reset(stack *stk){ stk -> top = EMPTY; void push(char c, stack *stk){ stk -> top++; stk -> s[stk -> top] = c; char pop(stack *stk){ return (stk -> s[stk -> top--]); char top(const stack *stk){ return (stk -> s[stk -> top]); bool empty(const stack *stk){ return (stk -> top == EMPTY); bool full(const stack *stk){ return (stk -> top == FULL); 39

41 추상자료형스택구현 프로그램 13.6 (main.c) #include "stack.h" int main(void){ char str[] = "Stack Test!"; int i; stack s; reset(&s); // 스택초기화 printf(" 문자열 : %s\n", str); // 스택에문자열 push for (i = 0; str[i]!= '\0'; ++i) if (!full(&s)) push(str[i], &s); printf(" 역문자열 : "); // 스택에서문자열 pop while (!empty(&s)) putchar(pop(&s)); putchar('\n'); return 0; 40

42 프로그램결과 문자열 : Stack Test! 역문자열 :!tset kcats 41

43 가변인자함수 함수의매개변수개수가정해져있지않는함수 매개변수에서 ( 점세개 ) 으로표시 printf() printf(" 재미있는 C!\n"); printf(" 이름 : %s.", " 김진혁 "); printf("%d * %d = %d\n", 123, 43, 123 * 43); 함수원형 int printf(const char *cntrl_string,...); 42

44 가변인자함수 스택 printf("%d * %d = %d\n", 123, 43, 123 * 43); printf() 호출... 0x return address

45 가변인자함수 스택 printf("%d * %d = %d\n", 123, 43, 123 * 43); printf() 호출... 0x char * 4 byte 123 int 4 byte 43 int 4 byte 5289 int 4 byte return address

46 가변인자함수 <stdarg.h> 에정의된매크로를사용하여만듦 매크로 va_start(ap, v) va_arg(ap, type) 설명 ap가가변인자의첫번째인자를포인트하게한다. v는가변인자바로직전의인자이다. ap가포인트하는곳의값을 type 형으로읽고, ap는다음인자를포인트하게한다. va_copy(dest, src) src 포인터를 dest 로복사한다. C99 에서추가되었다. va_end(ap) va_start() 로초기화된 ap 포인터를제거한다. va_start() 를사용한함수에서사용해야한다. 45

47 가변인자함수 스택 printf("%d * %d = %d\n", 123, 43, 123 * 43); printf() 호출 va_start(ap, v)... 0x char * 4 byte 123 int 4 byte 43 int 4 byte 5289 int 4 byte return address

48 가변인자함수 스택 printf("%d * %d = %d\n", 123, 43, 123 * 43); printf() 호출 va_arg(ap, int)... 0x char * 4 byte 123 int 4 byte 43 int 4 byte 5289 int 4 byte return address

49 가변인자함수 스택 printf("%d * %d = %d\n", 123, 43, 123 * 43); printf() 호출 va_arg(ap, int)... 0x char * 4 byte 123 int 4 byte 43 int 4 byte 5289 int 4 byte return address

50 가변인자함수 프로그램 13.7 #include <stdio.h> #include <stdarg.h> #define END 0 #define INT 1 #define DOUBLE 2 double va_sum(int,...); int main(void) { printf("sum = %.3f\n", va_sum(int, 3, DOUBLE, 3.0, END)); printf("sum = %.3f\n", va_sum(double, 20.0, INT, 90, DOUBLE, 0.5, END)); return 0 ; 49

51 가변인자함수 프로그램 13.7 double va_sum(int type,...) { double sum = 0.0; va_list ap; va_start(ap, type); while(type!= 0){ if (type == INT) sum += va_arg(ap, int); else sum += va_arg(ap, double); type = va_arg(ap, int); va_end(ap); return sum; 50

52 프로그램결과 Sum = Sum =

53 미리정의된매크로 7 개의미리정의된매크로가있음 매크로 DATE FILE LINE 미리정의된식별자 (C99) func : 현재수행중인함수이름을갖는문자배열 값 현재날짜를포함하는문자열 파일이름을포함하는문자열 현재라인번호를나타내는정수 STDC 표준을따르는경우 1, 아니면 0 TIME 현재시간을포함하는문자열 STDC_HOSTED 호스트구현이면 1, 아니면 0 STDC_VERSION 정수상수 L 52

54 가변인자매크로 C99부터매크로도가변인자를가질수있음 가변인자를점세개 ( ) 로표시 매크로정의에서가변매개변수는 VA_ARGS 로명시 예제 #define ERRPRINTF(...) \ printf(" 오류 : (" FILE " 파일 ) " VA_ARGS ) 53

55 가변인자매크로 프로그램 13.8 #include <stdio.h> #define ERRPRINTF(...) printf(" 오류 : (" FILE " 파일 ) " VA_ARGS ) int main(void){ float divisor, dividend; printf("******** 나누기프로그램 ********\n"); printf(" 피제수를입력하세요 : "); scanf("%f", &dividend); printf(" 제수를입력하세요 : "); scanf("%f", &divisor); if (divisor == 0.0) ERRPRINTF(" 제수가 %.3f 입니다.\n", divisor); else printf("%.3f / %.3f = %.3f\n", dividend, divisor, dividend / divisor); return 0; 54

56 프로그램결과 ******** 나누기프로그램 ******** 피제수를입력하세요 : 89 제수를입력하세요 : 0 오류 : (divide.c 파일 ) 제수가 0 입니다. 55

57 컴파일러메시지형태 가변인자매크로 divide.c: In function `main': divide.c:14: error: 'divisor' undeclared (first use in this function) 오류가있는파일명, 함수명, 행번호표시 가변인자매크로로만든오류출력매크로 #define ERRPRINTF2(...) \ printf( FILE ": '%s' 함수 :\n", func ),\ printf( FILE ":%d: 오류 :", LINE ),\ printf( VA_ARGS ) 여러문장을사용하기위해콤마연산자사용 56

58 가변인자매크로 매크로정의에서콤마연산자대신문장의끝을나타내는세미콜론 (;) 을사용하면문제가발생함 #define ERRPRINTF2(...) \ printf( FILE ": '%s' 함수 :\n", func );\ printf( FILE ":%d: 오류 :", LINE );\ printf( VA_ARGS ) ERRPRINTF2(" 제수가 0 입니다.\n"); printf("divide.c" ": '%s' 함수 :\n", func ); printf("divide.c" ":%d: 오류 :", 17); printf(" 제수가 0입니다.\n", divisor); 57

59 문제발생예제 가변인자매크로 if (divisor == 0.0) ERRPRINTF2(" 제수가 0 입니다.\n"); else printf("%.3f / %.3f = %.3f\n", dividend, divisor, dividend / divisor); if (divisor == 0.0) printf("divide.c" ": '%s' 함수 :\n", func ); printf("divide.c" ":%d: 오류 :", 17); printf(" 제수가 0입니다.\n", divisor); else printf("%.3f / %.3f = %.3f\n", dividend, divisor, dividend / divisor); 58

60 가변인자매크로 매크로가여러문장으로정의될때에는 do-while 구문을사용하는것이좋음 #define ERRPRINTF2(...) \ do {\ printf( FILE ": '%s' 함수 :\n", func );\ printf( FILE ":%d: 오류 :", LINE );\ printf( VA_ARGS ); \ while (0) while 의조건으로 0 을사용해야함, 0 이외의값을사용하면무한루프에빠짐 59

61 가변인자매크로 do-while 문은한문장으로취급되기때문에오류가발생하지않음 if (divisor == 0.0) else do { printf("divide.c" ": '%s' 함수 :\n", func ); printf("divide.c" ":%d: 오류 :", 17); printf(" 제수가 0 입니다.\n", divisor); while (0); printf("%.3f / %.3f = %.3f\n", dividend, divisor, dividend / divisor); 60

62 자기참조구조체 자신과같은구조체형을포인트하는멤버를갖는구조체 예 struct list { int data; struct list *next; a; dat a next 61

63 프로그램 13.9 #include <stdio.h> 자기참조구조체 struct list { int data; struct list *next; ; int main(void){ struct list a = {1, NULL, b = {2, NULL, c = {3, NULL; a.next = &b; b.next = &c; c.next = &a; printf("a : %d, b : %d, c : %d\n", a.data, b.data, c.data); printf("a : %d, b(a.next->data) : %d, c(b.next->data) : %d\n", a.data, a.next->data, b.next->data); printf("a : %d, b(c.next->next->data) : %d, \ c(a.next->next->data) : %d\n", a.data, c.next->next->data, a.next->next->data); return 0; 62

64 자기참조구조체 struct list a = {1, NULL, b = {2, NULL, c = {3, NULL; a b c 1 NULL 2 NULL 3 NULL data next data next data next a.next = &b; b.next = &c; c.next = &a; a b c data next data next data next b.next -> data? a.next -> next -> data? 63

65 프로그램결과 a : 1, b : 2, c : 3 a : 1, b(a.next->data) : 2, c(b.next->data) : 3 a : 1, b(c.next->next->data) : 2, c(a.next->next->data) : 3 64

66 동적메모리할당과자기참조구조체 자기참조구조체는동적메모리할당기법과함께사용됨 동적으로할당받은구조체는기존구조체가포인트하여유지함 동적메모리할당은 malloc() 과 calloc() 으로함 예 tmp = (struct list *)malloc(sizeof(struct list)); 65

67 동적메모리할당과자기참조구조체 동적으로할당받은메모리공간은포인터를통해구조체를다루는것과똑같이다루면됨 예 tmp = (struct list *)malloc(sizeof(struct list)); tmp -> data = 4; tmp -> next = NULL; tmp 4 data NULL next 66

68 동적메모리할당과자기참조구조체 동적으로할당받은메모리공간은어느방법으로든접근할수있게만들어야함 가비지 : 접근할수없는동적으로할당받은메모리공간 예 tmp = (struct list *)malloc(sizeof(struct list)); tmp -> data = 10; tmp -> next = NULL; tmp 가비지 10 data NULL next 4 data NULL next 67

69 동적메모리할당과자기참조구조체 가비지가발생하지않게하기위해서는이전포인터를잘관리해야함 예 tmp -> next = (struct list *)malloc(sizeof(struct list)); tmp -> next -> data = 10; tmp -> next -> next = NULL; 68

70 동적메모리할당과자기참조구조체 자기참조구조체를다루는프로그램은재귀함수를많이사용함 예제프로그램 문자열을링크드리스트로변환 예 nice h n i c e NULL d next d next d next d next 69

71 동적메모리할당과자기참조구조체 프로그램 #include <stdio.h> #include <stdlib.h> #define N 10 struct linked_list { char d; struct linked_list *next; ; typedef struct linked_list typedef ELEMENT ELEMENT; *LINK; LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; 70

72 동적메모리할당과자기참조구조체 프로그램 void print_list(link head){ if (head == NULL) printf("null\n"); else { printf("%c --> ", head -> d); print_list(head -> next); int main(void){ char input[n]; LINK h; printf(" 문자열입력 : "); scanf("%s", input); h = string_to_list(input); printf(" 변환리스트결과 : \n"); print_list(h); return 0; 71

73 동적메모리할당과자기참조구조체 프로그램 LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; main() : h = string_to_list( go ); h string_to_list( go ) 72

74 동적메모리할당과자기참조구조체 프로그램 LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; main() : h = string_to_list( go ); h string_to_list( go ) head g string_to_list( go ) 73

75 동적메모리할당과자기참조구조체 프로그램 LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; main() : h = string_to_list( go ); h string_to_list( go ) head g string_to_list( o ) string_to_list( go ) 74

76 동적메모리할당과자기참조구조체 프로그램 LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; main() : h = string_to_list( go ); h string_to_list( go ) head g string_to_list( o ) string_to_list( o ) head o string_to_list( ) string_to_list( go ) 75

77 동적메모리할당과자기참조구조체 프로그램 LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; main() : h = string_to_list( go ); h string_to_list( go ) head g string_to_list( o ) string_to_list( o ) head o string_to_list( ) string_to_list( go ) NULL 76

78 동적메모리할당과자기참조구조체 프로그램 LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; main() : h = string_to_list( go ); h string_to_list( go ) head g string_to_list( o ) string_to_list( o ) head o NULL string_to_list( go ) 77

79 동적메모리할당과자기참조구조체 프로그램 LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; main() : h = string_to_list( go ); h string_to_list( go ) head g string_to_list( o ) string_to_list( o ) head o NULL string_to_list( go ) 78

80 동적메모리할당과자기참조구조체 프로그램 LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; main() : h = string_to_list( go ); h string_to_list( go ) head g o NULL string_to_list( go ) 79

81 동적메모리할당과자기참조구조체 프로그램 LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; main() : h = string_to_list( go ); h string_to_list( go ) head g o NULL string_to_list( go ) 80

82 동적메모리할당과자기참조구조체 프로그램 LINK string_to_list(char s[]){ LINK head; if (s[0] == '\0') return NULL; else { head = malloc(sizeof(element)); head -> d = s[0]; head -> next = string_to_list(s + 1); return head; main() : h = string_to_list( go ); h g o NULL 81

83 프로그램결과 문자열입력 : nice 변환리스트결과 : n --> i --> c --> e --> NULL 82

84 자기참조구조체를사용할때주의사항 포인터를다룰때에는함수를만들어서할것 InitNode(), InsertNode(), DeleteNode() 포인터를다루는함수를만들기전에그림을먼저그릴것 p1 p2... A C... q B NULL p1 p2... A C... q B 83

85 자기참조구조체를사용할때주의사항 p1 p2... A C... q 1 B 2 p1 p2... A C... q 2 B 1 84

86 자기참조구조체를사용할때주의사항 1. 포인터를선언할때초기화할것 int *p = NULL; 2. 포인터를사용하기전에그값을확인할것 if (p!= NULL){... // p 사용 else {... // 오류처리 85

87 자기참조구조체를사용할때주의사항 3. 할당받은메모리만큼만값을다루어야함 p = (int *)malloc(n * sizeof(int)); while (istrue()){ p[i] = x; i++; 86

88 자기참조구조체를사용할때주의사항 3. 할당받은메모리만큼만값을다루어야함 p = (int *)malloc(n * sizeof(int)); while (istrue() && (i < N)){ p[i] = x; i++; 87

89 자기참조구조체를사용할때주의사항 4. 포인터를다루는부분은독립함수로만들것 InitNode(), InsertNode(), DeleteNode(), 등 5. 동적메모리할당을받기위해 malloc() 이나 calloc() 문장을만들때적절한곳에 free() 문장도같이만들것 6. free() 를사용하여메모리를반납한후포인터에 NULL 값을배정할것 free(p) p = NULL; 7. 포인터를다루기전에그림을그려볼것 88

90 자기참조구조체를사용할때주의사항 * 자신이없으면다른대안을찾아볼것 가변길이배열 n = 10; int a[n]; 플렉시블배열멤버 ( 뒤에설명 ) struct s{ int num; int a[]; struct s d1 = malloc(sizeof(struct s) + 40); 89

91 교재외자료 스택 선형연결리스트로구현 선형연결리스트로구현한스택 st ack el em cnt dat a t op stack cnt top elem NULL data dat a data dat a NULL data 90

92 교재외자료 스택구현 stack.h #include <stdio.h> #include <stdlib.h> #define EMPTY 0 #define FULL typedef char data; typedef enum {false, true boolean; struct elem { // element on the stack data d; struct elem *next; ; 91

93 교재외자료 스택구현 stack.h typedef struct elem elem; struct stack { int cnt; // a count of the elements elem *top; // ptr to the top element ; typedef struct stack stack; void initialize(stack *stk); void push(data d, stack *stk); data pop(stack *stk); data top(stack *stk); boolean empty(const stack *stk); boolean full(const stack *stk); 92

94 교재외자료 #include "stack.h" 스택구현 - 함수 void initialize(stack *stk){ stk -> cnt = 0; stk -> top = NULL; void push(data d, stack *stk){ elem *p; p = malloc(sizeof(elem)); p -> d = d; p -> next = stk -> top; stk -> top = p; stk -> cnt++; 93

95 교재외자료 스택구현 - 함수 data pop(stack *stk){ data d; elem *p; d = stk -> top -> d; p = stk -> top; stk -> top = stk -> top -> next; stk -> cnt --; free(p); return d; 94

96 교재외자료 스택구현 - 함수 data top(stack *stk){ return (stk -> top -> d); boolean empty(const stack *stk){ return ((boolean) (stk -> cnt == EMPTY)); boolean full(const stack *stk){ return ((boolean) (stk -> cnt == FULL)); 95

97 교재외자료 스택 - 검사프로그램 #include "stack.h" int main(void){ char str[ ] = "My name is joanna Kelly!"; int i; stack s; initialize(&s); // initialize the stack printf(" In the string: %s\n", str); for (i = 0; str[i]!= '\0'; ++i) if (!full(&s)) push(str[i], &s); // push a char on the stack printf("from the stack: "); while (!empty(&s)) putchar(pop(&s)); // pop a char off the stack putchar('\n'); return 0; 96

98 교재외자료 스택 - 검사프로그램 출력 In the string : My name is Jonna Kelly! From the stack :!yllek annoj si eman ym 97

99 플렉시블배열멤버 두개이상의멤버를갖는구조체형정의에서크기가명시되지않은마지막배열멤버 C99 예 struct subject { int num; int grade[]; ; 98

100 플렉시블배열멤버 플렉시블구조체의크기는플렉시블배열멤버를제외한크기임 플렉시블구조체변수를선언하면플렉시블배열멤버는메모리할당을받지않음 struct subject { int num; int grade[]; ; sizeof(struct subject) : 4 struct subject science; science.num = 10; // OK science.grade[0] = 95; // 오류 99

101 플렉시블배열멤버 사용하기전에플렉시블배열멤버를위한메모리공간을할당받아야함 사용예 struct subject *science_p; science_p = (struct subject *) malloc(sizeof(struct subject) + 40); // grade[] 를위해 40 바이트할당 int 원소 10 개 // 40 대신 sizeof(int) * 10 이더좋음 science_p -> num = 20; science_p -> grade[4] = 85; // OK 100

102 플렉시블배열멤버 프로그램 typedef struct subject { int num; int grade[]; subject; int main(void){ int n, i, sum; subject *math_p; subject *c_p; printf(" 수학과목수강생수 : "); scanf("%d", &n); math_p = (subject *) malloc(sizeof(subject) + sizeof(int) * n); math_p -> num = n; printf(" 수학성적 %d 개를입력하세요.\n", math_p -> num); for (i = 0; i < math_p -> num; i++){ printf("%d 번째성적 : ", i); scanf("%d", math_p -> grade + i); 101

103 프로그램 플렉시블배열멤버 printf("c 과목수강생수 : "); scanf("%d", &n); c_p = (subject *) malloc(sizeof(subject) + sizeof(int) * n); c_p -> num = n; printf("c 성적 %d 개입력하세요.\n", c_p -> num); for (i = 0; i < c_p -> num; i++){ printf("%d 번째성적 : ", i); scanf("%d", c_p -> grade + i); printf("\n 수학성적 \n"); for (i = sum = 0; i < math_p -> num; i++){ printf("%d 번학생성적 : %d\n", i, math_p -> grade[i]); sum += math_p -> grade[i]; 102

104 프로그램 플렉시블배열멤버 printf(" 총점 : %d, 평균 : %.2f\n", sum, sum/(float)math_p -> num); printf("\nc 성적 \n"); for (i = sum = 0; i < c_p -> num; i++){ printf("%d 번학생성적 : %d\n", i, c_p -> grade[i]); sum += c_p -> grade[i]; printf(" 총점 : %d, 평균 : %.2f\n", sum, sum/(float)c_p -> num); return 0; 103

105 프로그램결과 수학과목수강생수 : 3 수학성적 3 개를입력하세요. 0 번째성적 : 78 1 번째성적 : 88 2 번째성적 : 92 C 과목수강생수 : 5 C 성적 5 개입력하세요. 0 번째성적 : 87 1 번째성적 : 90 2 번째성적 : 95 3 번째성적 : 71 4 번째성적 : 90 수학성적 0 번학생성적 : 78 1 번학생성적 : 88 2 번학생성적 : 92 총점 : 258, 평균 : C 성적 0 번학생성적 : 87 1 번학생성적 : 90 2 번학생성적 : 95 3 번학생성적 : 71 4 번학생성적 : 90 총점 : 433, 평균 :

106 라이브러리 라이브러리목록은 ar 명령어로볼수있음 ar t /lib/libc.a libc.a : 표준 C 라이브러리 /lib : 디폴트라이브러리디렉터리 프로그래머는자신의라이브러리를만들수있음 105

107 라이브러리만들기 라이브러리 함수 13.2(iszero.c) int is_zero(int num) { if (num) return 0; return 1; 1..o 파일만들기 $ gcc -c iszero.c 2. 라이브러리만들기 $ ar ruv iszero.a iszero.o $ ranlib iszero.a 106

108 프로그램 (main.c) #include <stdio.h> 라이브러리 int quotient, rem; // 전역변수선언 int divide(int, int); int main(void){ int a = 10, b = 3; if (divide(a, b)) printf("0 으로나눌수없습니다.\n"); else printf("%d / %d : 몫은 %d 이고나머지는 %d 입니다.\n", a, b, quotient, rem); return 0; 107

109 라이브러리 프로그램 (divide.c) int divide(int dividend, int divisor){ extern int quotient, rem; // 전역변수참조선언 if (is_zero(divisor)) return -1; quotient = dividend / divisor; rem = dividend % divisor; return 0; 108

110 라이브러리 사용자라이브러리를사용할경우컴파일할때사용자라이브러리를명시하면됨 $ gcc o divide main.c divide.c iszero.a main.c 와 divide.c 에서호출하는함수가 main.c 와 divide.c 에정의되어있지않으면 iszero.a 라이브러리를먼저검색하고없으면표준라이브러리에서검색함 109

111 신호 프로세스 : 실행중인프로그램 신호는프로세스에게외부환경의변화나오류를전달할때사용 일반적으로신호는비정상적인사건에의해생성되고프로그램에게전달되어프로그램을종료하게함 0 으로나누기 잘못된메모리참조 control-c 110

112 신호 <signal.h> 에신호와관련된매크로와함수정의 많이다루어지는신호관련매크로 #define SIGINT 2 // 인터럽트 #define SIGILL 4 // 비정상연산 #define SIGFPE 8 // 부동소수점예외 #define SIGKILL 9 // KILL #define SIGSEGV 11 // 세그먼트위반 #define SIGALRM 14 // 알람클락 111

113 신호 신호를다루는함수 signal() void (*signal(int sig, void (*func)(int)))(int); sig : 신호종류 func : 신호처리기 sig 와 func() 함수를연결하는함수 sig 신호가발생하면 func() 가실행됨 예 signal(2, func); 2 번신호 (control-c) 가발생하면프로그램이종료되는것이아니라 func() 함수가호출됨 보통숫자대신매크로를사용함 signal(sigint, func); 112

114 신호 프로그램 #include <stdio.h> #include <stdlib.h> #include <signal.h> void cntrl_c_handler(int sig){ char answer[4]; printf("%d 번신호가발생했습니다.\n", sig); printf(" 계속하시겠습니까? (y/n) "); scanf("%s", answer); if ((answer[0] == 'n') (answer[0] == 'N')) exit(1); 113

115 신호 프로그램 int main(void){ int i = 0; signal(sigint, cntrl_c_handler); while (1) { printf("%4d", rand() % 1000); if ((++i % 5) == 0) { i = 0; putchar('\n'); return 0; // SIGINT : control-c 114

116 프로그램결과 <control-c> 2 번신호가발생했습니다. 계속하시겠습니까? (y/n) y <control-c> 2 번신호가발생했습니다. 계속하시겠습니까? (y/n) n $ 115

117 신호 신호처리기로사용할수있는매크로 #define SIG_DFL ((void (*)(int)) 0) // 신호가발생했을때디폴트행동을취하게함 #define SIG_IGN ((void (*)(int)) 1) // 신호가발생했을때무시하게함 예 signal(sigint, SIG_IGN); 인터럽트가발생하면무시함 signal(sigint, SIG_DFL); 인터럽트가발생하면디폴트동작을다시하게함 인터럽트를위한디폴트동작은프로세스종료임 116

118 신호 신호중 9 번신호 (SIGKILL) 는사용자가임의로다룰수없음 signal() 함수로 SIGKILL 신호와사용자신호처리기를연관시켜도 SIGKILL 신호가발생하면그프로세스는무조건종료함 117

ABC 10장

ABC 10장 10 장구조체와리스트처리 0 자기참조구조체 자기참조구조체는자기자신의형을참조하는포인터멤버를가짐 이러한자료구조를동적자료구조라고함 배열이나단순변수는일반적으로블록을진입할때메모리할당을받지만, 동적자료구조는기억장소관리루틴을사용하여명시적으로메모리할당을요구함 10-1 자기참조구조체 10-2 자기참조구조체 예제 struct list { int struct list a; data;

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2 제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.

More information

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7> 제14장 동적 메모리 할당 Dynamic Allocation void * malloc(sizeof(char)*256) void * calloc(sizeof(char), 256) void * realloc(void *, size_t); Self-Referece NODE struct selfref { int n; struct selfref *next; }; Linked

More information

untitled

untitled int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

ABC 9장

ABC 9장 9 장구조체와공용체 0 구조체와공용체 C 언어의확장방법 - 매크로와라이브러리 - 사용자정의형 ( 배열, 구조체, 공용체 ) 9-1 구조체 서로다른형의변수들을하나로묶어주는방법 예제 - 카드 9-2 구조체 예제 - 카드 - 각카드는고유의무늬와숫자를가짐 구조체를사용하여표현하면효율적 - 카드를위한구조체선언 struct card { int pips; char suit;

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에

More information

untitled

untitled while do-while for break continue while( ) ; #include 0 i int main(void) int meter; int i = 0; while(i < 3) meter = i * 1609; printf("%d %d \n", i, meter); i++; return 0; i i< 3 () 0 (1)

More information

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE> 쉽게풀어쓴 C 언어 Express 제 17 장동적메모리와연결리스트 이번장에서학습할내용 동적메모리할당의이해 동적메모리할당관련함수 연결리스트 동적메모리할당에대한개념을이해하고응용으로연결리스트를학습합니다. 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것

More information

Microsoft PowerPoint - chap09.ppt

Microsoft PowerPoint - chap09.ppt 2010-1 학기프로그래밍입문 (1) 9 장구조체와공용체 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 0 C 언어의확장방법 - 매크로와라이브러리 구조체와공용체 - 사용자정의형 ( 배열, 구조체, 공용체 ) A Book on C, 4ed. 9-1 구조체 서로다른형의변수들을하나로묶어주는방법 예제 - 카드 A Book on C,

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

C 언어 프로그래밊 과제 풀이

C 언어 프로그래밊 과제 풀이 과제풀이 (1) 홀수 / 짝수판정 (1) /* 20094123 홍길동 20100324 */ /* even_or_odd.c */ /* 정수를입력받아홀수인지짝수인지판정하는프로그램 */ int number; printf(" 정수를입력하시오 => "); scanf("%d", &number); 확인 주석문 가필요한이유 printf 와 scanf 쌍

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap12-고급기능.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 가 제공하는 매크로 상수와 매크로

More information

ABC 6장

ABC 6장 8 장포인터 김명호 내용 포인터소개 주소연산자 & 포인터변수 역참조연산자 * void 포인터 포인터연산 함수와포인터 메모리사상함수 동적메모리할당 포인터배열 const, restrict 함수포인터 1 포인터 지금까지할당받은메모리공간은변수이름으로접근했었음 예 int a, b, c; a = b + c; // a, b, c 를위한메모리할당 // a, b, c 이름으로메모리접근

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 C 기초특강 종합과제 과제내용 구조체를이용하여교과목이름과코드를파일로부터입력받아관리 구조체를이용하여학생들의이름, 학번과이수한교과목의코드와점수를파일로부터입력 학생개인별총점, 평균계산 교과목별이수학생수, 총점및평균을계산 결과를파일에저장하는프로그램을작성 2 Makefile OBJS = score_main.o score_input.o score_calc.o score_print.o

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

More information

ABC 11장

ABC 11장 12 장고급응용 0 수행중인프로그램 프로세스 모든프로세스는유일한프로세스식별번호 (PID) 를가짐 유닉스에서는 ps 명령을사용하여프로세스목록을볼수있음 12-1 프로세스 $ ps -aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND blufox 17725 34.0 1.6 146 105 i2 R 15:13 0:00

More information

untitled

untitled if( ) ; if( sales > 2000 ) bonus = 200; if( score >= 60 ) printf(".\n"); if( height >= 130 && age >= 10 ) printf(".\n"); if ( temperature < 0 ) printf(".\n"); // printf(" %.\n \n", temperature); // if(

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

기초컴퓨터프로그래밍

기초컴퓨터프로그래밍 구조체 #include int main() { } printf("structure\n"); printf("instructor: Keon Myung Lee\n"); return 0; 내용 구조체 (struct) Typedef 공용체 (union) 열거형 (enum) 구조체 구조체 (structure) 어떤대상을표현하는서로연관된항목 ( 변수 )

More information

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문 1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문 1. 표준입출력 표준입출력 입력 : 키보드, scanf 함수 출력 : 모니터, printf 함수문제 : 정수값 2개를입력받고두값사이의값들을더하여출력하라. #include int main(void) int Num1, Num2; int

More information

Chapter 4. LISTS

Chapter 4. LISTS 6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립

More information

03장.스택.key

03장.스택.key ---------------- DATA STRUCTURES USING C ---------------- 03CHAPTER 1 ? (stack): (LIFO:Last-In First-Out) 2 : top : ( index -1 ),,, 3 : ( ) ( ) -> ->. ->.... 4 Stack ADT : (LIFO) : init():. is_empty():

More information

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - chap04-연산자.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); } 1 학습목표 수식의 개념과 연산자, 피연산자에 대해서 알아본다. C의 를 알아본다. 연산자의 우선 순위와 결합 방향에

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])

More information

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap05-제어문.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 08 함수 01 함수의개요 02 함수사용하기 03 함수와배열 04 재귀함수 함수의필요성을인식한다. 함수를정의, 선언, 호출하는방법을알아본다. 배열을함수의인자로전달하는방법과사용시장점을알아본다. 재귀호출로해결할수있는문제의특징과해결방법을알아본다. 1.1 함수의정의와기능 함수 (function) 특별한기능을수행하는것 여러가지함수의예 Page 4 1.2

More information

歯9장.PDF

歯9장.PDF 9 Hello!! C printf() scanf() getchar() putchar() gets() puts() fopen() fclose() fprintf() fscant() fgetc() fputs() fgets() gputs() fread() fwrite() fseek() ftell() I/O 2 (stream) C (text stream) : `/n'

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 #define _CRT_SECURE_NO_WARNINGS #include #include main() { char ch; printf(" 문자 1개를입력하시오 : "); scanf("%c", &ch); if (isalpha(ch))

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 쉽게풀어쓴 C 언어 Express 제 9 장함수와변수 이번장에서학습할내용 변수의속성 전역, 지역변수 자동변수와정적변수 재귀호출 이번장에서는함수와변수와의관계를집중적으로살펴볼것이다. 또한함수가자기자신을호출하는재귀호출에대하여살펴본다. 변수의속성 변수의속성 : 이름, 타입, 크기, 값 + 범위, 생존시간, 연결 범위 (scope) : 변수가사용가능한범위, 가시성생존시간

More information

중간고사

중간고사 중간고사 예제 1 사용자로부터받은두개의숫자 x, y 중에서큰수를찾는알고리즘을의사코드로작성하시오. Step 1: Input x, y Step 2: if (x > y) then MAX

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

컴파일러

컴파일러 YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",

More information

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - chap-11.pptx 쉽게풀어쓴 C 언어 Express 제 11 장포인터 컴퓨터프로그래밍기초 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 컴퓨터프로그래밍기초 2 포인터란? 포인터 (pointer): 주소를가지고있는변수 컴퓨터프로그래밍기초 3 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다.

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

5.스택(강의자료).key

5.스택(강의자료).key CHP 5: https://www.youtube.com/watch?v=ns-r91557ds ? (stack): (LIFO:Last-In First-Out):. D C B C B C B C B (element) C (top) B (bottom) (DT) : n element : create() ::=. is_empty(s) ::=. is_full(s) ::=.

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

untitled

untitled 자료형 기본자료형 : char, int, float, double 등 파생자료형 : 배열, 열거형, 구조체, 공용체 vs struct 구조체 _ 태그 _ 이름 자료형멤버 _ 이름 ; 자료형멤버 _ 이름 ;... ; struct student int number; // char name[10]; // double height; // ; // x값과 y값으로이루어지는화면의좌표

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

Microsoft PowerPoint - ch08 - 구조체 (structure) am0845

Microsoft PowerPoint - ch08 - 구조체 (structure) am0845 2015-1 프로그래밍언어 8. 구조체 (Structure) 2015 년 4 월 11 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 구조체란무엇인가? 구조체의선언, 초기화, 사용

More information

C 프로그래밊 개요

C 프로그래밊 개요 함수 (2) 2009 년 9 월 24 일 김경중 공지사항 10 월 1 일목요일수업휴강 숙제 #1 마감 : 10 월 6 일화요일 기초 함수를만들어라! 입력 함수 ( 기능수행 ) 반환 사용자정의함수 정의 : 사용자가자신의목적에따라직접작성한함수 함수의원형 (Function Prototype) + 함수의본체 (Function Body) : 함수의원형은함수에대한기본적정보만을포함

More information

PowerPoint Template

PowerPoint Template 18 동적할당과고급처리 인터넷정보과 1 2/19 동적할당 목적 다음과같은일반변수의선언과사용은변수를정적 (static) 으로사용 int a = 10; 메모리사용예측이부정확한경우는충분한메모리를미리확보해야하는것은비효율 동적 (dynamic) 메모리할당 (Memory Allocation) 동적인메모리할당을위해서는함수 malloc() 을이용, 메모리공간을확보 함수 malloc()

More information

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4 Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x

More information

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - Chapter_08.pptx 프로그래밍 1 1 Chapter 8. Pointers May, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 포인터의개념 (1/6) 2 포인터란 : 다른객체를가리키는변수 객체의메모리주소를저장하는변수 기호적방식 (symbolic way) 으로주소사용 포인터와관련된연산자

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터(강의) 쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 쉽게풀어쓴 C 언어 Express 제 9 장함수와변수 이번장에서학습할내용 반복의개념이해 변수의속성 전역, 지역변수 자동변수와정적변수 재귀호출 이번장에서는함수와변수와의관계를집중적으로살펴볼것이다. 또한함수가자기자신을호출하는재귀호출에대하여살펴본다. 변수의속성 변수의속성 : 이름, 타입, 크기, 값 + 범위, 생존시간, 연결 범위 (scope) : 변수가사용가능한범위,

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

02장.배열과 클래스

02장.배열과 클래스 ---------------- DATA STRUCTURES USING C ---------------- CHAPTER 배열과구조체 1/20 많은자료의처리? 배열 (array), 구조체 (struct) 성적처리프로그램에서 45 명의성적을저장하는방법 주소록프로그램에서친구들의다양한정보 ( 이름, 전화번호, 주소, 이메일등 ) 를통합하여저장하는방법 홍길동 이름 :

More information

슬라이드 1

슬라이드 1 9 장구조체와공용체 박종혁교수 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr SeoulTech 2012-1 st 프로그래밍입문 (1) 2 구조체와공용체 C 언어의확장방법 매크로와라이브러리 사용자정의형 ( 배열, 구조체, 공용체 ) 3 구조체 서로다른형의변수들을하나로묶어주는방법 예제 - 카드 4 구조체 예제 -

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 3 장 : 변수와데이터형 2012 년 이은주 학습목표 변수와상수의개념에대해알아본다. 리터럴상수, 매크로상수, const 변수에대해알아본 다. C 언어의데이터형에대해알아본다. 2 목차 변수와상수 변수 상수 데이터형 문자형 정수형 실수형 sizeof 연산자 3 변수와상수 변수 : 값이변경될수있는데이터 상수 : 값이변경될수없는데이터

More information

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 11 장포인터 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습합니다.

More information

<4D F736F F F696E74202D20C1A639C0E520C7D4BCF6BFCDBAAFBCF6>

<4D F736F F F696E74202D20C1A639C0E520C7D4BCF6BFCDBAAFBCF6> 쉽게풀어쓴 C 언어 Express 제 9 장함수와변수 이번장에서학습할내용 반복의개념이해 변수의속성 전역, 지역변수 자동변수와정적변수 재귀호출 이번장에서는함수와변수와의관계를집중적으로살펴볼것이다. 또한함수가자기자신을호출하는재귀호출에대하여살펴본다. 변수의속성 변수의속성 : 이름, 타입, 크기, 값 + 범위, 생존시간, 연결 범위 (scope) : 변수가사용가능한범위,

More information

chap01_time_complexity.key

chap01_time_complexity.key 1 : (resource),,, 2 (time complexity),,, (worst-case analysis) (average-case analysis) 3 (Asymptotic) n growth rate Θ-, Ο- ( ) 4 : n data, n/2. int sample( int data[], int n ) { int k = n/2 ; return data[k]

More information

C 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - 제11장 포인터 쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조

More information

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers C Programming 포인터 (Pointers) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 포인터의이해 다양한포인터 2 포인터의이해 포인터의이해 포인터변수선언및초기화 포인터연산 다양한포인터 3 주소연산자 ( & ) 포인터의이해 (1/4) 변수와배열원소에만적용한다. 산술식이나상수에는주소연산자를사용할수없다. 레지스터변수또한주소연산자를사용할수없다.

More information

KNK_C_05_Pointers_Arrays_structures_summary_v02

KNK_C_05_Pointers_Arrays_structures_summary_v02 Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",

More information

C언어 및 실습 C Language and Practice

C언어 및 실습  C Language and Practice C언어 및 실습 C Language and Practice Chap. 2 : 변수의 영역 동국대학교 멀티미디어공학과 Young-Sik Jeong C 언어메모리구조 지역변수들이저장되는곳. 정확히는지역변수와그에따른환경이같이저장된다. 복귀주소와호출함수의환경이저장된다. 동적기억장소를위한공간. 프로그램이실행되는중간에필요에의해서할당받는메모리영역을통칭한다. 크기가정해져있지않고유동적이다.

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

More information

untitled

untitled 1 hamks@dongguk.ac.kr (goal) (abstraction), (modularity), (interface) (efficient) (robust) C Unix C Unix (operating system) (network) (compiler) (machine architecture) 1 2 3 4 5 6 7 8 9 10 ANSI C Systems

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf(int, dou 2 장더나은 C 로서의 C++ (1) 표준입출력네임스페이스 ( 고전 C++ 와표준 C++) 함수오버로딩디폴트매개변수 new와 delete bool 자료형 C++ is not C C++ 프로그래밍입문 1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 C 언어포인터정복하기 16 강. 포인터로자료구조화하기 TAE-HYONG KIM COMPUTER ENG, KIT 2 학습내용 구조체멤버와구조체포인터멤버 다른구조체 ( 변수 ) 를가리키는구조체 ( 변수 ) 연결된리스트 의구성및관리 포인터로 연결된리스트 탐색하기 3 중첩구조체에자료저장하기 중첩된구조체변수에값저장하기 struct person { char PRID[15];

More information

ABC 2장

ABC 2장 3 장 C 프로그램을이루는구성요소 김명호 내용 주석문 토큰 키워드 식별자 상수 문자열상수 구두자 1 구문 Syntax 올바른프로그램을만들수있게하는규칙 컴파일러 C 프로그램이구문에맞는지검사 오류가있다면, 오류메시지출력 오류가없다면, 목적코드생성 전처리기 컴파일러이전에호출 2 컴파일러 컴파일과정 C 프로그램 토큰으로분리 토큰을목적코드로변환 토큰종류 : 키워드,

More information

03_queue

03_queue Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,

More information

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor 19. 전처리와분할컴파일 순천향대학교컴퓨터학부이상정 1 학습내용 전처리명령어 #include #define 기호상수 const 분할컴파일 순천향대학교컴퓨터학부이상정 2 전처리과정 전처리 (preprocessor) 전처리명령어는 # 기호로시작 #incldue #define 순천향대학교컴퓨터학부이상정 3 #include (1) 지정된파일을프로그램에삽입 꺽쇠괄호는포함할파일을컴파일러에설정되어있는특정디렉토리에서검색

More information

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

int main(void) int a; int b; a=3; b=a+5; printf(a : %d \n, a); printf(b : %d \n, b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf( a : %x \ ? 1 int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \n", &a); printf(" b : %x \n", &b); * : 12ff60,

More information

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를 리스트에대한설명중틀린것은 구조체도리스트의요소가될수있다 리스트의요소간에는순서가있다 리스트는여러가지방법으로구현될수있다 리스트는집합과동일하다 다음은순차적표현과연결된표현을비교한것이다 설명이틀린것은 연결된표현은포인터를가지고있어상대적으로크기가작아진다 연결된표현은삽입이용이하다 순차적표현은연결된표현보다액세스시간이많이걸린다 연결된표현으로작성된리스트를 개로분리하기가쉽다 다음은연결리스트에서있을수있는여러가지경우를설명했는데잘못된항목은

More information