본문 바로가기

Programming Languages/C++

[함수]-인수의 전달-디폴트 인수

함수의 인수 중 특정 인수는 일반적으로 사용하는 디폴트 값이 있고, 특별한 경우에만 다른 값을 사용하는 경우가 있다. 이런 경우에는 디폴트 인수를 사용할 수 있다.

[소스코드 3-8]은 반올림을 하는 함수 Round()룰 사용하여 원하는 자리에서 반올림을 할 수 있도록 하는 프로그램이다.

#include <iostream>
#include <cmath>
using namespace std;
double Round(double x, int d = 0);

int main() {
    double a;
    cout << "값 = ";
    cin >> a;
    cout << "반올림 --> " << Round(a) << endl;
    cout << "         " << Round(a,1) << endl;
    cout << "         " << Round(a, 2) << endl;
    cout << "         " << Round(a, 3) << endl;
    return 0;
}

// 반올림 함수 
// 인수 double x : 반올림할 값
//      int d    : 반올림하여 남길 소수 부분의 자릿수
// 반환 반올림한 값(double)
double Round(double x, int d) {
    double a = x >= 0 ? 0.5 : -0.5; // x가 0보다 같거나 크면 0.5아니면 -0.5
    double pow10 = pow(10, d);
    return trunc(x * pow10 + a) / pow10;
}

====== 결과 ======
값 = 12.3456
반올림 --> 12
         12.3
         12.35
         12.346

함수 Round()는 2개의 형식 매개변수를 갖는다. 첫째 매개변수는 반올림할 값이고, 둘째 매개변수는 반올림 후 남게 될 소수 부분의 자릿수이다. 이때 Round() 함수 원형에서는 소수 부분의 지릿수에 디폴트 값으로 0이 지정되어 있다. 따라서 Round(a)와 같이 두 번째 매개변수의 값을 넣지 않고 호출하면 Round()의 매개변수 d에는 자동적으로 0이 전달된다. 만일 디폴트 값이 아닌 다른 값을 전달하려면 명시적으로 두 번째 인자에 값을 넣으면 된다.

함수 Round()에서 사용한 함수 pow(a,b)는 $a^b$을 계산하는 함수이고, trunc(a)는 a의 정수 부분만 남겨 놓는 함수이다. 반올림을 할 값에 $10^d$을 곱하고, 이 값에 양수라면 0.5, 음수라면 -0.5를 더하여 정수 부분만 남긴 다음 다시 $10^d$으로 나누어 반올림한 값을 구하고 있다.