사이먼's 코딩노트
[C언어] 함수 문제풀이(1) 본문
- 이번엔 함수와 관련된 문제들을 풀어봅시다.
- 모든 문제는 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 |