2.함수


1-1.함수란?

함수란 특정한 작업을 수행하는 또는 서로 관련되어있는 코드들의 모임으로 하나의 단위를 말한다.

function이라고 하며 기능을 뜻한다. 

기능을 구현하는 부분을 따로 분리하여 구현한 것으로, 구조화 프로그램의 중요한 개념이다.

※구조화:프로그램을 기능별로 함수화하는 것(프로그램을 기능별로 짜는 것 )


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

함수를 사용하는 이유 

  • 반복적인 프로그래밍을 피할 수 있기 때문이다.

    프로그램에서 특정 작업을 여러 번 반복해야 할 때에는 해당 작업을 수행하는 함수를 작성하고 필요할 때마다 그 함수를 호출하면 

    해당 작업을 계속 반복해서 수행할 수 있다. 

  • 프로그램을 여러 개의 함수로 나누어 작성하면, 모듈화(구조화)로 인해 전체 코드의 가독성이 좋아진다.(잘 알아볼 수 있다.)
  • 프로그램에 문제가 발생하거나 기능의 변경이 필요할 때에도 손쉽게 유지보수를 할 수 있다.
  • 함수와 함수를 서로 분리 시킴으로써 모든 변수의 사용을 함수 내에서 독립적으로 선언하여 사용할 수 있게 된다.


2-3.함수의 형태

1
2
3
int num(int i) {
    return i;
}
cs
전달0    반환0


1
2
3
int num() {
    return i;
}
cs

전달X    반환0

1
2
3
void num(int i) {
    
}
cs

전달0   반환X

1
2
3
void num() {
   
}

cs

전달X   반환X

※반환값 : return 이라고도 하며 현재 있는 함수에서 빠져나가 함수를 호출한 곳으로 되돌아가라는 뜻  

             return 0;은 0을 반환 return 1;은 1을 반환

※전달인자 : 변수 같은거

2-4.함수 선언법

 ex)

반환 자료형 : 함수가 호출된 곳으로 반환하려는 반환값의 타입을 말한다.

                 반환 자료형은 모든 자료형이 올수 있다.

                 함수 이름 : main함수의 경우 프로그램 실행시 가장 먼저 실행되는 함수이다.

                 꼭 필요한 함수이며, 변경할 수 없지만 사용자 정의 함수의 경우에는 일반적인 명명규칙에 따라 사용자 지정이 가능이다.


인수목록 : main함수에는 보통 아무것도 쓰지 않습니다. 하지만 괄호안에 void가 생략된 형태이다.

              ( )안에 오는 것을 매개변수라고 한다. 작성법은 변수와 똑같지만 초기화를 넣어주면 안된다.

              매개변수는 콤바(,)를 이용해 여러개가 올수 있고 아예 없을 수도있다.

              매개변수의 타입은 각각 다르게 사용할 수 있다.(int a, float b, char c)


2-5.함수 사용법


1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
 
int a(int b) { //함수선언
    b = 17; //초기화
    printf("%d", b); //출력하기
}
 
int main() {
    int x=0; //변수 넣기(여기서 x를 초기화해주지않으면 호출할 때 오류남.)
    a(x); //함수 호출
}
 
cs

함수의 이름을 적고 (인수) 쓰고 몸체 작성하고 main 함수 몸체 작성하고 호출하는 식으로 사용된다.


2-6.return이란

return은 함수가 아니라 C언어에서 미리 정해놓은 명령어이다.

뜻은 현재의 함수에서 빠져나와 그 함수를 호출했던 곳으로 되돌아 가라는 뜻이다.

되돌아가면서 호출한 곳에 어떤 값을 반환하라는 것이다.

return 0;이면 0이라는 값 반환 return 1;이면 1이라는 값 반환 

어떤 함수에도 쓸 수 있으며 return이 실행되는 즉시 그 함수는 종료된다.


2-7.string.h에 있는 문자열 함수(strcpy,strlen,strcmp)

다 위에 #include<string.h>을 해주어야 한다.

  • strcmp()
    strcmp(문자열(str1),문자열(str2)로 사용

문자열을 비교하는 함수이다str1과 str2를 아스키코드의 사전순으로 비교해서 (문자 하나하나)

str1이 작으면 -1, 크면 1, 같으면 0을 반환합니다.

ex)같을 때

1
2
3
4
5
6
7
8
#include<stdio.h>
#include<string.h>
 
int main() {
    char str1[10= "12345";
    char str2[10= "12345";
    printf("%d", strcmp(str1, str2));
}
cs
0반환

 

str1이 str2보다 작을 때

1
2
3
4
5
6
7
8
#include<stdio.h>
#include<string.h>
 
int main() {
    char str1[10= "1234";
    char str2[10= "12345";
    printf("%d", strcmp(str1, str2));
}

cs

-1반환


str1이 str2보다 클 때

1
2
3
4
5
6
7
8
#include<stdio.h>
#include<string.h>
 
int main() {
    char str1[10= "123456";
    char str2[10= "12345";
    printf("%d", strcmp(str1, str2));
}
cs

1반환


  • strlen()

문자열의 길이를 반환합니다.
null문자는 길이에서 제외된다.

1
2
3
4
5
6
7
8
9
#include<stdio.h>
#include<string.h>
 
int main() {
    char a[10= "asdf";
 
    printf("%d\n", strlen(a));
    
}
cs

4출력


  • strcpy
strcpy(문자열(str1),문자열(str2))로 쓰인다.
str2를 str1에 대입한다.
str1의 배열 크기가 str2의 배열크기보다 커야만 한다.
str1[5]이고 str2[10]이고 str2의 문자열이 5자리 이상이면 X

1
2
3
4
5
6
7
8
9
#include<stdio.h>
#include<string.h>
 
int main() {
    char a[10];
    char b[10]= "abcd";
    strcpy(a, b);
    printf("%s", a);
}
cs


2-7-1.전달인자 

전달인자는 함수를 호출할때 전달되는 실제 값을 의미한다.
함수를 정의할때 ;() 괄호 안에 쓰는 것이 전달인자이다.

아무것도 전달하지 않는다면 void 혹은 아무것도 써주지 않는다.


2-7-2.반환값

  return 이라고도 하며 현재 있는 함수에서 빠져나가 함수를 호출한 곳으로 되돌아가라는 뜻  

  return 0;은 0을 반환 return 1;은 1을 반환 return(값)으로 나타냄.


2-7-3.함수의 기능

코드를 반복하여 적을 필요없이 함수를 호출하면 되기 때문에 매우 편리하다.

쉽게 오류를 수정할 수 있고 분리하여 쓰기 때문에 읽기도 편하다.









   


                                                                                         










'과제' 카테고리의 다른 글

금요일 수업 문제 풀이  (0) 2018.04.07
포인터 보고서  (0) 2018.04.07
달팽이 배열 구현  (0) 2018.04.03
정렬 알고리즘 구현  (0) 2018.04.03
배열 문제 풀이  (0) 2018.03.31

+ Recent posts