Download presentation
Presentation is loading. Please wait.
Published by근석 오 Modified 6년 전
2
9장. C 언어의 핵심! 함수
3
9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1
4
함수를 정의하는 이유 4가지 형태의 함수 9-1 함수의 정의와 선언 모듈화에 의한 프로그램의 질 향상이 가능
9-1 함수의 정의와 선언 함수를 정의하는 이유 모듈화에 의한 프로그램의 질 향상이 가능 유지 보수 및 확장의 용이성 문제 해결의 용이성 : "Divide and Conquer!" 4가지 형태의 함수 전달 인자 有, 반환 값 有 전달 인자 有, 반환 값 無 전달 인자 無, 반환 값 有 전달 인자 無, 반환 값 無
5
9-1 함수의 정의와 선언 전달 인자와 반환 값, 둘 다 있는 함수 그림 9-2 int Add(int i, int j) {
9-1 함수의 정의와 선언 전달 인자와 반환 값, 둘 다 있는 함수 int Add(int i, int j) { int result = i+j; return result; } 그림 9-2
6
9-1 함수의 정의와 선언 함수 호출 과정의 이해 그림 9-3 #include <stdio.h>
9-1 함수의 정의와 선언 함수 호출 과정의 이해 #include <stdio.h> int Add(int i, int j) { int result = i + j; return result; } int main(void) int d; d = Add(3, 4); printf("%d \n", d); return 0; 그림 9-3
7
9-1 함수의 정의와 선언 다양한 형태의 함수 void Result_Print(int val) {
9-1 함수의 정의와 선언 다양한 형태의 함수 void Result_Print(int val) { printf("덧셈에 대한 결과 : %d \n", val); printf("****** END ******** \n"); } int Input(void) { int input; scanf("%d", &input); return input; } void Intro(void) { printf("****** START ****** \n"); printf("두개의 정수 입력 : "); }
8
9-1 함수의 정의와 선언 함수 선언의 필요성 컴파일러의 특성상, 함수는 호출되기 전에 정의되어야 한다. 그림 9-4
9
9-1 함수의 정의와 선언 함수 선언의 의미 이후에 정의될 함수에 대한 정보 제공
9-1 함수의 정의와 선언 함수 선언의 의미 이후에 정의될 함수에 대한 정보 제공 func_add.c, large_number.c 그림 9-5
10
9-2 변수의 범위(scope) 변수의 특성에 따른 분류 지역 변수(Local Variable)
중 괄호 내에 선언되는 변수 전역 변수(Global Variable) 함수 내에 선언되지 않는 변수 정적 변수(Static Variable) 함수 내부, 외부 모두 선언 가능 레지스터 변수(Register Variable) 선언에 제한이 많이 따름
11
9-2 변수의 범위(scope) 지역 변수의 접근 범위 지역 변수는 선언 된 함수 내에서만 접근 가능 범위 1 범위 2
int fct_one(void) { int one=0; return 0; } int fct_two(void) int two=0; 범위 1 범위 2
12
9-2 변수의 범위(scope) 지역 변수의 메모리상 존재 기간 1단계 그림 9-7 int fct_one(void) {
int one=10; return 0; } int fct_two(void) int one=20; int two=30; int main(void) int val=10; fct_one(); fct_two(); 1단계 그림 9-7
13
9-2 변수의 범위(scope) 지역 변수의 메모리상 존재 기간 2단계 3단계 그림 9-8 그림 9-9
14
9-2 변수의 범위(scope) 지역 변수의 메모리상 존재 기간 4단계 그림 9-10
15
9-2 변수의 범위(scope) 또 다른 형태의 지역 변수
while, for, if와 같은 문장에 의해 형성 되는 지역 내에서 선언되는 변수 예제 local_val1.c, local_val3.c 그림 9-11 그림 9-12
16
9-2 변수의 범위(scope) 지역 변수의 또 다른 특성 경우에 따라서 지역 변수는 다른 지역 변수를 가리기도 한다.
경우에 따라서 지역 변수는 다른 지역 변수를 가리기도 한다. /* local_val2.c */ #include <stdio.h> int main(void) { int val=0; if(1) //무조건 true val+=10; printf("%d", val); } return 0; 그림 9-14
17
9-2 변수의 범위(scope) 지역 변수와 매개 변수 매개 변수도 지역 변수의 일종이다. 그림 9-15
int fction (int a, int b) { a+=10; b+=20 return a+b; } 그림 9-15
18
9-2 변수의 범위(scope) 전역 변수 전역 변수의 또 다른 특징 프로그램 어디에서나 접근이 가능한 변수
특정 영역(함수, 반복문...)에 속하지 않는다. 프로그램이 종료될 때까지 존재 예제 glo_val1.c 전역 변수의 또 다른 특징 같은 이름의 지역 변수에 의해서 가려지기도 한다. glo_val2.c
19
9-2 변수의 범위(scope) static 변수 보다 빠르게! register 변수 함수 내부 및 외부에 선언 가능하다.
한번만 초기화된다 : 전역 변수의 특징 함수 내부에서 선언될 경우 함수 내에서만 접근이 가능하다 : 지역 변수의 특징 예제 static_val.c 보다 빠르게! register 변수 int main(void) { int a ; register int b; // 레지스터 변수 b 선언
20
/* static_val.c */ #include <stdio.h> void fct(void); int main(void) { int i; for(i=0; i<5; i++) fct(); return 0; } void fct(void) int val=0; // static int val=0; val++; printf("%d ",val);
21
9-3 재귀 함수 재귀 함수의 기본적 이해 자기 자신을 다시 호출하는 형태의 함수 /* recursive_basic.c */
9-3 재귀 함수 재귀 함수의 기본적 이해 자기 자신을 다시 호출하는 형태의 함수 /* recursive_basic.c */ #include <stdio.h> void Recursive(void) { printf("Recursive Call! \n"); // Recursive(); } int main(void) Recursive(); return 0;
22
9-3 재귀 함수 탈출 조건의 필요성 무한 재귀 호출을 피하기 위해서 그림 9-16
23
9-3 재귀 함수 탈출 조건의 이해 예제 recursive_basic2.c 참조 그림 9-17
24
/* recursive_basic2.c */
#include <stdio.h> void Recursive(int n) { printf("Recursive Call! \n"); if(n==1) return; Recursive(n-1); } int main(void) int a=2; Recursive(a); return 0;
25
9-3 재귀 함수 재귀 함수 Design 사례 팩토리얼(factorial) 계산을 위한 알고리즘 그림 9-18 그림 9-19
26
9-3 재귀 함수 재귀 함수 Design 사례 알고리즘을 코드로 옮기기 위한 pseudo code와 C 코드
9-3 재귀 함수 재귀 함수 Design 사례 알고리즘을 코드로 옮기기 위한 pseudo code와 C 코드 예제 rec_facto.c // 시작 조건 : n은 0 이상이다. 시작(START) : f(n) 호출 1. 만약에 n이 0이면 1을 반환 2. 그렇지 않다면 n f(n-1)을 반환. 끝(END) int f(int n) { if (n==0) return 1; else return n*f(n-1); }
Similar presentations