Pages

Showing posts with label C언어 학습-2(함수). Show all posts
Showing posts with label C언어 학습-2(함수). Show all posts

Saturday, January 6, 2018

C/C++ 언어 프로그래밍-함수4

C/C++ 언어 코딩 복습 - 함수 4 (Default argument or default parameter)

- 앞에서는 함수의 오버로딩 (Overloading) 대해 정리해 보았습니다. C++ 함수의 특징으로 Default argument 혹은 default parameter 대해 살펴보겠습니다.

- 함수를 호출할 때는 보통 인자의 개수에 맞추어 호출 합니다. 그러나 default parameter 사용하여 인수의 개수를 다르게 주어 호출할 수도 있습니다.

- 예제를 통해 알아보겠습니다.

예제코드
#include <iostream>
using namespace std;

void tDP(int a = 1, int b = 10, int c = 100);

int main() {
     cout << endl;
     cout << "##############################" << endl;
     cout << " Default parameter example " << endl;
     cout << "##############################" << endl;
     cout << endl;

     cout << " No parameters " << endl ;
     tDP();

     cout << " 1 parameter " << endl ;
     tDP(3);

     cout << " 2 parameters " << endl ;
     tDP(3,30);

     cout << " 3 parameters " << endl ;
     tDP(3,30,300);
     return 0;
}

void tDP(int a, int b, int c){
     cout << " a = " << a << ", b = " << b << ", c = " << c << endl;
     cout << endl;
}

- 정수형 인자 개를 갖고 반환값이 없는 함수 ' tDP' 정의하였습니다. 함수 선언부에서 정수형 변수 a, b, c 각각 1, 10, 100 이라는 default 값을 주었습니다. 함수의 정의부에서는 인자로 받은 a, b, c 값이 출력되도록 하였습니다.

- " No parameters " 라는 출력문 다음에 ' tDP()' 이라는 형태로 함수를 호출하였습니다. 다음 인자를 하나씩 늘려 함수를 호출하여 보도록 하겠습니다. 그리고 마지막에는 " 3 parameters " 라는 출력문 다음 ' tDP(3,30,300)' 함수를 호출하였습니다. 결과가 확인해보겠습니다.

실행결과


- 먼저 " Default parameter example " 라는 문구가 출력됩니다.

(1) " No parameters " : 인자를 주지 않고 호출한 경우 (tDP()), default 설정한 값들이 출력됨을 있습니다.

(2) " 1 parameter " : 인자를 하나만 주고 호출한 경우 (tDP(3)), 첫번째 인자 a 값이 3으로 바뀌어 출력되는 것을 있습니다. 이때 나머지 값들은 default 지정한 값이 출력됩니다. ("b = 10, c = 100")

(3) " 2 parameters " : 인자를 두개 주고 호출한 경우 (tDP(3,30)), 첫번째 인자 a 값이 3으로 b 값이 30으로 바뀌어 출력되는 것을 있습니다. 나머지 c 값은 default 지정한 100 출력됩니다.

(4) " 3 parameters " : 인자 세개를 주고 호출한 경우 (tDP(3,30,300)), default 값이 아닌 입력한 값으로 출력되는 것을 있습니다.

주의:
1. default parameter 값은 함수의 선언부에서 지정.
2. 함수 인자부분에서 모두 default 값을 주거나, 오른쪽에서 왼쪽으로 순차적으로 입력.

ex) void aaa(int a=1, int b=2, int c=3);  (O)
   void aaa(int a, int b=2, int c=3);    (O)
   void aaa(int a=1, int b, int c);      (X)
   void aaa(int a, int b=2, int c);      (X)

C/C++ 언어 프로그래밍-함수3

C/C++ 언어 코딩 복습 - 함수 3 (오버로딩: Overloading)

- 함수의 오버로딩 (Overloading) 대해 정리해보도록 하겠습니다. 프로그램을 작성하는데 비슷한 용도로 사용되는 함수들을 각각 정의해 사용하면 때로는 너무 많은 이름의 함수들이 생길 있습니다. 이러한 문제를 해결할 있는 것이 함수의 오버로딩 (Overloading) 입니다.

- , 동일한 이름으로 함수를 여러번 (중복) 해서 정의를 있습니다. 이때 각각의 함수를 구별하기 위해서는 구분할 있는 정보 (signature) 사용자가 작성하여야 합니다. 방법으로는 같은 이름의 함수를 사용할 인자 (parameter) 개수 인자의 자료형을 다르게 주어 사용하는 것입니다.

- 앞장의 예제를 이용해 살펴보도록 하겠습니다. 앞장의 예제에서는 세가지 함수 t_f1, t_f2, t_f3 들의 이름을 다르게 하여 정의하였습니다. 이를 하나의 이름으로 바꾸도록 하겠습니다.

사용예시 :

기존 예제:
void t_f1();
void t_f2(int);
int  t_f3(int, int);

- 세가지 다른 이름의 함수들입니다. 이들을 'tF' 라는 하나의 이름으로 바꾸고 실행해보도록 하겠습니다.

예제코드

#include <iostream>
using namespace std;

