입력받은 정수 값들을 짝수와 홀수로 구분한 후 두번째 작은 홀수를 출력하는 프로그램을 작성한다.
먼저 main() 함수에서 배열 A[], B[], C[]의 크기를 각각 10, 10, 10으로 선언한다. 사용자로부터 2 이상 10 이하의 수를 하나 입력받은 후 그 수만큼의 양의 정수들을 입력받아서
배열 A[]에 저장한다. 이 후에 아래와 같이 정의되는 separate_arrays() 함수를 호출한 후 main() 함수에서 짝수와 홀수 값 전체(즉, 배열 B[]와 C[] 요소값)을 출력한다. 이후 main() 함수에서 find_second_smallest() 함수를 호출한 후 홀수(즉, 배열 C[] 요소값) 중에서 두 번째 작은 수를 출력한다. 단, separate_arrays() 함수의 전달인자 input_num은 사용자로부터 입력받은 2 이상 10 이하의 수를 의미하고 num_even_numbers와 num_odd_numbers는 반환될 짝수와 홀수의 수를 의미한다. find_second_smallest() 함수의 전달인자 length는 배열 C[]의 저장된 홀수 값의 수를 의미하며 반환값은 두번째 작은 홀수를 나타낸다.
.
void separate_arrays(int A[], int B[], int C[], int input_num, int num_even_numbers, int num_odd_numbers);
int find_second_smallest(int C[], int length);
.
이때, 같은 수가 중복되어 입력된 경우에는 그 값 중 하나만 저장해야 하고 나머지는 무시한다. 또한, 홀수의 수가 2개 미만인 경우에는 “두 번째 작은 홀수: 해당없음”메시지 출력한다.
<실행예시 1>
2이상 10이하의 수를 입력하시오 : 7
7개의 정수를 입력하시오 : 23 37 22 11 37 72 37
짝수 값: 22 72
홀수 값: 23 37 11
두 번째 작은 홀수: 23
<실행예시 2>
2이상 10이하의 수를 입력하시오 : 7
7개의 정수를 입력하시오 : 28 37 22 12 37 72 37
짝수 값: 28 22 12 72
홀수 값: 37
두 번째 작은 홀수: 해당없음
작성 코드
/*
함수 이름 : main
기능 : 사용자에게 입력받은 만큼의 양의 정수를 받아 홀수와 짝수로 구분하고 두번째 작은 홀수를 출력한다.
반환값 : int
매개변수 : void
작성 날짜 : 2023/04/04
작성자 : Aiden Lee
*/
#include <stdio.h>
void separate_arrays(int A[], int B[], int C[], int input_num, int* num_even_numbers, int* num_odd_numbers);
int find_second_smallest(int C[], int length);
int main(void) {
int A[10], B[10], C[10];
int temp;
int num, len = 0, even_numbers, odd_numbers;
printf("2이상 10이하의 수를 입력하시오 : ");
scanf("%d", &num);
printf("%d개의 정수를 입력하시오 : ", num);
for (int i = 0; i < num; i++) {
int duplication = 0;
scanf("%d", &temp); //배열에 저장하기 전 임시 저장
for (int j = 0; j < i; j++)
if (A[j] == temp) //중복 검사
duplication++;
if (duplication == 0) //중복이 없는 경우 배열에 저장
A[len++] = temp;
}
separate_arrays(A, B, C, len, &even_numbers, &odd_numbers);
printf("짝수 값 : ");
for (int i = 0; i < even_numbers; i++)
printf("%d ", B[i]);
printf("\n홀수 값 : ");
for (int i = 0; i < odd_numbers; i++)
printf("%d ", C[i]);
if (odd_numbers < 2) {
printf("\n두 번째 작은 홀수 : 해당없음");
}
else {
printf("\n두 번째 작은 홀수 : %d", find_second_smallest(C, odd_numbers));
}
return 0;
}
/*
함수 이름 : separate_arrays
기능 : 배열을 인자로 받아 홀수와 짝수를 구분해 두 배열에 저장
반환값 : void
매개변수 : int A[], int B[], int C[], int input_num, int* num_even_numbers, int* num_odd_numbers
작성 날짜 : 2023/04/04
작성자 : Aiden Lee
*/
void separate_arrays(int A[], int B[], int C[], int input_num, int* num_even_numbers, int* num_odd_numbers) {
int j = 0, k = 0;
for (int i = 0; i < input_num; i++) {
if (A[i] % 2 == 0) //짝수인 경우
B[j++] = A[i];
else //홀수인 경우
C[k++] = A[i];
}
*num_even_numbers = j;
*num_odd_numbers = k;
}
/*
함수 이름 : find_second_smallest
기능 : 입력받은 배열에서 두번째 작은 수를 출력
반환값 : int
매개변수 : int C[], int length
작성 날짜 : 2023/04/04
작성자 : Aiden Lee
*/
int find_second_smallest(int C[], int length) {
int smallest_index = 0;
for (int i = 1; i < length; i++) { //가장 작은 수의 인덱스 찾기
if (C[smallest_index] > C[i])
smallest_index = i;
}
int second_smallest;
if (smallest_index == 0) { //가장 작은 수가 배열의 첫 번째에 있는 경우
second_smallest = C[1];
for(int i = 1; i < length; i++)
if(C[i] < second_smallest)
second_smallest = C[i];
}
else { //가장 작은 수가 배열의 첫 번째에 있지 않은 경우
second_smallest = C[0];
for (int i = 0; i < length; i++) {
if (i != smallest_index && C[i] < second_smallest)
second_smallest = C[i];
}
}
return second_smallest;
}
2이상 10이하의 수를 입력하시오 : 7
7개의 정수를 입력하시오 : 23 37 22 11 37 72 37
짝수 값 : 22 72
홀수 값 : 23 37 11
두 번째 작은 홀수 : 23
2이상 10이하의 수를 입력하시오 : 7
7개의 정수를 입력하시오 : 28 37 22 12 37 72 37
짝수 값 : 28 22 12 72
홀수 값 : 37
두 번째 작은 홀수 : 해당없음
2이상 10이하의 수를 입력하시오 : 9
9개의 정수를 입력하시오 : 5 1 11 43 33 61 7 50 90
짝수 값 : 50 90
홀수 값 : 5 1 11 43 33 61 7
두 번째 작은 홀수 : 5
2이상 10이하의 수를 입력하시오 : 9
9개의 정수를 입력하시오 : 1 30 2 22 56 44 90 71 8
짝수 값 : 30 2 22 56 44 90 8
홀수 값 : 1 71
두 번째 작은 홀수 : 71