210 likes | 679 Views
Module 1. Module 2. Module 3. Module 4. Module 5. Module 6. 함수의 활용 - 프로그램의 모듈화. 수 천 , 수 만 라인의 대규모 프로그램을 하나의 단위로 모두 구현하기는 불가능하다 . 즉 프로그램을 쉽게 다룰 수 있고 개별적으로 구현 가능한 단위 ( 모듈 ) 로 나누어 작성한다 . 프로그램 모듈화 ( 조립식 설계 ) 프로그램을 여러 개의 모듈들로 분리 어느 하나의 모듈이 작성되기 전에 전체 프로그램의 설계가 가능함. taxes( ). net_pay( ).
E N D
Module 1 Module 2 Module 3 Module 4 Module 5 Module 6 함수의 활용 - 프로그램의 모듈화 • 수 천, 수 만 라인의 대규모 프로그램을 하나의 단위로 모두 구현하기는 불가능하다. • 즉 프로그램을 쉽게 다룰 수 있고 개별적으로 구현 가능한 단위(모듈)로 나누어 작성한다. • 프로그램 모듈화(조립식 설계) • 프로그램을 여러 개의 모듈들로 분리 • 어느 하나의 모듈이 작성되기 전에 전체 프로그램의 설계가 가능함 C Program-I Review
taxes( ) net_pay( ) gross_pay() output() C 언어의 모듈화 • 모듈화의 장점 • 코드의 재사용성이 높다. • 판독성이 높아진다. • 오류 수정이 쉽다. • 여러 프로그래머들의 협동작업이 가능하다. • C 언어에서는 각 모듈을 함수 형태로 구현한다. C Program-I Review
여러 개의 함수를 가진 프로그램 • 함수(Function)은 C 프로그램을 만드는 모듈이다. • 현재까지 프로그램 예제들은 오직 main() 함수만 포함하고 있었다.(main도 하나의 함수이다) • 일반적인 C 프로그램은 여러 개의 함수로 구성된다. • 예) int main(void) { … func1(); i = func2(); return 0; } void func1(void) { …….. } int func2(void) { …….. } C Program-I Review
함수의 호출 순서 • 하나의 프로그램에는 하나의 main() 함수가 존재한다. • 항상 main() 함수부터 시작하고, main()함수에서 끝난다. • 다른 함수를 호출하면 그 호출된 함수를 수행 • 호출된 함수의 수행이 끝나면, 다시 원래 함수(호출하였던)의 다음 문장으로 복귀 void func1(void) { printf(“like “); } void func2(void) { printf(“program“); func3(); } void func3(void) { printf(“ !!!!“); } #include <stdio.h> int main(void) { printf(“\n I “); func1(); printf(“ C “); func2(); return 0; } C Program-I Review
First Number Second Number a * b Result 함수의 인수(입력) 및 리턴 값(출력) • 함수의 인수 전달 및 리턴 값 • 호출하는 문장은 호출되는 함수에게 인수(함수의 입력)를 전달할 수 있다. • 호출되는 함수(피함수)는 자신을 호출한 문장에게 값을 리턴(함수의 출력)할 수 있다. -> 함수의 수행 결과가 이 리턴 값으로 치환된다. • 참고: 인수를 매개변수라고도 부른다. • 함수의 예 ……. num = mul(2,3); ……... int mul(int a, int b) { int c; c = a * b; return c; } C Program-I Review
함수의 구성 • 함수 선언 (function prototype) • 변수 선언과 흡사하게 앞으로 이 함수를 사용할 것임을 알려주는 역할 • mul() 함수의 호출 • 함수의 인수(입력)로 i, j 값을 넘겨줌 • 함수의 리턴 값을 k에 대입 • 함수 몸체(정의) • a <- main()의 i 값(10) • b <- main()의 j 값(20) • c 값을 함수의 수행 결과로 리턴, 결국 main()의 k에는 200이 대입된다. #include <stdio.h> int mul(int , int ); int main(void) { int i=10, j=20, k; k = mul(i, j); printf(“\n k = %d”, k); return 0; } int mul(int a, int b) { int c; c = a * b; return c; } C Program-I Review
함수의 사용법(1) • 함수 선언문(함수 원형(prototype)) • 변수와 동일하게 앞으로 이런 함수를 사용할 것임을 알려줌 • int mul(int, int); • int mul(int a, int b); 라고 선언해도 됨(변수 명까지 써도 상관 없음) • void 라는 특수 데이터 형은 리턴 값이나 인수가 없음을 나타냄 • 예) void test1(int, int); -> 두개의 int형 인수를 전달 받으나, 리턴값은 없음 int test2(void) -> int형 값은 리턴하나, 인수는 없음. • 함수 리턴 값의 데이터 형(data type) • 함수의 이름(변수의 이름과 동일한 규칙으로 작성) • 첫번째 인수(입력)의 데이터 형 • 두번째 인수의 데이터 형 C Program-I Review
함수의 사용법(2) • 함수의 정의 부분(몸체) • main() 함수와 동일하게 변수 선언 및, 연산, 제어 등을 수행할 수 있다. • 참고: 하나의 함수 내에서 선언된 변수는 그 함수 내에서만 유효하다. • void 형이 아닌 함수의 경우에는 return 문을 사용하여 함수의 결과 값을 리턴 해야 한다. • return a; 또는 return(a); • C 언어에서는 오직 하나의 값만 리턴 할 수 있다. • main() 도 하나의 함수이다. • main() 함수는 운영체제(명령행 라인)로부터 인수를 넘겨 받을 수 있다. (나중에 배울 것임) • main() 함수의 리턴 형이 int로 선언되었으므로, main() 함수의 끝에 return 0; 수행한다.(이 값도 운영체제로 전달됨) C Program-I Review
함수 작성 예(두수의 평균값) #include <stdio.h> float ave(int a, int b); int main(void) { int i, j; float ret; scanf(“%d %d”, &i, &j); ret = ave(i, j); printf(“\n ret = %f”, ret); return 0; } float ave(int a, int b) { float c; c = (a+b)/2.0; return c; } C Program-I Review
함수 작성 예(소수 검사) #include <stdio.h> int is_prime(int a); int main(void) { int i; float ret; for(i=1; i<=100; i++) { if(is_prime(i)) printf(“ %d”, i); } return 0; } int is_prime(int a) { int isprime=1, b; for(b=2; b<a; b++) { if(a%b==0) isprime=0; } return isprime; } C Program-I Review
실습 예제 • Factorial 을 구하는 사용자 정의 함수,int fact(int)를 작성하시오. (n! = n*(n-1)*(n-2) … 2 * 1) • 앞에 작성한 factorial 함수를 활용하여 순열(permutation)과 조합(combination) 함수를 작성하여 아래의 예와 같이 실행시키시오. (단 nPr = n! / (n-r) !, nCr = n! / r!(n-r)!) 6 P 3 (입력) => 120 6 C 2 (입력) => 15 C Program-I Review
표준(라이브러리) 함수 • 사용자 정의 함수 • 사용자가 필요에 의해 직접 작성하여 활용하는 함수 • 앞장에서 작성한 모든 함수들은 사용자 정의 함수이다. • 표준 함수 • 국제적으로 정해진 표준에 근거하여, C 컴파일러 제작회사에서 미리 만들어 제공하는 함수 • 내장 함수 또는 라이브러리(library) 함수라고도 한다. • C 언어에는 사용 빈도가 높은 함수들을 표준으로 정의하여 어떤 컴파일러 회사에서도 동일하게 제공한다. • 우리가 사용했던 scanf(), printf()도 표준함수에 해당된다. • 사용자는 표준함수의 기능이 어떻게 구현되어 있는지 알 필요 없이 함수 사용법(인수, 리턴 형)에 맞추어 사용하면 된다. C Program-I Review
표준 함수 사용법 • 사용하고자 하는 표준 함수의 원형(선언문)이 들어 있는 헤더 파일(xxx.h)을 #include 문을 사용하여 프로그램 내에 삽입한다. • 인수와 리턴 형에 맞게 그 표준 함수를 호출한다. • 예 #include <stdio.h> int main(void) { …….. …….. printf(“\Welcome to C world!!); } 헤더 파일 표준함수 호출 C Program-I Review
표준 함수 종류 • 자세한 함수 사용법은 교재나 C 라이브러리 함수 온라인 도움말을 참조하기 바람. C Program-I Review
C 프로그램 컴파일단계 Editor S/W (메모장, 문서편집기) …….. a = 1; b = 2; c = a+b; …….. 편집(Editing) 소스파일 (Test.c) 에러발생 번역(Compile) Compiler S/W (visual-c, cc, gcc) 01001000101 11001101000 10110010001 …… 실행파일 (Test.obj) 에러(bug) 발생 각종 라이브러리 (xxx.lib) 링크(Link) 실행(Execution) C Program-I Review
표준함수 사용 예 printf() 함수 호출 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i; srand((unsigned)time(0)); for( i=1; i<=10; i++) printf(“ %d”, rand()); for( i=1; i<=10; i++) printf(“ %d”, rand()%100); return 0; } rand (), srand () 함수 호출 time() 함수 호출 rand ()을 위한 초기화, 현재 시스템 시간을 이용하여 난수를 발생시킬때 마다 서로 다른 랜덤 패턴이 발생하도록 함. 0 ~ RAND_MAX(32767) 사이의 난수를 10개 발생 0 ~ 99 사이의 난수를 10개 발생 C Program-I Review
실습 예제 • 숫자 맞추기 게임 • 앞의 난수 발생 예를 참조하여 0~99 사이의 난수를 하나 발생시켜 사용자가 알아 맞추도록 하시오. • 사용자가 입력한 수가 틀릴 때 마다 난수로 발생시킨 값이 입력한 수보다 큰지 작은지 알려주시오. • 사용자가 맞추었을 경우, 총 몇 번 만에 맞추었는지 알려주시오. • 난수 평균 출력 프로그램 • 사용자에게 난수 발생 횟수를 입력 받음 • 사용자의 입력한 횟수 만큼 1~10 사이의 난수(1, 10 포함)를 발생한 후, 그 평균 값을 출력 • 위의 동작을 계산 반복하는데, 사용자가 입력한 난수 발생 횟수가 0이면 프로그램 종료 C Program-I Review
함수의 장점(복습) • 코드의 재 사용성이 높아진다. • 기존의 작성했던 함수 등을 다시 가져와서 사용하거나, 조금 수정해서 사용할 수 있다. • 판독성이 높아진다. • main() 함수에 모든 코드를 넣지않고, 전체 코드를 여러 개의 함수로 분리함으로써 판독성이 높아짐. • 오류 수정이 쉬워진다. • 각 함수 별로 디버깅이 가능해짐 • 협동 작업이 가능해진다. • 전체 프로그램을 여러 개의 모듈(함수들)로 분리하여 각각의 프로그래머가 각 모듈을 구현할 수 있다. • 코드가 적어진다. • 매번 같은 내용의 코드가 빈번히 사용할 경우, 그 코드를 여러 번 작성할 필요 없이 함수로 구현하여, 필요할 때마다 호출함. C Program-I Review