사이먼's 코딩노트

[C언어] 함수 문제풀이(1) 본문

C언어

[C언어] 함수 문제풀이(1)

simonpark817 2024. 1. 24. 18:00
  • 이번엔 함수와 관련된 문제들을 풀어봅시다.
  • 모든 문제는 main 함수 안에 코드는 모두 작성되어 있는 상태에서 새로운 함수를 어떻게 구현하는지를 풀어보는 것이다.

 

[문제 1]

  • 입력받은 정수가 짝수인지 아닌지 판별해주는 함수를 구현해보자.
#include <stdio.h>

int is_even(int num) {
    if(num % 2 == 0) {
        return 1;
    }
    else {
        return 0;
    }

    return 0;
}

int main(void) {
    printf("17은(는) 짝수인가요? : %d\n", is_even(17));
    printf("500은(는) 짝수인가요? : %d\n", is_even(500));
    return 0;
}
  • main 함수 안에 출력문에서 is_even() 라는 함수에 17, 500이라는 인자를 넣었을 때 해당 정수가 짝수인지 아닌지를 판별해 주는 함수를 만들어야한다.
  • 짝수를 판별하는 방법은 어느 숫자든 2로 나눴을 때 나머지가 0이 되면 짝수이고, 아니면 홀수이다.
  • is_even() 함수에서는 조건문을 사용해서 2로 나눴을 때 나머지가 0이 되면 return 값은 참을 의미하는 1로 주었다.

 

[문제 2]

  • 입력받은 정수가 3의 배수인지 알려주는 함수를 구현해보자.
#include <stdio.h>

#pragma warning (disable: 4996)

int is_3_multiple(int num) {
    int is_3_num;

    if(num % 3 == 0) {
        is_3_num = 1;
    }
    else {
        is_3_num = 0;
    }

    return is_3_num;
}

int main(void) {
    printf("10은(는) 3의 배수인가요? : %d\n", is_3_multiple(10));
    printf("12은(는) 3의 배수인가요? : %d\n", is_3_multiple(12));

    return 0;
}
  • main 함수 안에 출력문에서 is_3_multiple() 라는 함수에 10, 12이라는 인자를 넣었을 때 해당 정수가 3의 배수인지 아닌지를 판별해 주는 함수를 만들어야한다.
  • 3의 배수를 판별하는 방법은 어느 숫자든 3으로 나눴을 때 나머지가 0이 되면 3의 배수이다.
  • 이번에는 is_3_num 이라는 변수를 추가하여 해당 변수에 들어있는 값을 return 하려고 한다.
  • is_even() 함수에서는 조건문을 사용해서 3으로 나눴을 때 나머지가 0이 되면 is_3_num에 참을 의미하는 1을 넣어준다.
  • 조건문이 종료되고 조건에 맞춰 is_3_num에 들어간 숫자를 return 해준다.

 

[문제 3]

  • 입력받은 정수가 100보다 큰지 알려주는 함수를  구현해보자.
#include <stdio.h>

int is_bigger_than_100(int num) {
    int is_bigger_num;

    return is_bigger_num = num > 100;
}

int main(void) {
    printf("128은(는) 100보다 큽니다. : %d\n", is_bigger_than_100(128));
    printf("28은(는) 100보다 큽니다. : %d\n", is_bigger_than_100(28));
    return 0;
}
  • main 함수 안에 출력문에서 is_bigger_than_100() 라는 함수에 128, 28이라는 인자를 넣었을 때 해당 정수가 100보다 큰지 아닌지를 판별해 주는 함수를 만들어야한다.
  • 이번에는 is_bigger_num 이라는 변수를 추가하여 해당 변수에 들어있는 값을 return 하려고 한다.
  • 조건문을 이용해서 num > 100 과 같이 조건을 줘서 return 값을 반환해도 되지만 보다 간단하게 하기 위해서 return값에 바로 논리연산을 한다.
  • 그렇게 되면 참일 때 1, 거짓일 때 0을 출력하게 된다.

 

[문제 4]

  • 입력받은 정수가 100보다 크고 200보다 작은지 알려주는 함수를 구현해보자.
#include <stdio.h>

int is_bigger_than_100_and_less_than_200(int num) {
    return num > 100 && num < 200;
}

int main(void) {
    printf("38은(는) 100보다 크고 200보다 작습니다. : %d\n", is_bigger_than_100_and_less_than_200(38));
    printf("197은(는) 100보다 크고 200보다 작습니다. : %d\n", is_bigger_than_100_and_less_than_200(197));
    return 0;
}
  • main 함수 안에 출력문에서 is_bigger_than_100_and_less_than_200() 라는 함수에 38, 197이라는 인자를 넣었을 때 해당 정수가 100 초과 그리고 200 미만인지 아닌지를 판별해 주는 함수를 만들어야한다.
  • 이번에는 바로 return값에 논리연산을 집어넣어 반환해보자.
  • 그렇게 되면 참일 때 1, 거짓일 때 0을 출력하게 된다.

 

[문제 5]

  • 입력받은 정수의 모든 약수를 화면에 출력해주는 함수를 구현해보자.
#include <stdio.h>

void print_divisors(int num) {

    for(int i = 1; i <= num; i++) {
        if(num % i == 0) {
            printf("약수 : %d\n", i);
        }
    }
}

int main(void) {

    print_divisors(1000);

    return 0;
}
  • main 함수 안에 print_divisors() 라는 함수에 1000이라는 인자를 넣었을 때 해당 정수의 약수를 모두 출력하는 함수를 만들어야한다.
  • print_divisors() 함수는 return 값 없이 함수 자체에서 실행되고 끝이기 때문에 void로 함수를 선언해준다.
  • 반복문과 조건문을 사용해서 1부터 매개변수까지 반복하고 매개변수를 각각 1씩 증가하는 변수 i로 나눴을 때 나누어 떨어진다면 약수로 판단한다.

 

