• 검색 결과가 없습니다.

함 수 함 수 함 수 함 수

N/A
N/A
Protected

Academic year: 2021

Share "함 수 함 수 함 수 함 수"

Copied!
27
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

함 수 함 수 함 수 함 수

함수는입력을넣으면출력이나오는마술상자다.

(2)

이 장에서 다룰 내용 함수의 기본 1 함수의 입출력 방법 2 재귀 함수 3 In lin e 함수 4

(3)

01_ 함수의 기본 함 수 란 함 수 란 함 수 란 함 수 란 

수학시간에배운 y=f(x)와같이, 함수에게 입력값을주면 일련의과정을 거쳐출력값이 나오게된다.

반복된동작에 대한코드들을 보기좋게하고, 크기를줄이기 위해함수를 사용한다.

(4)

01_ 함수의 기본  함수의 기본 형태  위와 같이 함수를 선언하고 동작을 구현하게 되면 , 선언된 이후에는 함수명을 이용하여 여러 번 쉽게 반복하여 선언된 이후에는 함수명을 이용하여 여러 번 쉽게 반복하여 수행시킬 수 있다 .  다음의 기본예제 [5 - 1 ]을 함수를 사용하여 기본예제 [5 - 2 ]로 바꾸는 과정을 살펴보자 . 기본예제에서는 한 줄짜리 코드를 함수로 바꿨지만 , 보다 긴 코드를 함수로 바꾼 경우에는 더욱 코드가 상대적으로 간결해 질 것이다 .

(5)

[기본예제 5- 1] 함수를 적용하지 않은 코드 0 1 # in c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 in t m a in (i n t a rg c , c h a r* a rg v[ ]) 0 4 { 0 5 in t i; 0 6 fo r( i= 0 ;i < 2 ;i + + ) 0 7 { 0 8 c o u t < < " p ri n t d e b u g m e s s a g e \ n "; 0 8 c o u t < < " p ri n t d e b u g m e s s a g e \ n "; 0 9 } 1 0 1 1 c o u t < < " p ri n t d e b u g m e s s a g e \ n "; 1 2 1 3 re tu rn 0 ; 1 4 }

(6)

[기본예제 5- 2] 함수를 적용한 코드 0 1 # in c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 vo id p ri n tD e b u g M s g (v o id ) 0 4 { 0 5 c o u t < < " p ri n t d e b u g m e s s a g e \ n "; 0 6 } 0 7 0 8 in t m a in (i n t a rg c , c h a r* a rg v[ ]) 0 9 { 1 0 in t i;

printDebugMsgprintDebugMsgprintDebugMsgprintDebugMsg 함수를함수를함수를함수를선언한다선언한다선언한다선언한다....

1 0 in t i; 1 1 fo r( i= 0 ;i < 2 ;i + + ) 1 2 { 1 3 p ri n tD e b u g M s g () ; 1 4 } 1 5 1 6 p ri n tD e b u g M s g () ; 1 7 1 8 re tu rn 0 ; 1 9 }

printDebugMsgprintDebugMsgprintDebugMsgprintDebugMsg 함수를함수를함수를함수를호출한다호출한다호출한다호출한다....

printDebugMsgprintDebugMsgprintDebugMsgprintDebugMsg 함수를함수를함수를함수를호출한다호출한다호출한다호출한다....

(7)

[기본예제 5 - 3 ] 함수선언을 미리 하고 , 구현은 뒤에 한 예제 . 0 1 # in c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 vo id p ri n tD e b u g M s g (v o id ); 0 4 0 5 in t m a in (i n t a rg c , c h a r* a rg v[ ]) 0 6 { 0 7 in t i; 0 8 fo r( i= 0 ;i < 2 ;i + + ) 0 9 { 1 0 p ri n tD e b u g M s g () ;

