본문 바로가기

프로그램언어/C언어

c언어 사용자 정의 함수

1. 함수

함수란 프로그램에서 특정한 작업을수행하도록 따로 정의해 놓은 독립적인 프로그램의 단위를 의미 한다.

 

함수 타입 반환 값 매개 변수
첫 번재 유형의 함수 없음 없음
두 번재 유형의 함수 없음 있음
세 번째 유형의 함수 있음 없음
네 번째 유형의 함수 있음 있음

2. 첫 번째 유형의 함수

첫 번째 유형의 함수는 반환 값도 없고 매개 변수도 없는 함수입니다. 예문으로 확인해 보겠습니다.

소스코드 실행 결과
#include <stdio.h>
void sum(); 

void main() { 
    sum(); 
} 
void sum() { 
    int i, hap=0; 

    for(i=1; i<=10; i++) { 
        hap+=i; 
    } 
    printf("합계 : %d\n", hap); 
}
합계 : 55

void sum();에서 void는 반환 값이 없다는 것을 의미하고 sum()함수의 괄호안에 아무것도 없는데 이런 표현으로 매개 변수가 없다는 것을 의미합니다.

 

3. 두 번째 유형의 함수

두 번째 유형의 함수는 반환값은 없고 매개 변수가 있는 함수입니다. 예문으로 확인해 보겠습니다.

소스코드 실행 결과
#include <stdio.h>
void sum(int k);
void main() {
    int su;

    scanf("%d", &su);
    sum(su);
}

void sum(int k) {
    int i, hap=0;

    for(i=1; i<=k; i++) {
        hap+=i;
    }
    printf("합계 : %d\n", hap);
}

입력 한 숫자]

10

 

 

합계 : 55

void sum( int k ); 에서 void는 반환 값이 없다는 것을 의미하고 sum()함수 안에 "int k"는 매개 변수라고 합니다.

 

4. 세 번째 유형의 함수

세 번째 유형의 함수는 반환 값은 있고 매개 변수가 없는 함수입니다. 예문으로 확인해 보겠습니다.

소스코드 실행 결과

#include <stdio.h>

int sum();
void main() {
    int ret;

    ret = sum();
    printf("합계 : %d\n", ret);
}

int sum() {
    int i, hap=0;

    for(i=1; i<=10; i++) {
        hap+=i;
    }
    return hap;
}

합계 : 55

 

5. 네 번째 유형의 함수

네 번째 유형의 함수는 반환 값도 있고 매개 변수도 있는 함수입니다. 예문으로 확인해 보겠습니다.

소스코드 실행 결과

#include <stdio.h>
int sum(int k); 
void main() { 
    int su, ret;
    scanf("%d", &su); 
    ret = sum(su);

    printf("합계 : %d\n", ret); 
} 

int sum(int k) { 
    int i, hap=0; 

    for(i=1; i<=k; i++) { 
        hap+=i; 
    } 
    return hap; 
}

입력 한 숫자]

10

 

 

합계 : 55

 

6. 재귀 함수

재귀 함수란? 자기 자신의 함수를 다시 호출하는 함수이다.  예문으로 확인해 보겠습니다.

소스 코드 실행 결과

#include <stdio.h>


int sum(int k); 

 

void main() { 
    int su, ret; 

    scanf("%d", &su); 

    ret = sum(su); 
    printf("합계 : %d\n", ret); 
} 

int sum(int k) { 
    if(k==1) 
        return 1; 
    else 
        return k + sum(k-1); 
}

입력한 숫자]

5

 

 

합계 : 15

 

문제 풀어보기]

1. 가로와 세로의 길이를 입력 받아 사각형의 넓이를 구하는 함수를 만들어 출력하시오. (함수안에서 출력)
입력 예]
4 5

출력 예]
사각형의 넓이는 20입니다.


2. 가로와 세로의 길이를 입력 받아 삼각형의 넓이를 구하는 함수를 만들어 출력하시오. (함수에서 값을 받아 메인 함수에서 출력)
입력 예]
4 5

출력 예]
삼각형의 넓이는 10입니다.


3. 가로와 세로의 길이를 계속 입력 받아 사각형의 넓이를 출력하고 가로와 세로의 길이가 0, 0이면 종료하는 프로그램을 작성하시오.
입력 예] 출력 예]
1 2 사각형의 넓이 : 2
4 5 사각형의 넓이 : 20
10 20 사각형의 넓이 : 200
0 0 프로그램 종료



