8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출
함수의 필요성과 프로그램 실행흐름 함수의 필요성과 프로그램 실행흐름
함수의 장점 02 함수의 장점 반복 실행해야 할 내용을 함수로 만들어 필요할 때마다 호출하여 사용할 수 있다. 프로그램이 모듈(Module)화 되므로 읽기 쉽고, 디버그 및 편집이 용이하다. 프로그램의 기능과 구조를 한 눈에 알아보기 쉽다. 다른 프로그램으로 재사용이 가능하다.
여러 가지 기능의 함수 03 여러 가지 기능의 함수
함수 정의와 함수 선언 04 함수 정의와 함수 선언
함수 호출과 프로그램의 진행 05 함수 호출과 프로그램의 진행
【예제 8-1】Ex1.c 02 함수의 선언과 호출 01 #include <stdio.h> 02 int SumTwo(int a, int b); 03 int main(void) 04 { 05 int x = 10, y = 5; 06 int value; 07 value = SumTwo(x, y); 08 09 printf("두 수의 합은 : %d\n", value); 10 return 0; 11 } 12 13 int SumTwo(int a, int b) 14 { 15 int result; 16 result = a + b; 17 return result; 18 } 표준입력 스트림
【예제 8-2】Ex2.c 02 함수의 선언과 호출 01 #include <stdio.h> 02 float Average(float x, float y); 03 int main(void) 04 { 05 float num1, num2, result; 06 printf("두 실수형을 입력하세요 : "); 07 scanf("%f %f", &num1, &num2); 08 result = Average(num1, num2); 09 printf("두 실수의 평균 : %f\n", result); 10 return 0; 11 } 표준입력 스트림 12 float Average(float x, float y) 13 { 14 float z; 15 z = (x + y) / 2; 16 return z; 17 }
【예제 8-3】Ex3.c 02 함수의 유용성 예제 01 #include <stdio.h> 02 int Intergral(int start, int end); 03 int main(void) 04 { 05 int result = 0, i; 06 07 printf("함수를 사용하지 않고 합을 구함\n"); 08 for(i=1; i<=10; i++) 09 result += i; 10 printf("1부터 10까지의 합은 %d이다.\n ", result); 11 result = 0; 12 for(i=7; i<=17; i++) 13 result += i; 14 printf("7부터 17까지의 합은 %d이다.\n ", result); 15 printf("*************************************\n"); 16 printf("함수를 사용하여 합을 구함\n"); 17 printf("1부터 10까지의 합은 %d이다.\n ", Intergral(1, 10)); 18 printf("7부터 17까지의 합은 %d이다.\n ", Intergral(7, 17)); 19 20 return 0; 21 } 22 int Intergral(int start, int end) 23 { 24 int sum = 0, i; 25 for( i = start; i <= end; i++) 26 sum += i; 27 return sum; 28 }
【예제 8-4】Ex4.c 02 함수의 유용성 예제 01 #include <stdio.h> 02 int SumTwo(int a, int b) 03 { 04 int result; 05 result = a + b; 06 return result; 07 } 08 int main(void) 09 { 10 int x = 10, y = 5; 11 int value; 12 value = SumTwo(x, y); 13 printf("두 수의 합은 : %d\n", value); 14 15 return 0; 16 } 표준입력 스트림
【예제 8-5】Ex5.c 02 함수의 다양한 예제 01 #include <stdio.h> 02 void upper_case(char ch); 03 int main(void) 04 { 05 char ch1, ch2; 06 while ( (ch1 = getchar() ) != EOF) { 07 upper_case(ch1); 08 } 09 return 0; 10 } 11 void upper_case(char ch) 12 { 13 char res; 14 if (ch >= 'a' && ch <= 'z') 15 res = ch-32; 16 else 17 res = ch; 18 putchar(res); 19}
배열을 인자로 하는 함수의 정의 및 호출 06 배열을 인자로 하는 함수의 정의 및 호출
【예제 8-6】Ex6.c 02 함수의 다양한 예제 01 #include <stdio.h> 02 int SumArray(int Array[ ], int Size); 03 int main(void) 04 { 05 int a[ ] = {10, 5, 15, 25, 7}; 06 int Sum; 07 Sum = SumArray(a, 5); 08 printf("배열 원소의 합은 : %d\n", Sum); 09 return 0; 10 } 11 int SumArray(int Array[ ], int Size) 12 { 13 int result = 0, i; 14 for(i=0; i<Size; i++) 15 result += Array[i]; 16 return result; 17} 표준입력 스트림
재귀함수와 재귀함수의 예 07 재귀함수와 재귀함수의 예 특정한 함수 내에서 자신의 함수를 다시 호출하는 것을 재귀호출이라 한다. 재귀호출은 해결하려고 하는 N개의 데이터를 가지는 문제가 N-1개의 문제를 해결하면 간단히 해결될 때 사용한다. int factorial(int n) { if(n <= 1) return 1; // 종료 조건 else return n * factorial(n-1); .............. }
【예제 8-7】Ex7.c 02 재귀 함수 예제 01 #include <stdio.h> 02 int factorial(int n); 03 int main(void) 04 { 05 int fact_num; 06 fact_num = factorial(10); 07 printf("10 팩토리얼 : %d\n", fact_num); 08 return 0; 09 } 10 int factorial(int n) 11 { 12 if (n <= 1) 13 return (1); 14 else 15 return (n * factorial(n-1)); 16 } 표준입력 스트림
【예제 8-8】Ex8.c 02 재귀 함수 예제 01 #include <stdio.h> 02 int sum(int a); 03 int main(void) 04 { 05 int input, s = 0; 06 printf("양의 정수를 입력하세요 : "); 07 scanf("%d", &input); 08 s = sum(input); 09 printf("재귀합수를 이용한 1부터 %d 까지의 합 = %d\n", input, s); 10 return 0; 11 } 12 int sum(int a) 13 { 14 if (a <= 1) 15 return 1; 16 else 17 return a + sum(a-1); 18 }