printDebugMsgprintDebugMsgprintDebugMsgprintDebugMsg 함수를함수를함수를함수를선언한다선언한다선언한다선언한다.... printDebugMsgprintDebugMsgprintDebugMsgprintDebugMsg 함수를함수를함수를함수를호출한다호출한다호출한다호출한다....

1 0 p ri n tD e b u g M s g () ; 1 1 } 1 2 1 3 p ri n tD e b u g M s g () ; 1 4 1 5 re tu rn 0 ; 1 6 } 1 7 1 8 vo id p ri n tD e b u g M s g (v o id ) 1 9 { 2 0 c o u t < < " p ri n t d e b u g m e s s a g e \ n "; 2 1 }

printDebugMsgprintDebugMsgprintDebugMsgprintDebugMsg 함수를함수를함수를함수를구현한다구현한다구현한다구현한다....

printDebugMsgprintDebugMsgprintDebugMsgprintDebugMsg 함수를함수를함수를함수를호출한다호출한다호출한다호출한다....

(8)

02_ 함수의 입출력 방법  함수에 대한 입력 

아무입력없이동작하는함수보다는입력값에따라동작 방식이바뀌거나, 입력값들을이용하여계산을하는함수들이 실제로많이이용된다.



함수에입력을주는방법은다음과같다. 함수명다음의괄호안에입력변수형과변수명을사용할만큼 나열해서선언하면되며, 함수를호출할때에는선언한 순서대로입력변수를정확하게사용해야한다.

(9)

[기본예제 5- 4] 함수 입력 예제 # 1 0 1 # in c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 vo id p ri n tD e b u g M s g (i n t i) 0 4 { 0 5 c o u t < < " p ri n t d e b u g m e s s a g e : i = " < < i < < " \ n "; 0 6 } 0 7 0 8 in t m a in (i n t a rg c , c h a r* a rg v[ ]) 0 9 {

printDebugMsgprintDebugMsgprintDebugMsgprintDebugMsg 함수에함수에함수에함수에입력입력입력입력인자를인자를인자를인자를 사용하여사용하여사용하여사용하여선언한다선언한다선언한다선언한다....

0 9 { 1 0 in t i; 1 1 fo r( i= 0 ;i < 2 ;i + + ) 1 2 { 1 3 p ri n tD e b u g M s g (i ); 1 4 } 1 5 1 6 p ri n tD e b u g M s g (i ); 1 7 1 8 re tu rn 0 ; 1 9 }

For For For For 루프가루프가루프가루프가끝난끝난끝난끝난뒤뒤뒤뒤, , , , 증가된증가된증가된증가된iiii값을값을값을값을그대로그대로그대로그대로 사용하여사용하여사용하여사용하여다시한번다시한번다시한번다시한번printDebugMsgprintDebugMsgprintDebugMsgprintDebugMsg를를를를 호출한다호출한다호출한다호출한다....

For For For For 루프를루프를루프를루프를돌며돌며돌며돌며iiii값을값을값을값을입력입력입력입력인자로인자로인자로인자로 하여하여하여하여printDebugMsgprintDebugMsgprintDebugMsgprintDebugMsg 함수를함수를함수를함수를호출한다호출한다호출한다호출한다....

(10)

[응용예제 5- 5] 함수 입력 예제 # 2 0 1 # in c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 vo id p ri n tA re a (i n t x, i n t y) 0 4 { 0 5 in t a re a = [ ① ]; 0 6 c o u t < < " 넓이 : " < < a re a < < " \ n "; 0 7 } 0 8 0 9 in t m a in (i n t a rg c , c h a r* a rg v[ ]) 1 0 {

printAreaprintAreaprintAreaprintArea 함수를함수를함수를함수를선언한다선언한다선언한다선언한다....

1 1 1 2 in t w id th ,h e ig h t; 1 3 1 4 c o u t < < " 넓이를 입력하세요 : "; 1 5 c in > > w id th ; 1 6 c o u t < < " 높이를 입력하세요 : "; 1 7 c in > > h e ig h t; 1 8 1 9 p ri n tA re a ([ ② ]) ; 2 0 2 1 re tu rn 0 ; 2 2 }

