2. 함수 보고서


2-1. 함수란?

함수는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다. 어떤 값을 입력하면 이 값으로 작업을 수행해서 결과를 반환한다.


2-2. 함수를 사용하는 이유

대표적으로 3가지가 있다.


1) 높은 재사용성

만들어 놓은 함수는 몇 번이고 호출할 수 있으며, 다른 프로그램에서도 사용이 가능하다.


2) 중복된 코드의 제거

프로그래밍을 하다 생기는 같은 내용의 문장들을 하나로 묶어서 함수로 작성해 놓으면 함수를 호출하는 한 문장으로 대처할 수 있다.


3) 프로그램의 구조화

지금까진 짧은 단위의 프로그램을 작성하여 별 문제가 없었지만 프로그램의 규모가 커질 수록 문장들을 작업단위로 나눠서 여러 개의 함수에 담아 프로그램의구조를 단순화 시키는 것이 필수적이다. 프로그램의 전체흐름이 한눈에 들어올 정도로 단순하게 구조화 해야 프로그램에 문제가 발생해도 해당 부분을 쉽게 찾아 오류를 해결할 수 있다.


2-3. 함수의 형태


반환타입 함수이름 (매개변수 선언){

//함수 호출시실행될 문장들

.....

return 반환값 ; 


}


2-4. 함수의 선언

함수는 크게 두 부분, '선언부'와 '구현부'로 이루어져 있다.


함수의 선언부 는 '반환 타입'과 '함수의 이름' 그리고 '매개변수 선언'으로 구성되어 있으며 함수가 작업을 수행하기 위해 어떤 값들을 필요로 하고 작업의 결과로 어떤 타입의 값을 반환하는 지에 대한 정보를 제공한다.


-매개변수 선언

매개변수는 함수가 작업을 수행하는데 필요한 값들을 제공받기 위한 것이며 필요한 값으 개수만큼 변수를 선언한다. 만일 값을 전혀 입력받을 필요가 없다면 괄호()안에 'void'라고 적는다.


-반환 타입

함수의 작업수행 결과인 '반환값'의 타입을 적는다. 반환값이 없는 경우 반환타입으로 'void'를 적어야 한다.


함수의 구현부는 함수를 호출했을 때 수행될 문장들을 넣는다.


-return문

함수의 반환타입이 'void'가 아닌 경우. 구현부{ } 안에 'return 반환값 ;' 이 반드시 포함되어 있어야 한다. 이 문장은 작업을 수행한 결과인 반환값을 호출한 함수로 전달하는데, 이 반환값의 타입은 반환타입과 일치해야 한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
#include<stdlib.h>
 
int hap(int a, int b); 
//hap이라는 함수가 존재한다는 것을 알려주기 위해 미리 선언
 
int main() {
    int num1, num2;
    scanf_s("%d %d"&num1, &num2);
    hap(num1, num2); 
 //함수를 호출하고 int a,b의 값을 전달해 준다(여기선 num1,num2)
    system("pause");
    return 0;
}
 
int hap(int a, int b) {  //반환값이 있으므로 int라고 정해준다
    int hap;
    hap = a + b;
    return printf("%d",hap); //hap의 출력을 반환한다.
}
cs

ㄴ> 이해를 도와줄 입력받은 두 수의 합을 구하는 프로그램을 만들어 보았다.



2-5. 함수의 사용


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<stdlib.h>
 
int put();
 
int main() {
    put();
    system("pause");
    return 0;
}
 
void put() {
    int a;
    scanf_s("%d"&a);
    printf("입력받은 값: %d\n", a);
}
cs

ㄴ> 입력 받은 값을 그대로 출력하는 프로그램이다.

값을 입력받고 출력하는 모든일을 함수에서 한다.

4번째 줄에서 함수를 한번 더 선언하는 이유는 C언어는 프로그램을 위에서 아래로 읽어내리는 방식이기 때문에 미리 이런 함수가 있다 라고 알려주지 않으면 오류가 발생한다.

15번째 줄에서 return이 쓰이지 않은 이유는 main함수에서 put함수의 결과 값을 받아서 할 일이 없기때문에 바로 printf를 해주면 put함수의 역할은 끝나는 것이다.



2-6. return문


함수의 반환타입이 'void'가 아닌 경우. 구현부{ } 안에 'return 반환값 ;' 이 반드시 포함되어 있어야 한다. 이 문장은 작업을 수행한 결과인 반환값을 호출한 함수로 전달하는데, 이 반환값의 타입은 반환타입과 일치해야 한다.

void일때 사용된 return문은 함수 종료의 뜻을 가진다.


2-7. <string.h>에 있는 strcpy, strlen,strcmp 조사


-strcpy


#include <string.h>

char * strcpy ( char * destination, const char * source );


문자열을 복사한다.
source 가 가리키는 C 형식의 문자열 (널null 종료 문자열) 을 destination 이 가리키는 곳에 복사한다. 이 때, 널도 포함해서 복사한다. 
오버플로우를 방지하기 위해서, destination 이 가리키는 배열의 크기는 반드시 source 문자열의 크기와 같거나 이보다 커야 한다. 또한, 복사하는 영역이 source 와 겹치면 안된다. 


-strlen


#include <sting.h>

strlen(const char * str)


문자열의 길이를 구한다.
문자열의 길이는 리턴한다. C 문자열의 길이는 마지막 널 문자에 의해 결정된다. 따라서 strlen 은 문자열의 시작 부터, 널 문자 직전 까지의 문자의 개수를 센다. 


-strcmp


#include <string.h>

int strcmp( const char * str1 ,const char * str2);


두 개의 문자열을 비교한다.
C 문자열 형식의 str1 과 str2 를 비교한다.
이 함수는 각 문자열의 첫 번째 문자 부터 비교를 시작한다. 만일 같다면 두 문자가 다를 때 까지나 NULL 에 도달할 때 까지 계속 비교를 수행한다. 

(http://itguru.tistory.com 참조)



2-7-1. 전달인자


매개변수와 전달인자는 같은 의미로 쓰이는 경우가 많지만 둘은 명백히 다른용어이다.


 -매개변수

int sum(int a, int b);

int sum(int a, int b) 은 실제값은 존재하지 않고 형태를 나타내 준다.


-전달인자

sum(10,20);

sum함수를 호출했을때 10,20을 전달인자라고 한다. 전달인자에는 값이 존재한다.

(http://wowon.tistory.com 참조)




2-7-2. 반환값


strcpy - 목적지 문자열 destination에 대한 포인터를 반환


strlen - 문자열의 길이 반환


strcmp - 두 문자열의 관계에 따라 정수값 반환



2-7-3. 함수의 기능


1) 높은 재사용성


2) 중복된 코드의 제거

 

3) 프로그램의 구조화

'@C언어 : Layer7' 카테고리의 다른 글

수업 문제풀이  (0) 2018.04.09
포인터 보고서  (0) 2018.04.09
오름차순 문제  (0) 2018.04.04
달팽이 배열  (0) 2018.04.04
배열 문제  (0) 2018.04.02

+ Recent posts