C Programming Ch8 : 함수
1. 모듈
모듈(module)
-
독립되어 있는 프로그램에서 특정한 역할을 담당하는 프로그램의 일부분을 의미한다.
-
모듈러 프로그래밍 : 모듈 개념을 사용하는 프로그래밍 기법이다.
-
프로그램을 모듈화하여 작성하면 유지 보수가 쉬워지고, 모듈의 재사용이 가능하며, 다른 모듈과 독립적으로 변경이 가능하다.
-
C에서는 모듈과 함수가 같은 용어로 사용된다.
2. 함수
함수(function)와 함수 호출(function call)
-
특정 작업을 수행하는 명령어들의 모음에 이름을 붙인 것이다.
-
입력을 받아서 특정한 작업을 수행하고 결과를 반환하는 상자와 같다고 할 수 있다.
-
개발자가 함수의 이름을 호출하여서 작업을 시킬 수 있다.
-
함수는 작업에 필요한 데이터를 전달받을 수 있으며, 작업이 완료된 후에는 결과를 생성하여 호출자에게 반환한다.
함수가 필요한 이유
-
여러 번 반복되어야 하는 처리 단계를 하나로 모아서 필요할 때마다 언제든지 호출하여 사용 할 수 있다.
함수의 장점
-
함수를 사용하면 코드가 중복되는 것을 막을 수 있다.
-
한번 작성된 함수는 여러 번 재사용할 수 있다.
-
함수를 사용하면 전체 프로그램을모듈로 나눌 수 있어서 개발 과정이 쉬워지고 보다 체계적으로 되면서 유지보수가 원활하다.
함수의 종류
-
라이브러리 함수(library function) : 컴파일러에서 기본적으로 지원되는 함수를 의미한다.
-
사용자 정의 함수(user-defined function) : 개발자가 직접 만들어서 사용하는 함수를 의미한다.
3. 함수의 구조
함수의 구조
-
함수 헤더(function header)
-
반환형(return type) : 함수의 처리를 종료한 후에 호출한 곳으로 반환하는 데이터의 유형을 의미한다.
-
함수 이름(function name) : 함수의 수행목적을 설명하는 동사 또는 동사+명사의 형태로 사용한다.
-
-
함수 몸체 (function body) : 함수가 수행하여야 할 작업에 필요한 문장들이 포함되며, 함수 내에서 다른 함수들을 호출하는 것도 가능하다.
함수 호출
-
특정 함수를 다른 곳(함수 내부, main 함수 내부 등)에서 실행하기 위해 함수의 이름을 직접 작성하여 호출하는 형태를 의미한다.
-
함수안의 문장들은 호출되기 전까지는 실행되지 않는다.
-
함수를 호출하면 현재 실행되고 있는 코드는 잠시 중단되고, 호출된 함수로 이동하여서 함수 몸체의 문장들이 순차적으로 실행된다.
-
C언어에서 제일 먼저 호출되는 함수는 main() 이다.
예제 : 함수 호출하기
// func_exam1.c
/* print_stars() 함수를 호출하여 메세지를 출력하는 프로그램 */
#include <stdio.h>
void print_stars()
{
for (int i = 0; i < 30; i++)
printf("*");
}
int main(void)
{
print_stars();
printf("\nHello World!\n");
print_stars();
printf("\n");
return 0;
}
/*
******************************
Hello World!
******************************
*/
4. 매개변수와 반환값
인수(argument)와 매개변수(parameter)
-
인수(=실인수, 실매개변수) : 실질적인 값을 부여받은 변수를 의미한다.
-
매개 변수(=형식인수, 형식 매개변수) : 형식적으로 함수를 구조화시키기 위해 존재하는 변수를 의미한다.
반환값(return value)
-
호출된 함수가 호출한 곳으로 작업의 결과값을 전달할 때에 전달된 값을 의미한다.
-
인수는 여러 개가 가능하지만 반환값은 하나의 값만 가능하다.
예제 : 함수의 활용
// add.c
/* 정수의 합을 계산하는 프로그램 */
#include <stdio.h>
int get_integer()
{
int value;
printf("정수를 입력하시오: ");
scanf("%d", &value);
return value;
}
int add(int x, int y)
{
return x + y;
}
int main(void)
{
int x = get_integer();
int y = get_integer();
int sum = add(x, y);
printf("두수의 합은 %d입니다. \n", sum);
return 0;
}
정수를 입력하시오: 10
정수를 입력하시오: 20
두수의 합은 30입니다.
예제 : 온도변환기
// temperature.c
/* 온도변환을 수행하는 프로그램 */
#include <stdio.h>
void printOptions()
{
printf(" 'c' 섭씨온도에서 화씨온도로 변환\n");
printf(" 'f' 화씨온도에서 섭씨온도로 변환\n");
printf(" 'q' 종료\n");
}
double C2F(double c_temp)
{
return 9.0 / 5.0 * c_temp + 32;
}
double F2C(double f_temp)
{
return (f_temp - 32.0) * 5.0 / 9.0;
}
int main(void)
{
char choice;
double temp;
while (1) {
printOptions();
printf("메뉴에서 선택하세요.");
choice = getchar();
if (choice == 'q') break;
else if (choice == 'c') {
printf("섭씨온도: ");
scanf("%lf", &temp);
printf("화씨온도: %lf \n", C2F(temp));
}
else if (choice == 'f') {
printf("화씨온도: ");
scanf("%lf", &temp);
printf("섭씨온도: %lf \n", F2C(temp));
}
getchar(); // 엔터키 문자를 삭제하기 위하여 필요!
}
return 0;
}
'c' 섭씨온도에서 화씨온도로 변환
'f' 화씨온도에서 섭씨온도로 변환
'q' 종료
메뉴에서 선택하세요.f
화씨온도: 100
섭씨온도: 37.777778
'c' 섭씨온도에서 화씨온도로 변환
'f' 화씨온도에서 섭씨온도로 변환
'q' 종료
메뉴에서 선택하세요.q
함수 원형(function prototyping)
-
컴파일러에게 함수에 대하여 미리 알리는 것을 의미한다.
함수 원형과 헤더 파일
-
일반적으로 헤더 파일에 함수 원형이 선언되어 있다.
5. 라이브러리 함수
라이브러리 함수(library function)
-
컴파일러에서 제공하는 사전에 작성된 함수
- 표준 입출력함수
- 수학 연산함수
- 문자열 처리함수
- 오류 처리함수
- 데이터 정렬 및 검색 함수
수학 라이브러리 함수
함수를 사용하는 이유
-
소스 코드의 중복을 없애준다.
-
한번 작성된 함수를 다른 프로그램에서도 사용할 수 있다.(=재사용성 용이)
-
복잡한 문제를 단순한 부분으로 분해할 수 있다.
예제 : 함수사용의 이유
// get_integer.c
/* 함수사용의 이점을 확인하는 프로그램 */
#include <stdio.h>
int get_integer();
double get_double();
char get_char();
int main(void)
{
double f, g;
f = get_double();
g = get_double();
printf("실수의 합=%lf\n", f + g);
return 0;
}
int get_integer() {
int n;
printf("정수를 입력하시오: ");
scanf("%d", &n);
return n;
}
double get_double()
{
double n;
printf("실수를 입력하시오: ");
scanf("%lf", &n);
return n;
}
char get_char()
{
char n;
printf("문자를 입력하시오: ");
scanf(" %c", &n);
return n;
}
실수를 입력하시오: 10
실수를 입력하시오: 20
실수의 합=30.000000
Author And Source
이 문제에 관하여(C Programming Ch8 : 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ten0213/C-Programming-Ch8-함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)