printAtraprintAtraprintAtraprintAtra 함수를함수를함수를함수를호출하여호출하여호출하여호출하여 넓이를넓이를넓이를넓이를계산한다계산한다계산한다계산한다....

변수변수변수변수width, heightwidth, heightwidth, heightwidth, height를를를를선언한다선언한다선언한다선언한다.... width, heightwidth, heightwidth, heightwidth, height에에에에대하여대하여대하여대하여 사용자사용자사용자사용자입력을입력을입력을입력을받는다받는다받는다받는다....

(11)

02_ 함수의 입출력 방법  함수에 대한 출력 (반환 ) 

함수에게서결과를받아오려면다음과같은방법을사용한다.



출력값을반환하고자할때는함수가끝나기직전에return 문을이용하여반환할변수를지정해야한다.



반환할변수와선언할때함수명앞에명시한‘반환_변수형’은 일치해야한다.



반환값이없는경우에는‘반환_변수형’으로‘void’를명시한다.

(12)

[기본예제 5- 6] 함수 출력 예제 0 1 #i n c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 in t g e tA re a (i n t x, i n t y) 0 4 { 0 5 in t a re a = x*y; 0 6 re tu rn a re a ; 0 7 } 0 8 0 9 in t m a in (i n t a rg c , c h a r* a rg v[]) 1 0 { 1 1

넓이를넓이를넓이를넓이를반환하는반환하는반환하는반환하는 getAreagetAreagetAreagetArea 함수를함수를함수를함수를선언한다선언한다선언한다선언한다....

1 1 1 2 in t wi d th ,h e ig h t; 1 3 1 4 c o u t < < " 넓이를 입력하세요 : "; 1 5 c in > > wi d th ; 1 6 c o u t < < " 높이를 입력하세요 : "; 1 7 c in > > h e ig h t; 1 8 1 9 in t a re a = g e tA re a ( wi d th , h e ig h t ); 2 0 c o u t < < " 넓이 : " < < a re a < < " \ n "; 2 1 2 2 re tu rn 0 ; 2 3 }

getAreagetAreagetAreagetArea 함수를함수를함수를함수를호출하여호출하여호출하여호출하여넓이를넓이를넓이를넓이를 계산하고계산하고계산하고계산하고areaareaareaarea에에에에값을값을값을값을반환한다반환한다반환한다반환한다....

변수변수변수변수width, heightwidth, heightwidth, heightwidth, height를를를를선언한다선언한다선언한다선언한다.... width, heightwidth, heightwidth, heightwidth, height에에에에대하여대하여대하여대하여 사용자사용자사용자사용자입력을입력을입력을입력을받는다받는다받는다받는다....

(13)

02_ 함수의 입출력 방법  M a in 함수 

Main 함수도입출력인자를가지고있다.



이입력인자들은프로그램을실행시킬때, ‘example.exe –a’의‘-a’와같이뒤에주어진인자를의미한다.



MS Visual C++에서는다음과같이Program arguments창에‘help’와같이입력인자를줄수있다.

(14)

[기본예제 5- 7] m ain 함수 예제 0 1 # in c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 in t m a in (i n t a rg c , c h a r* a rg v[ ]) 0 4 { 0 5 in t i; 0 6 c o u t < < " m a in 인력인자의 갯수 : " < < a rg c < < " \ n "; 0 7 0 8 fo r( i = 0 ; i < a rg c ; i+ + )

입력인자의입력인자의입력인자의입력인자의개수를개수를개수를개수를출력한다출력한다출력한다출력한다....

0 9 { 1 0 c o u t < < a rg v[ i] < < " \ n "; 1 1 } 1 2 1 3 re tu rn 0 ; 1 4 }

