제 11장 C언어의 핵심, 함수 - 1
● C언어로 만들어진 프로그램은 ?
: 함수로 시작해서 함수로 끝나는 프로그래밍 언어
- 중요도는 함수가 포인터가 상대적으로 높다.
- 포인터는 활용하는데 정말 중요
- 함수를 적절히 이용하는건 더 어렵게 걸린다.
- 포인터를 얼마냐 잘 사용되느냐가 아닌
- 함수를 어떻게 정하는건지 실력판단.
- 좋은함수를 만들수 있어야한다.
● main()함수 다시보기
int main (void)
{
// 함수몸체
}
1. 함수는 이름이 필요하다
(void) : 입력의 형태
(int) : 출력의 형태(반환 혹은 리턴형)
{ } : 함수의 몸체(함수의 기능)
2, 함수를 정의하는 이유
- 모듈화(기능별로 분리)에 의한 프로그램의 질 향상
- 유지 보수, 확장의 용이성
ex) 프로그램을 바꿀때, 기능별로 순차적으로 수정이 가능
- 문제를 분리하고,전체를 정복하라 (Divide and Conquer)
- 체계적인 프로그래밍 가능
- 코드 읽기의 효율성
3. 함수의 형태
int Sum(int a, int b) // int형을 return 할 Sum 이라는 이름의 함수
{ // 변수 a, b로 받아준다.
int sum = a+b; // 연산값을 sum에 대입
return sum; // return : sum을 반환해라, 던져줘라
}
예제 ===============================================
#include <stdio.h>
int Sum(int a, int b) // 여기에 a = 10, b = 20
{
int result = a+b;
return result; // result를 던진다.(뱉어낸다)
}
int main()
{
int val;
val = Sum(10, 20);// 뱉어낸 값을 받아서 val에 보관
printf("val = %d \n", val);
return 0;
}
// 함수가 리턴값은 어디로 넘어가는가?
// 리터형 함수는 어떤것들이 있는가?
4 다양한 형태의 함수
int Sum(int val) // 전달인자, 리턴값 둘다 있다.
void Sum(int val) // 전달인자는 있지만 리턴값이 없다.
int Sum() // 전달인자는 없고, 리턴값은 있다.
void Sum(void) // 전달인자, 리턴값 둘다 없다.
5. 함수 선언의 필요성
- 컴파일러의 특성상, 함수는 호출되기전에 정의되야 한다.
- 호출할 함수정의는 main함수 이전에 무조건 선언이 되야 한다.
- 호출할 함수원형을 선언후, main()함수 밑에 선언도 가능
- 컴파일은 위에서 아래의 순서대로 읽기때문에, 컴파일이 호출할 함수를 읽어야 한다.
예제 ===============================================
#include <stdio.h>
int Add(int a, int b); // 더하기 함수선언
int Minus(int a1, int b1); // 빼기 함수선언
int Input(); // 입력하는 함수선언
void Print(int k, int k1); // 출력하는 함수선언
void Title(); // 프로그램제목 함수선언
//-------------------------------------- 까지 함수 선언부분
int main()
{
int num1, num2;
int sum1, sum2;
Title(); // 제목함수호출
num1 = Input(); // Input함수를 호출하여, 결과값을 num1에 반환
num2 = Input(); // Input함수를 호출하여, 결과값을 num2에 반환
sum1 = Add(num1, num2); // Add(더하기)함수 호출하여 결과값을 sum1에 반환
sum2 = Minus(num1, num2); // Minus(빼기)함수 호출하여 결과값을 sum2에 반환
Print(sum1, sum2); // 출력함수 호출
return 0; // 0을 리턴한다.
}
//-------------------------------------- 부터 함수 정의부분
void Title() // Title 함수정의부분
{
printf(" ▲ ▲\n");
printf("■ 함수를 이용한 프로그램 예제입니다 ■\n");
printf(" ● ●\n");
}
int Add(int a, int b) // Add 함수정의부분
{
int result = a + b;
return result;
}
int Minus(int a1, int b1) // Minus 함수정의부분
{
int result1 = a1 - b1;
return result1;
}
int Input() // Input 함수정의부분
{
int val;
printf("값을 입력하세요 : ");
scanf("%d", &val);
return val;
}
void Print(int k, int k1) // Print 함수정의부분
{
printf("더한 결과 : %d \n", k);
printf("빼기 결과 : %d \n", k1);
}
// 위(main함수 위)에는 함수를 선언한부분
// 밑(mani함수 밑)에는 선언한 함수를 정의한 부분이다
예제 ===============================================
// 함수 선언의 의미
#include <stdio.h>
int Large_Num(int a, int b); // 함수 선언부분
int main()
{
int a = 10;
int b = 12;
int c = 3;
int d = 2;
printf("%d 와 %d중 큰 수는 %d \n", a, b, Large_Num(a, b));
printf("%d 와 %d중 큰 수는 %d \n", c, d, Large_Num(c, d));
// printf의 인자값을 반환값이 존재하는 함수가 올수 있다
return 0;
}
int Large_Num(int a, int b) // 함수정의 부분, main 함수내의 변수 a,b와는 별개인 변수다
{
if(a > b)
return a;
else
return b;
}
// Tip !
// 한 함수내의 { } 안에 선언된 변수의 이름은 그 안에서만 효력이 발생한다.
// 다른 함수에 똑같은 이름의 변수가 있더라도, 영향을 받지 않지만,
// 프로그램의 가독성 및 혼란성을 피하기 위해서, 다른 변수를 넣어주는것이 좋다.
ex)
in Add()
{
int a;
}
int Add_1()
{
int a;
}
이둘의 a값은 컴파일의 혼란을 야기 시키지 않는다. 이름만 같을뿐, 서로 다른변수다.
'프로그래밍 > C' 카테고리의 다른 글
제 13장 C언어의 핵심 함수 - 3 (0) | 2010.07.10 |
---|---|
제 12장 C언어의 핵심 함수 - 2 (0) | 2010.07.10 |
제 10장 조건에 따른 흐름의 분기 - 2 (0) | 2010.07.08 |
제 9장 조건에 따른 흐름의 분기 - 1 (0) | 2010.07.08 |
제 8장 여러형태의 반복문 (0) | 2010.07.08 |