[C++] 7주차 과제 리뷰

yeohn·2022년 11월 27일
0

2022-2 C++ 과제 리뷰

목록 보기
7/10

문제

세 개의 숫자를 오름차순으로 정렬하는 함수를 작성하여라.
함수 sortThreeNumbers(formal parameters)에서는 숫자를 정렬만 하고, console에 출력을 하지 않는다.
main 함수에서 세 숫자를 입력받아 함수를 호출하고, 그 결과를 console에 출력하는 프로그램 작성.
(문제 출처 - C++로 시작하는 객체지향 프로그래밍 6.8)

주어진 코드

#include <iostream>
  using namespace std;
// function prototype
// 수정 가능
void sortThreeNumbers(formal parameters); 
// main 함수는 수정할 수 없다.
int main()
{
 double number1, number2, number3;
 cout << " Enter three numbers: ";
 cin >> number1 >> number2 >> number3;
 sortThreeNumbers(number1, number2, number3);
 cout << "After sorting three numbers:" << endl;
 cout << number1 << " " << number2 << " " << number3 << endl;
 return 0;
}
// function implementaion
// 이 함수에서는 숫자를 정렬만 하고 console에 출력을 하지 않는다.
// 수정 가능
void sortThreeNumbers(formal parameters)
{
...
}

수정 가능한 부분에서는 함수의 데이터타입을 수정하고 참조변수를 활용했다.
출력을 하지 않고 정렬만 할 때, void 함수를 사용하면 return 값이 없어 정확한 함수 실행을 할 수 없다.
(void -> double)


작성한 코드

#include <iostream>
using namespace std;

double sortThreeNumbers(double& number1, double& number2, double& number3);
//함수 원형, 참조변수 사용 / 데이터타입&_변수명
  
int main()
{
	double number1, number2, number3; // 메인문에 원래 변수가 
                                      //있어야 참조변수 사용 가능
	cout << " Enter three numbers: ";
	cin >> number1 >> number2 >> number3;
	sortThreeNumbers(number1, number2, number3);
  
	cout << "After sorting three numbers:" << endl;
	cout << number1 << " " << number2 << " " << number3 << endl;
    
	return 0;
}

double sortThreeNumbers(double& number1, double& number2, double& number3) // 함수에 참조변수 선언
{
	double temp; // 전역변수로 선언하지 않을 때는
	if (number1 > number2)
	{
		temp = number1; // double temp = number1;
		number1 = number2;
		number2 = temp;
	}
	if (number2 > number3)
	{
		temp = number2; // double temp = number2;
		number2 = number3;
		number3 = temp;
	}
	if (number1 > number2)
	{
		temp = number1; // double temp = number1; 로 쓴다.
		number1 = number2;
		number2 = temp;
	}
	return sortThreeNumbers(number1, number2, number3);
    // 함수값을 return한다.
}

문제 해결 과정

#include <iostream>
using namespace std;

double sortThreeNumbers(double number1, double number2, double number3);

int main()
{
	double number1, number2, number3;

	cin >> number1 >> number2 >> number3;
	sortThreeNumbers(number1, number2, number3);

	cout << "After sorting three numbers:" << endl;
	cout << number1 << " " << number2 << " " << number3 << endl; 
  // 여기 오는데 number 값들 유지가 안 됨
}

double sortThreeNumbers(double number1, double number2, double number3)
{
	double temp;

	if (number1 > number2)
	{
		temp = number1;
		number1 = number2;
		number2 = temp;
	}
	if (number2 > number3)
	{
		temp = number2;
		number2 = number3;
		number3 = temp;
	}
	if (number1 > number2)
	{
		temp = number1;
		number1 = number2;
		number2 = temp;
	}
	return number1, number2, number3; // 여기서 문제가 발생!
}

참조변수를 배우기 전 작성한 코드이다.
sortThreeNumbers 함수를 return할 때 전달되는 값이 입력받은 number1, number2, number3과 똑같아서 해결을 못 하고 있었는데, 참조변수를 사용한 후 문제를 해결했다.

main 함수의 형식 매개변수: double number1, double number2, double number3
sortThreeNumbers 함수의 매개변수: 각 함수 뒤에 &(앰퍼샌드)를 붙인 참조 변수
double& number1, double& number2, double& number3를 사용

참조 변수 (call by reference)
-변수에 저장된 원 데이터에 접근 및 수정 가능
-원 변수에 대한 별칭(alias)으로 동작
// 이름이 긴 함수에도 별칭 사용 가능

0개의 댓글