입력인자들을입력인자들을입력인자들을입력인자들을출력한다출력한다출력한다출력한다....

(15)

03_ 재귀 함수  재귀함수란 , 

자기자신을호출하는함수.

 재귀함수 사용시 주의점 

재귀함수는자기자신을호출하게되므로, 자칫잘못하면무한히 반복될수가있다.



그러므로, 정상적인동작을위해서는재귀함수내부에동작이 멈추는시점을정해주여야한다.멈추는시점을정해주여야한다.

(16)

[기본예제 5- 8] 재귀 함수 예제 # 1 : Su m

01#include<iostream> 02using namespace std; 03intSum( intn ) 04{ 05ifififif (1==n)(1==n)(1==n)(1==n) 06return 1;return 1;return 1;return 1; 07else 08return n + Sum( n-1 );

재귀재귀재귀재귀함수가함수가함수가함수가멈출멈출멈출멈출조건을조건을조건을조건을정한다정한다정한다정한다.... 자기자기자기자기자신을자신을자신을자신을호출한다호출한다호출한다호출한다....08return n + Sum( n-1 ); 09} 10 11intmain(intargc, char* argv[]) 12{ 13intresult = Sum( 4 ); 14cout<< "합: " << result << "\n"; 15 16return 0; 17}

(17)

[응용예제 5- 9] 재귀 함수 예제 # 2 : F act o rial

01#include<iostream> 02using namespace std; 03int[①] ( intn ) 04{ 05if (1>=n) 06return 1; 07else 08return n * [②] ( n-1 );

Factorial Factorial Factorial Factorial 함수의함수의함수의함수의동작이동작이동작이동작이언제언제언제언제 멈추는지멈추는지멈추는지멈추는지정의한다정의한다정의한다정의한다.... 자기자신을자기자신을자기자신을자기자신을재귀적으로재귀적으로재귀적으로재귀적으로어떻게어떻게어떻게어떻게08return n * [②] ( n-1 ); 09} 10 11intmain(intargc, char* argv[]) 12{ 13intresult = Factorial( 4 ); 14cout<< "Factorial 결과값: " << result << "\n"; 15 16return 0; 17}

호출할지를호출할지를호출할지를호출할지를정의한다정의한다정의한다정의한다....

(18)

04_in lin e 함수  in li n e 함수란  

함수가호출되는위치에해당함수코드가삽입되는효과를준다.



함수의사용이좋기만한것은아니다. 함수를사용하면함수를호출하고복귀하는과정에대한시간이 더걸리므로, 너무짧은코드를함수로바꾸어서자주사용하게 되면성능의저하가일어날수있다.



C의경우에는define을이용하여자주사용되는짧은함수들을 매크로함수로바꾸는작업이필요하지만, C++에서는inline을이용하면간단하게해결된다.

(19)

[응용예제 5 - 1 1 ] in li n e 을 사용하여 1 을 더하는 프로그램

01 #include<iostream> 02 using namespace std; 03 inline intinc(intx) 04 { 05 return x+1; 06 } 07 08 intmain(intargc, char* argv[])

inlineinlineinlineinline함수를함수를함수를함수를정의한다정의한다정의한다정의한다....inlineinlineinlineinline함수를함수를함수를함수를정의한다정의한다정의한다정의한다.... 08 intmain(intargc, char* argv[]) 09 { 10 inti; 11 cout<< "숫자를입력하세요: "; 12 cin>> i; 13 cout<< inc(i) << endl; 14 return 0; 15 }

inlineinlineinlineinline함수를함수를함수를함수를호출한다호출한다호출한다호출한다....

(20)

예제모음 _07 의 요구사항 및 실행결과 요 구 사 항 요 구 사 항 요 구 사 항 요 구 사 항 ① 자신의 이름 , 학번을 출력하는 함수 p ri n tM yI n fo () 를 만든다 . ② 함수 p ri n tM yI n fo () 에는 입출력 인자가 없으며 c o u t을 이용하여 출력한다 . 실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과