4. 함수를 이용하여 세 개의 정수를 인자로 받아 최대값을 구하여 리턴하는 함수를 작성하고  최대값을 출력하시오. (조건 연산자사용)
입력 예]
50 90 70

출력 예]
90


5. 함수를 이용하여 열 개의 정수를 인자로 받고 최대값을 구하여 리턴하는 함수를 작성하여  최대값을 출력하시오.
입력 예]
50 90 70 100 95 30 65 75 45 80

출력 예]
100


6. 두 개의 정수를 받아서 첫 번째 수를 두 번째 수만큼 거듭제곱하여 출력하는 프로그램을 작성하시오.(단 정수는 10이하)
입력 예]
2 4

출력 예]
16


7. 함수를 호출하여 반지름의 길이를 입력하고 원의 넓이를 함수 안에서 출력하는 프로그램을 작성하시오. 
( 원의 넓이 = 반지름 * 반지름 * 3.14)
입력 예]
5

출력 예]
78.5


8. 함수를 이용하여 사칙연산을 수행하는 함수는 작성한다. 두 개의 정수와 연산자를 입력하여 함수를 호출하여 출력하시오. (사칙연산 : +, -, *, / )
입력 예]
4 + 5

출력 예]
4 + 5 = 9


9. 1부터 입력받은 수까지의 합을 출력하는 함수를 작성하고 1000 이하의 자연수를 입력받아 출력하는 프로그램을 작성하시오.
입력 예]
100

출력 예]
5050


10. 100 이하의 두 개의 정수를 입력받아 작은 수부터 큰 수까지 차례대로 출력하는 함수를 만들고 출력하시오.
입력 예]
9 2

출력 예]
2 3 4 5 6 7 8 9


11. 년도와 월을 입력 받아 함수를 호출하면 마지막 일자를 반환하는 함수를 작성하고 아래와 같이 출력하시오.
입력 예]
2015 2

출력 예]
2015년 2월의 마지막 일은 28일입니다.


12. 정수 N을 입력받고 다시 N개의 정수를 입력받아 함수를 호출하여 내림차순으로 정렬하는 프로그램을 작성하시오. (정수 : 1 ≤ N ≤ 15)
입력 예]
5
20 40 30 10 50

출력 예]
50 40 30 20 10


13. 함수를 호출하여 정수 N을 입력받고 다시 N개의 정수를 입력받아 함수를 호출하여 내림차순으로 정렬하는 프로그램을 작성하시오. (정수 : 1 ≤ N ≤ 15)
입력 예]
5
20 40 30 10 50


출력 예]
50 40 30 20 10


14. n개의 정수를 입력 받아 함수를 호출하여 최대값과 최소값을 출력하시오. (최대값과 최소값을 반환하는 함수를 각각 만듬)
입력 예]
7
60 40 80 100 70 85 70

출력 예]
최대값 : 100
최소값 : 40

 

15. 정사각형의 한 변의 길이 n과 종류 m을 입력받은 후 다음과 같은 정사각형 형태로 출력하는 프로그램을 작성하시오.
< 처리조건 >
종류 2번의 경우 숫자의 진행 순서는 처음에 왼쪽에서 오른쪽으로 너비 n만큼 진행 한 후 방향을 바꾸어서 이를 반복한다.

종류1 종류2 종류3(2칸 오른쪽정렬)

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

4 4 4 4 4

5 5 5 5 5

1 2 3 4 5

5 4 3 2 1

1 2 3 4 5

5 4 3 2 1

1 2 3 4 5

1  2  3  4  5

2  4  6  8  10

 3  6  9  12 15

 4  8  12 16 20

 5 10 15 20 25


입력 형식
정사각형 한 변의 길이 n(n의 범위는 100 이하의 정수)과 종류 m(m은 1부터 3사이의 정수)을 입력받는다.

출력 형식
위에서 언급한 3가지 종류를 입력에서 한 변의 길이 n과 종류 m에 맞춰서 출력한다. 숫자 사이는 공백으로 구분하여 출력한다.

입력 예]
3 2

출력 예]
1 2 3 
3 2 1 
1 2 3


