본문 바로가기
Program/C

18. C언어 함수 예

by Murciellago 2021. 11. 28.
반응형
SMALL

이 장에서는 함수와 재귀 함수에 대한 특정 작업을 수행하는 코드 블록입니다.

 

1. 사용자 정의 함수

2. 사용자 정의 함수의 유형

3. 지역변수의 범위

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
#include <stdio.h>
int checkPrimeNumber(int n);
int main() {
    int n1, n2, i, flag;
    printf("Enter two positive integers: ");
    scanf("%d %d"&n1, &n2);
    printf("Prime numbers between %d and %d are: ", n1, n2);
    for (i = n1 + 1; i < n2; ++i) {
 
        // flag will be equal to 1 if i is prime
        flag = checkPrimeNumber(i);
 
        if (flag == 1)
            printf("%d ", i);
    }
    return 0;
}
 
// user-defined function to check prime number
int checkPrimeNumber(int n) {
    int j, flag = 1;
    for (j = 2; j <= n / 2++j) {
        if (n % j == 0) {
            flag = 0;
            break;
        }
    }
    return flag;
}
 
 

 

output)

Enter two positive integers: 5
50
Prime numbers between 5 and 50 are: 7 11 13 17 19 23 29 31 37 41 43 47

 

첫숫자가 더 큰 숫자를 입력하면 이 프로그램이 의도한 대로 작동하지 않으니 문제를 해결하려면 먼저 숫자를 바꿔야 한다.

 

 

 

예) 재귀함수를 사용한 자연수 합

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 자연수의 합
#include <stdio.h>
int addNumbers(int n);
int main() {
    int num;
    printf("Enter a positive integer: ");
    scanf("%d"&num);
    printf("Sum = %d", addNumbers(num));
    return 0;
}
 
int addNumbers(int n) {
    if (n != 0)
        return n + addNumbers(n - 1);
    else
        return n;
}
 
 

 

output)

Enter a positive integer: 7
Sum = 28

 

사용자가 7을 입력했다고 가정하면 처음에는 main()문 인수로 전달된 7과 함께 addNumbers() 를 호출하고 addNumber() 결과에 따라 숫자 7이 추가됩니다.

다음 함수 호출 addNumber(6)에서 addNumber(5)로 계속해서 진행하고 int n 값이 0이 될때까지 재귀함수를 호출한다.

addNumber(0)으로 main() 함수에 정수의 합을 반환하여 계산을 마무리한다

 

 

예) 재귀함수를 사용하여 문장 뒤집기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
void reverseSentence();
int main() {
    printf("Enter a sentence: ");
    reverseSentence();
    return 0;
}
 
void reverseSentence() {
    char c;
    scanf("%c"&c);
    if (c != '\n') {
        reverseSentence();
        printf("%c", c);
    }
}
 
 

 

 output)

Enter a sentence: happy ending
gnidne yppah

 

이 프로그램은 먼저 enter asentence를 출력하고 reverseSentence() 함수를 호출합니다.

이 기능은 사용자가 입력한 첫 글자를 저장하고 C 변수가 \n(개행) 이외의 문자를 reverseSentence() 함수를 다시 호출한다. 이 프로세스는 사용자가 enter키를 누를때까지 계속된다.

사용자가 enter키를 누르면 마지막 문자부터 출력하게 된다.

 

 

예) 2진수를 10진수로 변환하는 프로그램

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
#include <stdio.h>
#include <math.h>
 
// function prototype
int convert(long long);
 
int main() {
  long long n;
  printf("Enter a binary number: ");
  scanf("%lld"&n);
  printf("%lld in binary = %d in decimal", n, convert(n));
  return 0;
}
 
// function definition
int convert(long long n) {
  int dec = 0, i = 0, rem;
 
  while (n!=0) {
    rem = n % 10;
    n /= 10;
    dec += rem * pow(2, i);
    ++i;
  }
 
  return dec;
}
 

 

output)

Enter a binary number: 10101010
10101010 in binary = 170 in decimal

 

프로그램에는 math.h 에서 수학 연산을 수행하기 위한 헤더파일이 포함되어 있다. 사용자에게 2진수를 입력하고 convert() 를 10진수로 변환하는 함수에 전달하도록 요청한다. 직접 확인해 보는것을 추천한다.

 

 

예) 10진수를 2진수로 변환하는 프로그램

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
#include <stdio.h>
#include <math.h>
 
long long convert(int);
 
int main() {
  int n, bin;
  printf("Enter a decimal number: ");
  scanf("%d"&n);
  bin = convert(n);
  printf("%d in decimal =  %lld in binary", n, bin);
  return 0;
}
 
long long convert(int n) {
  long long bin = 0;
  int rem, i = 1;
 
  while (n!=0) {
    rem = n % 2;
    n /= 2;
    bin += rem * i;
    i *= 10;
  }
 
  return bin;
}
cs

 

output)

Enter a decimal number: 170
170 in decimal =  10101010 in binary

 

위 프로그램은 2진수 <=> 10진수 반대대는 프로그램이므로 이것도 직접해 보는것을 추천한다.

반응형
LIST

댓글