딩굴댕굴

C 13Day (20160125)

by jennysgap

BOX

함수

  • 독립적인 기능을 가지는 작은 프로그램
  • 인수(=인자 값)를 전달 받아 일련의 작업을 수행한 뒤 그 결과를 반환하는 코드
  • 프로그램의 부품 역할을 하는 함수들이 모여 큰 함수로 만들어진다
    (=프로그램은 함수르 만들어져있다.)
  • 표준함수와 사용자 정의 함수로 구분
표준함수 :   이미 잘 만들어 있어서 우리가 가져와서 사용하면 되는 함수 (printf, scanf, rand, srand, time...)
사용자 정의 함수 : 표준함수와 같은 기능들을 하는 함수들을 우리가 직접 정의 하는 함수


장점
  • 재사용이 가능하다
  • 관리가 용이하다
  • 큰 프로그램 작성시 공동작업이 유리하다
  • 가독성을 높일 수 있다 (=읽기쉽다)


일반적으로 함수를 쓰는 이유!
main함수 안에 모든 프로그램을 작성하게 되면 프로그램이 복잡해지고 이해하기 어려워 지므로
프로그램을 기능별로 분리된 단위 프로그램으로 나누어 정의함으로써 
코드의 재사용이나 유지보수가 용이하게 하고 중복되는 작업의 중복을 피할 수 있도록 한다.



함수의 정의

  • main 함수를 포함하여 함수의 크기는 작을수록 좋다.
  • 하나의 함수는 하나의 일만 담당하도록 디자인되어야 한다.
    (하나의 함수 예를들어 '플러스 연산자만 계산하는 기능만 있었으면 좋겠다.' 라는 의미
      계산처럼 플러스 마이너스 곱셈 등... 많은 기능이 들어가있는게 아니라)
사용자 정의 함수는 한번 정의된다면 여러번 호출이 가능하다는 장점이 있음
함수의 정의 작성할 때 중괄호{}가 꼭있어야 함! 생략 No!

프로그램의 흐름은 무조건 main함수부터 시작
함수는 main함수 위쪽에 만든다.

입력방법!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
/*
반환형함수이름 (입력형태)
{
    함수의 기능
}
*/
int Add (int n1, int n2)        //매개변수 : 전달되는 인자 변수를 
{
    return n1+n2;                //결과 값을 정수로 반환할꺼얌~
}
 
int main(void)
{
    int result;
    //Add();                    두 수를 전달받아서 합을 반환해주는 함수
    result=Add(1020);            //30이 result라는 변수에 저장된다.
    printf("%d\n", result);
 
    return 0;
}
cs




사용자정의함수의 유형 4가지




함수의 정의 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
 
int Add(int n1, int n2)        
{
    return n1+n2;
}
 
int Sub(int n1, int n2)
{
    return n1-n2;
}
 
int Mul(int n1, int n2)
{
    return n1*n2;
}
 
float Div(int n1, int n2)
{
    return (float)n1/n2;            //입력 받을 때부터 정수이기 때문에 형변환 시켜야함
}
 
int main(void)
{
    int result1, result2, result3, num1, num2;
    float result4;
 
    scanf("%d %d", &num1, &num2);
    result1=Add(num1, num2);
    result2=Sub(num1, num2);
    result3=Mul(num1, num2);
    result4=Div(num1, num2);
 
    printf ("두 수의 합은 %d 입니다.\n", result1);
    printf ("두 수의 차는 %d 입니다.\n", result2);
    printf ("두 수의 곱은 %d 입니다.\n", result3);
    printf ("두 수의 나눗셈은 %f 입니다.\n", result4);
 
    return 0;
}
cs






함수의 선언

*주의! 컴파일러 입장에서 볼 것!* =컴파일 진행방향은 위에서 아래

지금 보는 사례의 다른 점은 main함수와 사용자정의함수의 위치입니다.

  


컴파일이 위에서 아래로 진행이 되기 때문에 함수의 배치순서는 중요하다.

컴파일 되지 않은 함수는 호출이 불가능하다.

이후에 등장하는 함수에 대한 정보를 컴파일러에게 제공해서 이후에 등장하는 함수의 호출문장이 컴파일 가능하게 도울 수 있다.

이렇게 제공되는 함수의 정보를 가리켜 '함수의 선언'이라 한다.





함수의 선언 입력방법


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
void A(int n1, int n2);        // 함수를 선언하는 방법 복붙! (자료형만 입력할 수도 있음) / 세미클론(;) 입력은 필수!
void B(intdouble);            //함수의 선언
 
int main(void)
{
    return 0;
}
 
void A(int n1, int n2)            //함수의 정의
{
    B();
}
 
void B(int n1, double n2)
{
 
}
cs





문제!  *주의점*

  • 변수의 값을 임의로 변경하면 안됨
  • type을 변경하면 안됨
  • 전달되는 인자도 그래도 사용
  • 문제 중에서는 필요없는 함수 없음 (다 필요한 것들! 지우지 말기!)
  • 함수의 매개변수나 반환형만 상황에 따라 적절하게 바꾸기




















반응형

'BOX' 카테고리의 다른 글

C 15Day (20160127)  (0) 2016.01.31
C 14Day (20160126)  (0) 2016.01.31
C 12Day (20160122)  (0) 2016.01.23
C 11Day (20160121)  (0) 2016.01.22
C 10Day (20160120)  (0) 2016.01.22

블로그의 정보

jennysgap

jennysgap

활동하기