800 likes | 962 Views
제 7 장. 함 수. 이번 장에서 학습할 내용. 규모가 큰 프로그램은 전체 문제를 보다 단순하고 이해하기 쉬운 함수로 나누어서 프로그램을 작성하여야 한다. 모듈화 함수의 개념 , 역할 함수 작성 방법 반환값 인수 전달 함수를 사용하는 이유. 함수가 필요한 이유. 같은 작업이 되풀이 되는 경우. 함수가 있다면. 함수는 한번 작성되면 여러 번 사용 ( 호출 ) 이 가능하다. 모듈의 개념. 모듈 (module ) 독립되어 있는 프로그램의 일부분 모듈러 프로그래밍
E N D
제 7 장 함 수
이번 장에서 학습할 내용 규모가 큰 프로그램은 전체 문제를 보다 단순하고 이해하기 쉬운 함수로 나누어서 프로그램을 작성하여야 한다. • 모듈화 • 함수의 개념, 역할 • 함수 작성 방법 • 반환값 • 인수 전달 • 함수를 사용하는 이유
함수가 필요한 이유 • 같은 작업이 되풀이 되는 경우
함수가 있다면 • 함수는 한번 작성되면 여러 번 사용(호출)이 가능하다.
모듈의 개념 • 모듈(module) • 독립되어 있는 프로그램의 일부분 • 모듈러 프로그래밍 • 모듈 개념을 사용하는 프로그래밍 기법 • 모듈러 프로그래밍의 장점 • 각 모듈들은 독자적으로 개발 가능 • 다른 모듈과 독립적으로 변경 가능 • 유지 보수가 쉬워진다. • 모듈의 재사용 가능 • C에서는 모듈==함수
함수의 개념 • 함수(function): 특정한 작업을 수행하는 독립적인 부분 • 함수 호출(function call): 함수를 호출하여 사용하는 것 • 함수는 입력을 받으며 출력을 생성한다.
함수들의 연결 • 프로그램은 여러 개의 함수들로 이루어진다. • 함수 호출을 통하여 서로 서로 연결된다. • 제일 먼저 호출되는 함수는 main()이다.
중간 점검 • 함수가 필요한 이유는 무엇인가? • 함수와 프로그램의 관계는? • 컴파일러에서 지원되는 함수를 __________함수라고 한다. 가장 중요한 이유는 소스 코드의 중복성을 없애 주기 때문이다. 함수는 프로그램을 이루는 모듈 역할을 한다. 라이브러리 함수
이번 장에서 학습할 내용 규모가 큰 프로그램은 전체 문제를 보다 단순하고 이해하기 쉬운 함수로 나누어서 프로그램을 작성하여야 한다. • 모듈화 • 함수의 개념, 역할 • 함수 작성 방법 • 반환값 • 인수 전달 • 함수를 사용하는 이유
함수의 정의 • 반환형(return type) • 함수 헤더(function header) • 함수 몸체(function body)
반환형 • 함수 이름 앞에 반환하는 데이터의 유형을 표시한다. • char, int, long, double … 등이 가능하다. • 반환형이 없으면 void로표시 intadd(int x, int y) { …. } voidprint_info() { …. }
함수이름 • 일반적으로 동사+명사 • (예) • compute_average(), • get_integer() • set_speed()
매개 변수 • 매개 변수(parameter): 함수가외부로부터 전달받는 데이터를 가지고 있는 변수
지역 변수 • 지역 변수(localvariable): 함수안에서 정의되는 변수
함수 정의 예제 • 함수를 프로그램을 이루는 부품이라고 가정하자. • 입력을 받아서 작업한 후에 결과를 생성한다.
예제 #1 • 정수의 제곱값을 계산하는 함수 반환값: int 함수 이름: square 매개 변수: int n int square(int n) { return(n*n); }
예제 #2 • 두개의 정수중에서 큰 수를 계산하는 함수 반환값: int 함수 이름: get_max 매개 변수: int x, int y
예제 #3 • 정수의 거듭 제곱값(xy)을 계산하는 함수 반환값: int 함수 이름: power 매개 변수: int x, int y
중간 점검 • 함수 이름 앞에 void가 있다면 무슨 의미인가? • 함수가 작업을 수행하는데 필요한 데이터로서 외부에서 주어지는 것을 무엇이라고 하는가? • 함수 몸체는 어떤 기호로 둘러 싸여 있는가? • 함수의 몸체 안에서 정의되는 변수를 무엇이라고 하는가? 함수가 값을 반환하지 않는다는 의미이다. 인수(argument) {, } 지역 변수
함수 호출과 반환 • 함수 호출(function call): • 함수를 사용하기 위하여 함수의 이름을 적어주는 것 • 함수안의 문장들이 순차적으로 실행된다. • 문장의 실행이 끝나면 호출한 위치로 되돌아 간다. • 결과값을 전달할 수 있다.
인수와 매개 변수 • 인수(argument):실인수, 실매개 변수라고도 한다. • 매개 변수(parameter): 형식 인수, 형식 매개 변수라고도 한다. intmain(void) { … sum = add(2, 3); … } 인수 매개 변수
반환값 • 반환값(return value): 호출된 함수가 호출한 곳으로 작업의 결과값을 전달하는 것 • 인수는 여러 개가 가능하나 반환값은 하나만 가능
값을 반환하는 문장 • return 문장을사용하여서 값을 반환한다. • return 문장의사용 예 return 0; return (x); return x+y;
함수 원형 • 함수 원형(function prototyping): 컴파일러에게 함수에 대하여 미리 알리는 것 함수 원형
예제 0 1 4 9 16
예제 두개의 정수를 입력하시오: 2 3 두 수 중에서 큰 수는 3입니다.
조합(combination) 계산 함수 • 팩토리얼 계산 함수와 get_integer() 함수를 호출하여 조합을 계산한다
예제 정수를 입력하시오: 10 정수를 입력하시오: 3 C(10, 3) = 120
중간 점검 • 인수와 매개 변수는 어떤 관계가 있는가? • 반환 값이 double형으로 정의된 함수에서 정수를 반환하면 어떤 일이 발생하는가? 인수는 외부에서 주어지는 데이터이고 매개 변수는 이 데이터를 받기 위한 변수이다. 정수가 double형으로 변환되어 반환된다.
함수 원형 • 함수 원형(function prototype) : 미리 컴파일러에게 함수에 대한 정보를 알리는 것 반환형 함수이름(매개변수1, 매개변수2, ... );
함수 원형 예제 정수를 입력하시오: 10 1부터 10까지의 합은 55입니다.
함수 원형을 사용하지 않을려면 • 함수가 미리 정의되면 된다. • 그러나 특수한 경우에는 이것이 불가능하다. 따라서 함수 원형을 사용하는 것이 바람직하다.
함수 원형을 사용하지 않는 예제 정수를 입력하시오: 10 1부터 10까지의 합은 55입니다.
함수 원형과 헤더 파일 • 보통은 헤더 파일에 함수 원형이 선언되어 있음
중간 점검 • 함수 정의의 첫 번째 줄에는 어떤 정보들이 포함되는가? 이것을 무엇이라고 부르는가? • 함수가 반환할 수 있는 값의 개수는? • 함수가 값을 반환하지 않는다면 반환형은 어떻게 정의되어야 하는가? • 함수 정의와 함수 원형의 차이점은 무엇인가? • 함수 원형에 반드시 필요한 것은 아니지만 대개 매개 변수들의 이름을 추가하는 이유는 무엇인가? • 다음과 같은 함수 원형을 보고 우리가 알 수 있는 정보는 어떤 것들인가? • double pow(double, double); 반환형, 함수의 이름, 매개 변수--- 함수 헤더라고 한다. 1개 void 함수 원형은 컴파일러에게 정보를 주기 위하여 함수 헤더만을 표시한다. 함수 정의에는 반드시 함수 몸체가 있어야 한다. 프로그램의 가독성을 높이기 위하여 함수 pow()는 두 개의 double형 매개 변수를 가지며 반환형은 double형이다.
함수를 사용하는 이유 • 소스 코드의 중복을 없애준다. • 한번 만들어진 함수를 여러 번 호출하여 사용할 수 있다. • 한번 작성된 함수를 다른 프로그램에서도 사용할 수 있다. • 복잡한 문제를 단순한 부분으로 분해할 수 있다.
변수의 범위 전역 변수 지역 변수 변수의 범위 함수 전역 변수 함수 지역 변수 지역 변수
지역 변수 • 지역 변수(local variable): 함수나 블록 안에 선언되는 변수
지역 변수의 생존 기간 • 정의된 블록이나 함수 안에서만 생존한다.
함수의 매개 변수 • 매개 변수도 일종의 지역 변수 • 함수를 호출할 때 넣어주는 인수 값으로 초기화
함수의 매개 변수 변수 i의값이 counter로 복사된다. main 함수안의 변수 i의값은 변경되지 않음 함수 호출전 i=10 함수 호출후 i=10
전역 변수 • 전역 변수(globalvariable): 함수의 외부에 선언되는 변수 • 초기값을 주지 않으면 0이다.