C:과제2

aiden·2023년 4월 6일
0

C

목록 보기
13/28

입력받은 정수 값들을 짝수와 홀수로 구분한 후 두번째 작은 홀수를 출력하는 프로그램을 작성한다.
먼저 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

profile
파인애플 좋아하세요?

0개의 댓글