16.삼각형의 높이 n과 종류 m을 입력받은 후 다음과 같은 삼각형 형태로 출력하는 프로그램을 작성하시오.

종류1 종류2 종류3

          *

          **

          ***

          ****

          *****

          *****

          ****

          ***

          **

          *

*

***

*****

*******

*********

입력 형식 
삼각형의 크기 n(n의 범위는 100 이하의 자연수)과 종류 m(m은 1부터 3사이의 자연수)을 입력받는다.


출력 형식
위에서 언급한 3가지 종류를 입력에서 들어온 높이 n과 종류 m에 맞춰서 출력한다. 
입력된 데이터가 주어진 범위를 벗어나면 "INPUT ERROR!"을 출력한다.

입력 예]
 3 2

출력 예]
***
**
*


17. 삼각형의 높이 n과 종류 m을 입력받은 후 다음과 같은 삼각형 형태로 출력하는 프로그램을 작성하시오. 다음은 n이 5인 경우의 예시이다.

 

입력 형식
삼각형의 크기 n(n의 범위는 100 이하의 홀수)과 종류 m(m은 1부터 4사이의 정수)을 입력받는다.

출력 형식
위에서 언급된 4가지 종류를 입력에서 들어온 높이 n과 종류 m에 맞춰서 출력한다.
입력된 데이터가 주어진 범위를 벗어나면 "INPUT ERROR!"을 출력한다. '*'과 '*' 사이에는 공백이 없다.

입력 예]
5 1

출력 예]
*
**
***
**
*


18. 원하는 구구단의 범위를 입력받아 해당 구간의 구구단을 출력하는 프로그램을 작성하시오.

<처리조건>
(1) 구간의 처음과 끝을 입력받는다. 
(2) 입력된 구간은 반드시 처음 입력 값이 끝의 입력 값보다 작아야 하는 것은 아니다. 즉 입력된 구간의 범위는 증가하거나 감소하는 순서 그대로 출력되어야 한다.

입력 형식
구구단의 시작 범위 s,와 끝 범위 e를 입력받는다. (s와 e는 2부터 9사이의 정수) 
하나의 결과가 출력되면 프로그램을 종료한다.

출력 형식
시작 범위와 끝 범위사이의 구구단을 출력하되 모든 값과 부호 사이는 공백으로 구분하여 아래 출력 예와 같이 줄을 맞추어 출력해야 한다.

구구단 사이는 3개의 공백으로 구분한다. 데이터의 크기가 주어진 범위를 벗어날 경우는 "INPUT ERROR!"를 출력하고 s와 e를 다시 입력받는다.

입력 예]
4 3 

출력 예]
4 * 1 =  4   3 * 1 =  3
4 * 2 =  8   3 * 2 =  6
4 * 3 = 12   3 * 3 =  9
4 * 4 = 16   3 * 4 = 12
4 * 5 = 20   3 * 5 = 15
4 * 6 = 24   3 * 6 = 18
4 * 7 = 28   3 * 7 = 21
4 * 8 = 32   3 * 8 = 24
4 * 9 = 36   3 * 9 = 27


19. 20 이하의 자연수 N을 입력받아 재귀함수를 이용해서 문자열 “코딩컴강사”를 N번 출력하는 프로그램을 작성하시오.

입력 예]
3

출력 예]
코딩컴강사
코딩컴강사
코딩컴강사


20. 자연수 N을 입력받아 N부터 1까지 차례대로 출력하는 재귀함수를 작성하시오.

입력 예]
10

출력 예]
10 9 8 7 6 5 4 3 2 1

21. 자연수 N을 입력받아 N의 계승값을 구하는 재귀함수를 작성하시오.

입력 예]
5

출력 예]
120

22. 10자리 이하의 자연수를 입력받아 각 자리 숫자의 합을 출력하는 재귀함수를 작성하여 출력하시오.

입력 예]
123456789

출력 예]
45

'프로그램언어 > C언어' 카테고리의 다른 글

c언어 표준 함수  (0) 2019.10.08
c언어 구조체와 공용체  (0) 2019.10.07
c언어 포인터  (0) 2019.10.02
c언어 배열  (0) 2019.10.02
c언어 반복문(for, while, do ~ while)  (0) 2019.10.02