void tF();
void tF(int);
int  tF(int, int);

int main() {
     cout << endl;
     cout << "##############################" << endl;
     cout << " Function overloading example " << endl;
     cout << "##############################" << endl;
     cout << endl;

     tF();
     int num, num2, num3 ;
     cout << "Enter a natural number between 0 and 10. : ";
     cin  >> num ;

     tF(num);
     num2 = 10 ;
     num3 = tF(num, num2);
     cout << num <<" + "<< num2 <<" = "<< num3 << endl;
     return 0;
}

void tF(){
cout << " No parameters and return values. " << endl;
}

void tF(int a){
       if(a > 5){
             cout<< a << " > 5 is true. "<<endl;
           }else{
        cout<< a << " <= 5 is true. "<<endl;
           }
}

int tF(int a, int b){
     int c ;
     c = a + b ;
     return c ;
}

- 앞의 예제와 한번 구분하기 위해 "Function overloading example" 이라는 문구가 출력되게 하였습니다. 다른 내용들은 앞장 예제와 같고 함수 이름만 'tF' 모두 변경하였습니다.

실행결과


- 실행을 하면 "Function overloading example" 이라는 문구가 먼저 출력되었습니다.

(1) 그리고 인자 리턴값이 없는 함수 'tF()' 결과로 " No parameters and return values. " 이라는 문장이 출력되었습니다.

(2) 정수형 인자 하나를 갖고 return 값이 없는 함수 'tF()' 결과로 0 10 사이의 자연수를 입력하라는 문장도 출력되었습니다. 여기에 2 입력하고 엔터키를 누르면 " 2 <= 5 is true. " 라는 문구가 나옵니다.

(3) 정수형 인자 두개를 갖고 return 값의 자료형이 정수형인 함수 'tF()' 결과로 " 2 + 10 = 12 " 출력되는 것을 확인할 있습니다. 

C/C++ 언어 프로그래밍-함수2

C/C++언어 코딩 복습 - 함수 2

- 함수에 대해 추가적인 부분들을 복습하도록 하겠습니다. 먼저 장에서는 인자도 없고 return 값도 없는 함수를 만들어 보았습니다. 간단한 예제를 통해 인자와 return 값이 있는 함수에 대해 간략히 알아보겠습니다.

사용예시 :
예제코드

#include <iostream>
using namespace std;

void t_f1();
void t_f2(int);
int  t_f3(int, int);

int main() {
     int num, num2, num3 ;
     t_f1();
          cout << "Enter a natural number between 0 and 10. : ";
          cin  >> num ;
     t_f2(num);

     num2 = 10 ;
     num3 = t_f3(num, num2);
     cout << num <<" + "<< num2 <<" = "<< num3 << endl;
     return 0;
}

void t_f1(){
cout << " No parameters and return values. " << endl;
}

void t_f2(int a){
           if(a > 5){
             cout<< a << " > 5 is true. "<<endl;
           }else{
        cout<< a << " <= 5 is true. "<<endl;
           }
}

int t_f3(int a, int b){
     int c ;
     c = a + b ;
     return c ;
}

- 세가지 형태의 함수의 선언 (prototype 선언) 먼저 작성하였습니다.

(1) void t_f1() : 인자와 return 값이 없는 함수.
(2) void t_f2(int) : 정수형 인자 하나를 갖고 return 값이 없는 함수
(3) int  t_f3(int, int) : 정수형 인자 두개를 갖고 return 값의 자료형이 정수형인 함수

- 함수들은 main 함수 다음에 정의 되어 있습니다.

(1) 함수 ' t_f1() ' 호출을 하면 " No parameters and return values. " 이라는 문장이 출력되는 함수입니다.

(2) 함수 ' t_f2 ' 정수형 인자 'a' 하나를 갖고 if-else 문을 수행하는 함수입니다. 인자로 받은 a 값이 5 보다 크면 'a' 값이 5 보다 크다가 맞다 라는 문장을 출력하고 그렇지 않으면 5 보다 작거나 같다가 맞다 라는 문장을 출력합니다.

(3) 함수 ' t_f3' 정수형 인자 개를 갖고 자료형이 정수형인 리턴값을 갖는 함수 입니다. 함수는 인자로 받은 'a', 'b' 개의 값의 합을 정수형 변수 'c' 저장하고 'c' 반환하는 일을 수행합니다.

- main 함수를 확인해보면 다음과 같습니다. 먼저 t_f1 함수를 호출합니다. 단순한 출력이 예상됩니다.

- 정수형 변수 num, num2, num3 선언합니다. 그리고 num 키보드로 입력받은 숫자를 대입합니다. 't_f2' 함수를 호출하면서 인자로 num 넘겨줍니다. 입력한 숫자에 따라 다른 결과를 예상할 있습니다.

- num2 10 대입하고 num3 에는 함수 t_f3 return 값을 대입합니다. 함수 t_f3 호출할 num num2 인자로 넘겨줍니다. 그리고 숫자의 합을 나타내는 문장을 출력합니다.

실행결과

