본문 바로가기

C C++ language

C언어 세 수중 가장 큰/작은 수 출력방법 [with source]

안녕하십니까! 오늘은 간단하게 세 수중 가장 큰 수, 가장 작은 수를 출력하는 방법에 대해 알아보도록 하겠습니다. C언어를 배울때 많이 사용되는 예제이기도 하지요.

 

max함수의 원리는 다음과 같습니다.

1. 만약 세수 a, b, c가 입력되었을때

2-1. a가 b보다 크다면, a와 c중 큰 것을 반환한다.

2-2. b가 a보다 크다면, b와 c중 큰것을 반환한다.

간단하죠?

 

min함수의 원리도 max함수와 거의 유사합니다.

1. 만약 세 수 a, b, c가 입력되었을때, 

2-1. a가 b보다 작다면, a와 c중 작은 것을 반환한다.

2-1. b가 a보다 작다면, b와 c중 작은 것을 반환한다.

 

그럼 이제 이것에 맞추어 코드를 작성해봅시다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int max(int a, int b, int c) {
	if (a > b) {
		return (a > c) ? a : c;
	}
	else {
		return (b > c) ? b : c;
	}
}

int min(int a, int b, int c) {
	if (a < b) {
		return (a < c) ? a : c;
	}
	else {
		return (b < c) ? b : c;
	}
}

int main(void) {
	int a, b, c;
	printf("three number : ");
	scanf("%d %d %d", &a, &b, &c);
	printf("max number : %d\n", max(a, b, c));
	printf("min number : %d\n", min(a, b, c));
	return 0;
}

main이게 세 수를 입력받은 뒤, max, min함수에서 계산한 max, min값을 수정하고 있습니다.

#define CRT_SE . . . 는 visual studio에서 scanf를 사용하면 보안 경고가 뜨기 떄문에, 이를 막는 용도로 사용되었습니다.

만약 visual studio에서 코딩을 하고 있지 않으며, 제거해도 무방한 부분입니다.

 

우리는 이 함수를 더 줄일 수도 있습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int max(int a, int b, int c) {
	return (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
}

int min(int a, int b, int c) {
	return (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c);
}

int main(void) {
	int a, b, c;
	printf("three number : ");
	scanf("%d %d %d", &a, &b, &c);
	printf("max number : %d\n", max(a, b, c));
	printf("min number : %d\n", min(a, b, c));
	return 0;
}

대부분의 소스는 전과 같으나, if ... else문이 삼항연산자로 대체되었습니다. 물론 이전에 만든 코드와 원리도 같으며, 성능도 거의 똑같습니다.

 

상황에 따라 두 소스중 적절한 것으로 골라 사용하시면 될것 같네요~

그럼 제는 이쯤에서 글을 줄이도록 하겠습니다.

좋은 하루 되세요~.