포인터 예제 완성

'혼자 공부하는 C언어' 9강 도전실전 예제(미니정렬 프로그램) 코딩

by Younggi Seo





문제

키보드로 실수 3개를 입력한 다음 큰 숫자부터 작은 숫자로 정렬한 뒤 출력하는 프로그램을 작성합니다. 다음 코드와 출력 결과를 참고하여 line_up 함수(하얀색 바탕의 사각형 내부 루틴)를 작성하세요. line_up 함수에는 이미 정의된 swap 함수를 호출하여 구현하세요.

Screenshot 2026-03-03 at 19.17.24.png




Screenshot 2026-03-04 at 10.49.42.png a, b, c 세 실수가 있다고 가정할 때 각각의 값을 서로 비교하는 게 아니라, 앞에서 하나씩 비교(if-if-if)하여 큰 값부터 maxp, midp, minp 주소에 대입함


포인터에 대한 감이 어느 정도 잡혔으면, 아래의 문제를 보고 line_up 함수 부분만 위의 필자의 소스코드처럼 완성할 수 있다.



필자는 제어문 if를 하나 쓰고 분기별로 else if을 쓴 반면(조건 분기)에 다른 블로거는 아래와 같이 if를 연달아 써서 모든 조건을 만족하는 루틴으로 소스코드를 짰다. 문제에서 요구하는 세 실수를 큰 순서대로 정렬하려면 세 가지 조건 모두 다 만족시키는 올인원 루틴을 거쳐서 정렬된 값 세 개를 main() 함수 아래의 line_up(&max, &mid, &min) 함수 호출을 통해 반환해야 한다.


어쨌든 분기의 조건을 비교해서 swap 함수에 매개변수로 인자들을 전달하는 구조는 같다.

최솟값(min)과 최댓값(max) 비교 조건이 안 보이지만, 정확한 로직이다.


https://cheongung.github.io/c/8/


아니면, 아래와 같이 더 간결하게 코딩할 수 있다.

그런데 swap 함수를 호출할 때 매개변수의 순서는 관계없다. 대소관계가 변수명과 달리 반대일 경우, 서로의 값을 바꾸는 역할을 하니 위의 로직대로 진행했을 때도 큰 수대로 정렬

https://datamaster5184.tistory.com/9



참조)

혼공 C언어 포인터 궁금한 이야기 동영상 강좌