(21)

예제모음 _07 소스 0 1 # in c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 vo id p ri n tM yI n fo (v o id ) 0 4 { 0 5 c o u t < < " 이름 : 홍길동 \ n "; 0 6 c o u t < < " 학번 : 0 7 0 1 0 1 3 0 \ n "; 0 7 } 0 8

printMyInfoprintMyInfoprintMyInfoprintMyInfo 함수를함수를함수를함수를 구현한다구현한다구현한다구현한다.... MainMainMainMain 함수로써함수로써함수로써함수로써,,,,

0 9 in t m a in (i n t a rg c , c h a r* a rg v[ ]) 1 0 { 1 1 p ri n tM yI n fo () ; 1 2 1 3 re tu rn 0 ; 1 4 }

MainMainMainMain 함수로써함수로써함수로써함수로써,,,, 프로그램의프로그램의프로그램의프로그램의시작점이다시작점이다시작점이다시작점이다.... printMyInfoprintMyInfoprintMyInfoprintMyInfo 함수를함수를함수를함수를 호출한다호출한다호출한다호출한다....

(22)

예제모음 _08 의 요구사항 및 실행결과 요 구 사 항 요 구 사 항 요 구 사 항 요 구 사 항 ① 삼각형의 밑변 (w id th ), 높이 (h e ig h t) 는 c in 을 이용하여 입력 받는다 . ② 삼각형의 밑변 , 높이를 입력 인자로 주면 , 넓이를 반환하는 함수를 만든다 . 실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과

(23)

예제모음 _08 소스 0 1 # in c lu d e < io s tr e a m > 0 2 u s in g n a m e s p a c e s td ; 0 3 in t c a lc T ri a n g le (i n t w id th , in t h e ig h t) 0 4 { 0 5 in t re s u lt = w id th *h e ig h t/ 2 ; 0 6 re tu rn r e s u lt ; 0 7 } 0 8 0 9 in t m a in (i n t a rg c , c h a r* a rg v[ ]) 1 0 {

calcTrianglecalcTrianglecalcTrianglecalcTriangle 함수를함수를함수를함수를 구현한다구현한다구현한다구현한다.... 프로그램의프로그램의프로그램의프로그램의시작점이다시작점이다시작점이다시작점이다....

결과값을결과값을결과값을결과값을반환한다반환한다반환한다반환한다....

1 0 { 1 1 in t w id th , h e ig h t; 1 2 1 3 c o u t < < " 밑변의 길이를 입력하세요 : "; 1 4 c in > > w id th ; 1 5 c o u t < < " 높이를 입력하세요 : "; 1 6 c in > > h e ig h t; 1 7 1 8 in t a re a = c a lc T ri a n g le ( w id th , h e ig h t ); 1 9 c o u t < < " 삼각의 넓이는 : " < < a re a < < " \ n "; 2 0 2 1 re tu rn 0 ; 2 2 }

밑변과밑변과밑변과밑변과높이를높이를높이를높이를 입력입력입력입력받는다받는다받는다받는다.... calcTrianglecalcTrianglecalcTrianglecalcTriangle 함수를함수를함수를함수를 호출한다호출한다호출한다호출한다....

(24)

예제모음 _09 의 요구사항 및 실행결과 요 구 사 항 요 구 사 항 요 구 사 항 요 구 사 항 ① 사용자로부터 m a in 함수의 입력 인자를 받는다 . ② m a in 의 입력 인자가 주어진 경우에는 삼각형의 넓이를 출력하며 , m a in 의 입력 인자가 주어지지 않은 경우에는 사각형의 넓이를 출력한다 . ③ 도형의 밑변의 길이와 높이에 대한 입력은 c in 을 이용하여 받는다 . ④ 삼각형의 넓이와 사각형의 넓이를 구하는 함수는 m a in 함수와 분리하여 구현하도록 한다 . 실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과

