이 장에서는 함수와 재귀 함수에 대한 특정 작업을 수행하는 코드 블록입니다.
예) 두 정수 사이의 소수
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진수 반대대는 프로그램이므로 이것도 직접해 보는것을 추천한다.
'Program > C' 카테고리의 다른 글
17. C언어 지역변수의 범위 (0) | 2021.11.28 |
---|---|
16. C언어 재귀함수 (0) | 2021.11.28 |
15. C언어 프로그래밍의 사용자 정의 함수 유형 (0) | 2021.11.28 |
14. C언어 사용자 정의 함수 (0) | 2021.11.28 |
13. C언어 전처리기와 매크로 (0) | 2021.11.17 |
댓글