예제 53
함수 이용해서 두 수 중 큰 수 찾기
두 수를 입력받고, 그 중 큰 수를 찾아 반환한다.
반환하는 로직은 func 함수를 정희하고 사용해서 두 수 중 큰 수를 찾는다.
#include<stdio.h>
int func(int,int);
int main(void)
{
int a,b;
printf("두 수를 입력하시오: ");
scanf("%d %d",&a,&b);
printf("%d와 %d중 작은 수는 %d",a,b,func(a,b));
return 0;
}
int func(int a,int b)
{
int min;
if(a > b)
min = b;
else
min = a;
return min;
}
예제54
함수 이용해서 세 수 중 큰 수 찾기
세 수 중 큰 수를 찾아 반환하는 func 함수를 이용해서 세 수 중 큰 수를 찾는다.
#include<stdio.h>
int imax(int,int,int);
int main(void)
{
int num1,num2,num3;
printf("세 정수를 입력하시오.\n");
scanf("%d %d %d",&num1,&num2,&num3);
printf("가장큰수:%d\n",imax(num1,num2,num3));
return 0;
}
int imax(int a,int b,int c)
{
int max;
if (a>b && a>c)
max=a;
else if (b>a && b>c)
max=b;
else if (c>a && c>b)
max=c;
return max;
}
예제55
함수 이용해서 1부터 10까지의 약수 구하기
임의의 수에 대한 약수 구하는 func 함수를 이용해서 1부터 10까지의 수에 대한 약수를 구한다.
#include <stdio.h>
void func(int b);
int main(void){
int b;
printf("구하고자 하는 약수, 10 이하의 수를 입력하시오.");
scanf("%d", &b);
func(b);
}
void func(int b){
int i;
i = 1;
printf("1\n");
while(i < b){
i++;
if(b % i != 0){
continue;
}
printf("%d\n", i);
}
}
예제56
재귀함수 이용해서 1부터 입력 받은 수까지의 합 구하기
재귀함수를 사용하는 방법을 알아보겠습니다.
1부터 3까지의 합은 다음과 같습니다.
3 + 2 + 1
이것을 다음과 같이 나타낼 수 있습다.
3 + 1부터 2까지의 합
여기서 ‘1부터 3까지의 합’을 함수 호출 형식으로 다음과 같이 나타낼 수 있다.
sum(3)
sum(3)은 다음과 같은 의미를 지닌다
3 + sum(2)
3을 a로 일반화 시키면 다음과 같은데 1부터 a까지의 합을 의미한다
sum(a) = a + sum(a - 1)
그런데 1부터 1까지의 합은 1이므로 a가 1인 경우에는 1이 된다
sum(1) = 1
이런 내용을 포함해서 다시 정리하면 다음과 같다.
sum(a) = 1 (n ≤ 1)
= a + sum(a - 1) (그 외)
이런 개념을 이용해서 1부터 임의의 수까지의 합을 구하는 sum 재귀함수를 만들어서 1부 터 입력 받은 수까지의 합을 구한다.
//예제 56
#include <stdio.h>
int sum (int a);
int main()
{
int num,result;
printf("정수 입력 >> ");
scanf("%d",&num);
result = sum(num);
printf("%d\n\n",result);
return 0;
}
int sum(int a)
{
int r;
if (a <= 1)
{
r = 1;
}
else
{
r = a+sum(a-1);
}
return r;
}
예제57
재귀함수 이용해서 피보나치수열 구하기
피보나치수열의 a번째 항은 다음과 같다.
fibo(a) = 1 (a≤2)
= fibo(a-1) + fibo(a-2) (그 외)
이런 개념을 이용해서 피보나치수열의 임의의 항을 구하는 fibo 재귀함수를 만들어서 입력 받은 위치에 대한 피보나치수를 구한다.
#include<stdio.h>
int fibo(int a);
int main(void)
{
int num,result;
printf("정수 입력 >>");
scanf("%d",&num);
result = fibo(num);
printf("%d",result);
}
int fibo(int a)
{
if(a == 1 || a == 2)
{
return 1;
}
else
{
return fibo(a-1) + fibo(a-2);
}
return 0;
}
과제
과제 47
함수를 이용해서 두 수중 작은 수를 찾는 순서도와 C 프로그램을 작성하여라.
//과제 47
#include <stdio.h>
int min(int a,int b);
int main()
{
int num1,num2,result;
printf("정수 두개를 입력하세요: ");
scanf("%d %d",&num1, &num2);
result = min(num1,num2);
printf("%d 와 %d 중 최소값 >> %d\n\n",num1,num2,result);
}
int min(int a, int b)
{
int min;
if( a > b)
{
min = b;
}
return b;
}
과제 48
소수 판별하는 함수를 이용해서 2부터 10까지의 수에 대해 소수인지 아닌지를 출력하는 순서도와 C 프로그램을 작성하여라
//과제 48
#include <stdio.h>
int chk();
int main()
{
chk();
}
int chk()
{
int i,j,chk;
for(i = 2; i <= 10; i++)
{
chk = 1;
for(j = 2; j < i; j++)
{
if(i % j == 0)
{
chk = 0;
break;
}
}
if(chk == 1)
{
printf("%d : 소수입니다.\n",i);
}
else
{
printf("%d : 소수가 아닙니다.\n",i);
}
}
}
과제 49
계승을 구하는 재귀함수를 이용해서 입력 받은 수에 대한 계승을 구하는 순서도와 C 프로그램을 작성하여라.
#include<stdio.h>
int fact(int a);
int main()
{
int num,result;
printf("정수 입력 >> ");
scanf("%d",&num);
result = fact(num);
printf("%d의 계승: %d\n\n",num,result);
return 0;
}
int fact(int a)
{
int i,fact;
fact = 1;
for(i = 1; i <= a; i++)
{
fact = fact * i;
}
return fact;
}