mainmainmainmain에게에게에게에게입력인자를입력인자를입력인자를입력인자를주지주지주지주지않은않은않은않은경우경우경우경우 mainmainmainmain에게에게에게에게입력인자를입력인자를입력인자를입력인자를‘rectrectrectrect’로로로로준준준준경우경우경우경우

(25)

예제모음 _09 소스

01#include<iostream> 02using namespace std; 03intcalcTriangle(intwidth, intheight) 04{ 05return width*height/2; 06} 07 08intcalcRectangle(intwidth, intheight) 09{ 10return width*height; 11} 12 13intmain(intargc, char* argv[]) 14{ 15intwidth, height; 16

calcTrianglecalcTrianglecalcTrianglecalcTriangle 함수를함수를함수를함수를 구현한다구현한다구현한다구현한다.... 프로그램의프로그램의프로그램의프로그램의시작점이다시작점이다시작점이다시작점이다....

calcRectanglecalcRectanglecalcRectanglecalcRectangle 함수를함수를함수를함수를 구현한다구현한다구현한다구현한다.... 16 17cout<< "밑변의길이를입력하세요: "; 18cin>> width; 19cout<< "높이를입력하세요: "; 20cin>> height; 21 22if ( 1 == argc) { 23cout<< "삼각형의넓이는: " << calcTriangle(width, height) << "\n"; 24} 25else { 26cout<< "사각형의넓이는: " << calcRectangle(width, height) << "\n"; 27} 28 29return 0; 30}

밑변과밑변과밑변과밑변과높이를높이를높이를높이를 입력입력입력입력받는다받는다받는다받는다.... 입력입력입력입력인자가인자가인자가인자가없는없는없는없는경우경우경우경우 calcTrianglecalcTrianglecalcTrianglecalcTriangle 함수를함수를함수를함수를 호출한다호출한다호출한다호출한다.... 입력입력입력입력인자가인자가인자가인자가있는있는있는있는경우경우경우경우 calcRectanglecalcRectanglecalcRectanglecalcRectangle 함수를함수를함수를함수를 호출한다호출한다호출한다호출한다....

(26)

요약

함수의함수의목적목적

반복되는 코드에 대한 효율적인 관리 , 쉬운 이해 , 코드 크기를 줄이기 위한 목적으로 사용된다 .

기본형태기본형태 입출력입출력형태형태 재귀함수재귀함수

자기 자신을 호출하는 함수를 의미 . 무한 반복에 빠지지 않도록 조심해야 한다 .

(27)

www.themegallery.com IT CookBook for Beginner, C++IT CookBook for Beginner, C++IT CookBook for Beginner, C++IT CookBook for Beginner, C++ 기초기초기초기초5555장장장장끝끝끝끝

참조

관련 문서

[r]

• ‘git checkout’ 명령에 ‘&lt;원격 저장소 이름&gt;/&lt;원격 저장소의 브랜치 이름&gt;’ 인자로 줘서 특정 원격 저장소의 특정 브랜치 파일 워킹 스페이스로 가져올 수

◈ 어떤 데이터 언어가 relational calculus가 표현할 수 있는 모든 질의 를 표현할 수 있을 때 relationally complete 하다고 함

◦ (유예기간 이후) 영국이 EU에서 탈퇴하고, 세계 경기불황과 소비심리 위축이 전 세계적으 로 확산될 경우, 원화가치 하락에 따른 원자재 수입부담 증가,

 a8 =&lt; PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP  4  Ú    GH &amp; () PPP .  

The contemporary music of the twentieth century due to various and new changes in the style of presentation, shows dramatic differences in comparison to

냉장고 속 재료 분류하기 활동

자료형태 &lt;physicalDescription&gt;&lt;form&gt; 필수 디지털 품질 &lt;physicalDescription&gt;&lt;reformattingQuality&gt; 필수