[정답] 52. 함수 개요

◈ 기본 연습
1. 두 개의 정수를 입력 매개변수로 전달받아 큰 수를 반환하는 함수를 작성하시오.
그리고 작성한 함수를 이용해서 2, 9 중에 큰 수를 출력하시오.
답:

//두 개의 정수를 입력 매개변수로 전달받아 큰 수를 반환하는 함수 작성
//그리고 작성한 함수를 이용해서 2, 9 중에 큰 수를 출력
 
#include <stdio.h>
 
int FindBig(int a, int b);
int main(void)
{
    printf("%d\n", FindBig(2, 9));
    return 0;
}
int FindBig(int a, int b)
{
    if (a > b)
    {
        return a;
    }
    return b;
}

2. 하나의 정수를 입력 매개변수로 전달받아 홀수일 때는 0을 반환하고 짝수일 때는 1을 반환하는 함수를 작성하시오.
그리고 작성한 함수를 이용해서 1~10 사이에 몇 개의 짝수가 있는지 출력하시오.
답:

//하나의 정수를 입력 매개변수로 전달받아 홀수일 때는 0을 반환하고 짝수일 때는 1을 반환하는 함수
//그리고 작성한 함수를 이용해서 1~10 사이에 몇 개의 짝수가 있는지 출력
 
#include <stdio.h>
 
int IsEven(int num);
int main(void)
{
    int i;
    int count = 0;
    for (i = 1; i <= 10; i++)
    {
        if (IsEven(i))
        {
            count++;
        }
    }
    printf("1~10 사이의 짝수 개수:%d\n", count);
    return 0;
}
int IsEven(int num)
{
    return num % 2==0;
}

3. 하나의 정수를 입력 매개변수로 전달받아 소수일 때는 1을 반환하고 그렇지 않을 때는 0을 반환하는 함수를 작성하시오.
여기서 소수란 1과 자기 자신만을 약수로 갖는 수를 말합니다.
그리고 작성한 함수를 이용해서 1~100 사이에 몇 개의 소수가 있는지 출력하시오.
답:

//하나의 정수를 입력 매개변수로 전달받아 소수인지 판별하는 함수 작성
//작성한 함수를 이용해서 1~100 사이에 몇 개의 소수가 있는지 출력
 
#include <stdio.h>
int IsPrime(int n);
int main(void)
{
    int i;
    int count = 0;
    for (i = 1; i <= 100; i++)
    {
        if (IsPrime(i))
        {
            count++;
        }
    }
    printf("1~100 사이의 소수는 %d개\n", count);
    return 0;
}
int IsPrime(int n)
{
    int i;
    for (i = 2; i < n; i++)
    {
        if (n%i == 0)
        {
            return 0;
        }
    }
    return 1;
}

4. 두 개의 정수를 입력 매개변수로 전달받아 최소 공배수를 구하는 함수를 작성하시오.
답:

//최소 공배수를 구하는 함수 작성
#include <stdio.h>
int FindLCM(int a, int b);
 
int main(void)
{
    int a, b;
    int lcm;
    
    printf("두 개의 정수 입력:");
    scanf_s("%d%d", &a, &b);
 
    lcm = FindLCM(a, b);
    if (lcm == -1)
    {
        printf("int 형식 표현 범위에서 최소 공배수를 구할 수 없습니다.\n");
    }
    else
    {
        printf("%d와 %d의 최소 공배수는 %d\n", a, b, lcm);
    }
 
    return 0;
}
 
int FindLCM(int a, int b)
{
    int lcm;
    if (a > b)//a가 b보다 크면
    {
        //두 수를 교환
        int temp = a;
        a = b;
        b = temp;
    }
    for (lcm = b; ; lcm += b)
    {
        if (lcm%a == 0)
        {
            return lcm;
        }
    }
    return -1;    
}

5. 두 개의 정수를 입력 매개변수로 전달받아 최대 공약수를 구하는 함수를 작성하시오.
답:

//최대 공약수를 구하는 함수 작성
#include <stdio.h>
int FindGCD(int a, int b);
 
int main(void)
{
    int a, b;
    int lcm;
 
    printf("두 개의 정수 입력:");
    scanf_s("%d%d", &a, &b);
 
    lcm = FindGCD(a, b);
    if (lcm == -1)
    {
        printf("최대 공약수를 구할 수 없습니다.\n");
    }
    else
    {
        printf("%d와 %d의 최대 공약수는 %d\n", a, b, lcm);
    }
 
    return 0;
}
 
int FindGCD(int a, int b)
{
    int gcd;
    if (a > b)//a가 b보다 크면
    {
        //두 수를 교환
        int temp = a;
        a = b;
        b = temp;
    }
    for (gcd = a; ; gcd--)
    {
        if ((a%gcd==0)&&(b%gcd == 0))
        {
            return gcd;
        }
    }
    return -1;
}