- 함수 't_f1' 결과로 " No parameters and return values. " 이라는 문장이 출력되었습니다. 그리고 0 10 사이의 자연수를 입력하라는 문장도 출력되었습니다. 여기에 7 입력하고 엔터키를 눌러보겠습니다.


- '7 5 보다 크다' 맞다 라는 문장이 출력됩니다. 그리고 입력한 숫자가 7 7 + 10 연산이 수행되고 결과 17 출력되는 것을 있습니다.

C/C++ 언어 프로그래밍-함수1

C/C++언어 코딩 복습 - 함수 1

- 함수란 특정 계산 혹은 기능들을 하는 독립적인 모듈로서 프로그래밍의 가장 기본이 되는 하나입니다. 코딩에 있어 필수 요소이고, 프로그램을 보다 간결하고 알아보기 쉽게 만들어 주는 장점이 있습니다.

- 예를 들면 앞장에서 for 반복문에 대해 정리해보았습니다. for 문의 경우 단순 반복을 하는 제어문으로 특정 수행문장을 여러 반복 수행해 줍니다. 만약 main 함수 내에서 같은 과정이 여러 반복된다면 그때마다 for 문을 작성해야 되고 결과 프로그램이 길어지고 복잡해 있습니다.

- 이를 사용자가 독립적이고 의미 있는 단위로 나누어 모듈화를 함수를 정의하고 함수들을 필요할 때마다 호출해 사용하면 효율적인 프로그램을 작성할 있습니다.

함수의 구조는 다음과 같습니다.

'(1) 자료형'  '(2) 함수이름' ( '(3) 인자들 (parameters)' )
{
 '(4) 수행문장들' ;
 '(5) return ('결과값') ;
}

'(1) 자료형' : 되돌려 받는 (return ) 자료형을 의미합니다. 예를 들면 정수형 값을 돌려받는다면 자리에 int 작성하면 됩니다. 돌려받는 값이 없다면 void 라고 작성하면 됩니다.

'(2) 함수이름' : 그대로 함수의 이름을 작성하는 부분입니다.

'(3) 인자들 (parameters)' : 함수에 사용될 인자들로 변수, 상수, 클래스 다양한 형태로 사용이 가능합니다. 물론 인자가 없는 함수도 있습니다.

'(4) 수행문장들' : 특정 기능들을 하는 수행문장들의 집합체로 함수에서 어떠한 기능을 하는가를 나타냅니다.

'(5) return ('결과값'): 함수의 결과값을 돌려주는 문구로 돌려받는 값이 없을 수도 있습니다.

함수는

* 함수의 선언 (prototype 선언)
* 함수의 정의
* 함수의 호출

이라는 요소들로 이루어져 있습니다.

함수의 선언 되돌려 받는 (return ) 자료형, 함수 이름, 입력 인자들을 프로그램 내에서 함수를 정의하기 전에 이러한 형태의 함수를 앞으로 사용하겠다고 선언하는 부분입니다.

작성된 프로그램들은 순차적으로 컴파일 되기 때문에 프로그램 내에서 함수가 먼저 호출되고 함수의 정의가 나중에 나오면 에러가 발생합니다. 함수를 미리 선언해두면 아직 정의되지 않은 함수들을 호출해도 문제가 없습니다.

함수의 정의 함은 어떠한 기능을 수행할 것인지를 구체적으로 작성하는 것입니다.

함수의 호출 프로그램 내에서 필요한 경우, 특정 위치에서 작성된 함수를 실행하는 것입니다.

간단한 출력함수를 작성해보도록 하겠습니다.

사용예시 :
예제코드

#include <iostream>
using namespace std;

void t_f1()
{
cout << " abcde " << endl;
}

int main() {
     t_f1();
     return 0;
}

- 리턴 값과 인자가 없는 't_f1' 이라는 이름의 함수를 만들고 함수 정의 부분에는 " abcde " 출력하는 문장을 작성했습니다. main 함수 내에서 't_f1();' 라는 문장으로 함수를 호출하도록 하였습니다.

실행결과


- 실행하면 'abcde' 출력되는 것을 확인할 있습니다.

- 만약 함수의 정의를 main 함수보다 뒤에 작성하면 어떻해 되는지 한번 살펴보겠습니다.

코드에서 main 함수와 t_f1() 함수의 순서를 다음과 같이 바꾸고 컴파일을 하면 에러가 발생함을 있습니다.

#include <iostream>
using namespace std;

int main() {
      t_f1();
      return 0;
}

void t_f1(){
cout << " abcde " << endl;
}

- main 함수 내에서 't_f1()' 호출하는데 't_f1()' 함수는 나중에 정의가 되어 있기 때문에 컴파일시점에 다음과 같은 에러메시지가 발생합니다.

ch4.c: In function ?int main()??
ch4.c:6: error: ? 't_f1??was not declared in this scope

- 함수 't_f1' 선언되어 있지 않다고 나옵니다. 함수의 프로토 타입을 main 함수 앞에 다음과 같이 작성해주면 이러한 문제를 해결할 있습니다.

#include <iostream>
using namespace std;

void t_f1();
int main() {
     t_f1();
     return 0;
}

void t_f1()
{
cout << " abcde " << endl;              
}