[문제 6]

  • 입력받은 정수의 모든 약수의 합을 리턴하는 함수를 구현해보자.
#include <stdio.h>

int get_divisor_sum(int num) {
    int divisor_sum = 0;

    for(int i = 1; i <= num; i++) {
        if(num % i == 0) {
            divisor_sum += i;
        }
    }

    return divisor_sum;
}

int main(void) {

    int sum;
    sum = get_divisor_sum(10);
    printf("10의 모든 약수의 합은 : %d", sum);

    return 0;
}
  • main 함수 안에 get_divisor_sum() 라는 함수에 10이라는 인자를 넣었을 때 해당 정수의 모든 약수의 합을 출력하는 함수를 만들어야한다.
  • get_divisor_sum() 함수에는 main 함수로 반환될 변수 divisor_sum을 생성한다.
  • 반복문과 조건문을 사용해서 1부터 매개변수까지 반복하고 매개변수를 각각 1씩 증가하는 변수 i로 나눴을 때 나누어 떨어진다면 약수로 판단한다.
  • 추출된 약수들은 divisor_sum 변수에 모두 합하고, return 값에 divisor_sum을 넣어준다.

 

[문제 7]

  • 소수인지 아닌지 체크하는 함수를 구현해보자.
#include <stdio.h>

#pragma warning (disable: 4996)

int is_prime_number(int num) {

    if(num <= 1) {
        return 0;
    }

    for(int i = 2; i < num; i++) {
        if(num % i == 0) {
            return 0;
        }
    }

    return 1;
}

int main(void) {

    for(int num = 1; num <= 15; num++){
        printf("%d는 소수인가 아닌가 : %d\n", num, is_prime_number(num));
    }

    return 0;
}
  • main 함수 안에 is_prime_number() 라는 함수에 1부터 15까지 인자를 넣었을 때 해당 정수가 소수인지 아닌지 출력하는 함수를 만들어야한다.
  • 소수의 조건은 해당 정수의 약수가 1과 자기자신만 있을 때 소수로 판단된다.
  • 이 때, 1은 소수가 될 수 없다.
  • is_prime_number() 함수에서 먼저 조건문을 사용하여 1이하의 숫자는 소수가 아니므로 return 값을 0으로 해준다.
  • 숫자 1이 제외된 상황에서 자기자신 숫자 외에 그 사이 숫자들을 자기자신과 나눠서 0이 되는 숫자가 없다면 소수로 판단한다.
  • 예를 들어 7을 판별하고자 할 때, 2부터 6까지 7로 나눴을 때 나머지가 0이 되는 숫자가 없기 때문에 소수이다.
  • 반대로 9를 판별하고자 할 때, 2부터 8까지 9로 나눴을 때 나머지가 0이 되는 숫자가 3이 있기 때문에 소수가 아니다.
  • 총 2개의 조건문을 통해 return 값을 0으로 해주고, 두 조건이 모두 아닐 때  return 값을 1로 하여 참 임을 증명한다.
  • 그렇게 되면 참일 때 1, 거짓일 때 0을 출력하게 된다.

 

[문제 8]

  • 입력받은 숫자가 10이라고 할때 1부터 10 사이에 존재하는 모든 소수를 출력하는 함수를 구현해보자.
#include <stdio.h>

#pragma warning (disable: 4996)

int is_prime_number(int num) {

    int prime_num;

    if(num <= 1) {
        return 0;
    }

    for(int i = 2; i < num; i++) {
        if(num % i == 0) {
            return 0;
        }
        else {
            prime_num = num;
        }
    }
    return prime_num;
}

int print_1_to_n_prime_numbers(int num) {

    for(int i = 1; i <= num; i++)
    {
        if(is_prime_number(i)) {
            printf("1부터 %d 사이에 존재하는 소수 : %d\n",num, i);
        }
    }
}


int main(void) {

    print_1_to_n_prime_numbers(10);

    return 0;
}
  • main 함수 안에 print_1_to_n_prime_numbers() 라는 함수에 10이라는 인자가 있고, 1부터 해당 인자 사이에 존재하는 모든 소수를 출력하는 함수를 만들어야한다.
  • 문제 7과 마찬가지로 소수를 판별하는 함수인 is_prime_number() 라는 함수를 생성한다.
  • 이번엔 1부터 10까지 소수를 하나씩 체크해야되기 때문에 다른 함수인 print_1_to_n_prime_nubmers() 를 추가 생성한다.
  • print_1_to_n_prime_nubmers() 에서의 매개변수가 main 함수의 인자이다.
  • 10까지의 소수를 구한다면 print_1_to_n_prime_nubmers() 함수에서 1부터 10까지 소수를 판별하는 반복문을 실행하고, 해당 반복문 안에는 소수를 판별하는 함수인 is_prime_number() 함수를 조건문으로 실행시킨다.
  • 그렇게 되면 print_1_to_n_prime_nubmers() 함수에서 소수가 판별된다면 출력문을 출력한다.
반응형

'C언어' 카테고리의 다른 글

[C언어] 포인터  (0) 2024.02.02
[C언어] 함수 문제풀이(2) / 서식지정자와 자료형  (0) 2024.01.29
[C언어] 함수  (1) 2024.01.23
[C언어] 반복문(for, while)  (0) 2024.01.19
[C언어] 연산자 / 조건문(if, else if, else)  (0) 2024.01.19