[중간대비] ch05 Function & Preprocess

2022. 10. 27. 13:21언어(Language)/c++

[Exercise5-1 함수 만들기]

두 값을 더하는 int Plus(int a, int b)와 빼는 int Minus(int a, int b)를 작성하고, 사용자로부터 두 수를 입력 받아 Plus, MInus 값을 두 함수를 이용하여 계산한 후, 다음과 같이 출력하라

실행 예)

#include <iostream>
using namespace std;
int Plus(int a, int b) {
	return a + b;
}
int Minus(int a, int b) {
	return a - b;
}
int main() {
	int x, y;
	cout << "Input 2 Numbers : ";
	cin >> x >> y;
	cout << x << '+' << y << '=' << Plus(x, y)<<endl;
	cout << x << '-' << y << '=' << Minus(x, y)<<endl;
	return 0;
}

 

 

[Exercise5-2 함수 오버로드하기]  //////틀림 다시하기

다음 요구사항을 만족시키는 프로그램을 작성하라

-변수 a값을 delta만큼 증가/감소 시키는 inc, dec 함수를 작성하라.

  -void inc(int &a, int delta);

  -void dec(int &a, int delta);

  -delta는 default값으로 1을 지정할 것

-inc, dec 함수가 int, long, doule 각 자료형을 모두 지원하도록 overload하여 작성하라

-각 자료형 별로 inc/dec 함수 작성 -> 총 6개의 함수 작성

 

이 연습문제에서는 함수 오버로드, 인자 기본 값, 참조형 인자에 대한 사용법을 배운다.

int, long, double 자료형 별로 inc() 함수 3개, dec() 함수 3개를 선언하고, 구현한다.

구현된 함수 6개를 다음 main() 함수처럼 사용해 보자.

[main()]

int int_value = 10;
	long long_value = 10;
	double double_value = 10;
	inc(int_value); cout << int_value << endl; //output:11
	inc(long_value); cout << long_value << endl; //output:11
	inc(double_value); cout << double_value << endl; //output:11
	dec(int_value); cout << int_value << endl; //output:10
	dec(long_value); cout << long_value << endl; //output:10
	dec(double_value); cout << double_value << endl; //output:10
	return 0;

[수업시간 코드]

#include <iostream>
using namespace std;

void inc(int& a, int delta=1) { //int inc~로 바꾸면 자바처럼 메소드 체이닝 가능
    a += delta;
}
void inc(double& d, double delta=1) {
    d += delta;
}
void dec(int& a, int delta=1) {
    a -= delta;

}
void dec(double& d, double delta=1) {
    d -= delta;
}
int main()
{
    int a = 0;
    double d = 0;

    inc(a); cout << "a: " << a << endl;
    dec(a); cout << "a: " << a << endl;
    inc(d); cout << "d: " << d << endl;
    dec(d); cout << "d: " << d << endl;
    return 0;
}

 

[내 코드(틀림 나중에 수정)]

#include <iostream>
using namespace std;

void inc(int& a, int delta) { a += delta; }
void inc(long& a, long delta) { a += delta; }
void inc(double& a, double delta) { a += delta; }
void dec(int& a, int delta) { a -= delta; }
void dec(long& a, long delta) { a -= delta; }
void dec(double& a, double delta) { a -= delta; }
int main() {
	int int_value = 10;
	long long_value = 10;
	double double_value = 10;
	inc(int_value); cout << int_value << endl; //output:11
	inc(long_value); cout << long_value << endl; //output:11
	inc(double_value); cout << double_value << endl; //output:11
	dec(int_value); cout << int_value << endl; //output:10
	dec(long_value); cout << long_value << endl; //output:10
	dec(double_value); cout << double_value << endl; //output:10
	return 0;
}

 

 

 

[Exercise5-3 되부름(Recursion)]

-피보나츠 수열의 n번쨰 요소의 값을 반환하는 int fibo(int n)을 작성하라

-Fibonacci 수열

   1, 1, 2, 3, 5, 8, 13, 21, 34, ...

[실행 예]

-수학에서 n번째 요소 값이 n-1번째 요소 값과 n-2번째 요소 값을 더한 값인 수열이 피보나츠 수열이다. 수식으로 F(n) = F(n-1) + F(n-2)가 된다. 이런 형태의 계산에 되부름(재귀) 기법이 유용하다.

-되부름 기법에서 종료조건 검사가 중요하다고 했다. fibo(int n) 함수 내에서 종료조건은 n이 1이거나 0일 때이다. 즉 "if(n<2) return 1" 문장으로 되부름 종료가 되며, fibo(0) 또는 fibo(1)이 1을 반환하도록 할 수 있다.

#include <iostream>
using namespace std;
int fibo(int n) {
	return (n < 2) ? 1 : (fibo(n - 1) + fibo(n - 2));
}
int main() {
	int n;
	cout << "n = ? ";
	cin >> n;
	cout << "Fibo(" << n << ")=" << fibo(n) << endl;
	return 0;
}