학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

함수

학습목표

함수를 사용하여 체계적으로 프로그램을 만든다.

Led 순차적인 점등을 함수를 사용하여 만들어 본다.

학습주제

전달 인수가 없는 함수

전달인수가 1개일

전달인수 2 이상일 때를 공부 한다.

예습내용

함수란 특정작업을 독립적으로 수행하는 독립된 프로그램이다. C/C++에서 여러 개의 함수로 나누어 작업하며 다음과 같은 장점이 있다.

1)       프로그램 작성의 난이도를 낮출 있다.

2)       여러 사람이 공동 작업을 있다.

한번 검증 함수는 다시 오류검사를 하지 않음으로 시간을 절약 있다.

1.함수의 정의

함수는 이름을 가진다.

함수는 독립적이다.

함수는 특정 동작을 수행한다.

함수는 호출한 프로그램을 결과값을 돌려 있다.

자료유형   함수명(인수);

 {

        내부변수 선언;

       실행문;    

       ..

 }

 

 

 

 

 

 

함수도 값을 가지므로 변수와 같이 자료 유형(int, char, float, double,void ) 선언해야 한다. 자료 유형에 따라 반환값(return) 보내지만 void 경우는 return 값이 없다.

 

2. 함수 만들기

다음은 함수를 만드는 가장 기본적인 방법이다. “main()” 함수 이전에 “value()” 함수를 정의 하여 함수안에서 계산 결과를 출력하는 프로그램이다.

예제1 가장 기본적인 함수 선언

3 제곱 9 출력

#include "stdafx.h"

#include "iostream.h"

 

void value(void)

{

              int a=3;

              cout<<a*a<<endl;

}

 

int main(int argc, char* argv[])

{

              value();

              return 0;

}

9

프로그램을 만들 “main()” 함수가 처음에 위치하고 기타 서브함수는 뒤에 위치해야 전체 프로그램을  한눈에 파악할 있다. 그러므로 아래와 같이 “main()” 이전에 함수를 선언하고 서브함수는 뒤에 위치 하게 한다.

예제2 메인 함수를 앞으로

3 제곱 9 출력

#include "stdafx.h"

#include "iostream.h"

 

void value(void);  // 함수 선언

 

int main(int argc, char* argv[])

{

              value();

              return 0;

}

 

void value(void)

{

              int a=3;

              cout<<a*a<<endl;

}

9

 

3. 함수의 인수 전달과 결과 (1) 돌려 받기

다음은 “main()”에서 어떤 수를 함수로 넘겨주고 결과를 받아 보자.

함수에 어떠한 값을 넘겨줄 때에는 인수를 사용한다. 값을 받을 때는 return문을 사용한다.

예제3 인수 전달과 결과 돌려 받기

이는 함수의 가장기본적인 형태이다. (매우 중요)

입력한 수의 제곱을 출력

#include "stdafx.h"

#include "iostream.h"

 

int value(int in);

 

int main(int argc, char* argv[])

{

              cout<<value(2)<<endl;          // 함수 호출 (1)

              return 0;

}

 

int value(int in)                      // return 형태 선언과 전달인수 나열 (2)

{

              return in*in;            // return 기록 (2)

}

4

위의 예제에서 함수는 int 선언되어 있어서 이를 variable처럼 사용할 있다.

(1)   다음과 같이 바꾸어 보시오.

cout<<value()/3<<endl;

결과는 함수의 결과 9 3으로 나눈 3 출력 된다.

여기서 중요한 점은 return 결과를 1 밖에 돌려줄 없다.

 

4. void 함수 에서 결과값 돌려 받기(포이터를 배운 공부하세요)

인수에 포인터를 사용하여 값을 받는다. 이는 메모리에 저장한다는 말이니 char 제외한 인수는 “&”(메모리 번지 표시) 사용해야 한다.

예제4 void 함수에서 인수 전달과 결과 돌려 받기

입력한 수의 제곱을 출력

#include "stdafx.h"

#include "iostream.h"

 

void value(int in, int *out);

 

int main(int argc, char* argv[])

{

              int out;

              value(2,&out);         // &out 번지를 표시한다.

              cout<<out<<endl; // 결과를 출력

              return 0;

}

 

void value(int in, int *out)                      // 결과값은 포인터로 선언 (2)

{

              out = in*in;            

}

4

 

5. 2 이상의 결과를 돌려받기

예제4 인수부에 값을 받는 포인터를 하나 추가하면 된다.

예제5  2개의 결과 돌려 받기

입력한 수의 제곱과 합을 출력

#include "stdafx.h"

#include "iostream.h"

 

void value(int in, int *out);

 

int main(int argc, char* argv[])

{

              int out;

              value(2,&out);         // &out 번지를 표시한다.

              cout<<out<<endl; // 결과를 출력

              return 0;

}

 

void value(int in, int *out)                      // 결과값은 포인터로 선언 (2)

{

              out = in*in;            

}

4

 

3 이상의 인수를 받을 때는 위와 같이 계속 인수를 추가하면 된다.

그러나 인수가 100 정도로 많을 때는 배열을 사용하고 포인터를 사용하여 배열의 첫번째 주소를 넘겨주고 메인에서는 데이터 형태에 따라 이를 차례로 읽는다.

 

6.재귀함수

함수의 실행부에서 자신을 호출하는 함수

예제6

임의 n 입력받아 n부터 1까지의 출력하는 프로그램

n 1 감소 시키면서 0 때까지 자기 자신을 반복해서 부른다.

#include "stdafx.h"

#include "iostream.h"

 

void recursive(int n);

 

int main(int argc, char* argv[])

{

              int num;

 

              cin>>num;

              recursive(num);

              return 0;

}

 

void recursive(int n)

{

              if(n<=0) return;

              else {

                             cout<<"n="<<n<<endl;

                             recursive(n-1);

              }

}

실습방법

   

위의 예제 프로그램을 실행해 본다.

 

처음

   

예제4에서 cin으로 입력 받은 수의 제곱을 구하는 프로그램을 완성하시오.

 

AVR 프로그램

Led 순차 점등 프로그램을 “LedOnOff( )”라는 함수를 만들고 함수를 실행하는 프로그램을 만든다.

AVR 예제1  함수를 이용한 Led 점등 프로그램

#include <mega128.h>

#include <delay.h>

 

void LedOnOff(void)

{

              char i,a=0x01; 

              for(i=0;i<8;i++) {

                             PORTC = ~a;

                             a=a<<1;

                             delay_ms(500);         

              }

}

 

// Declare your global variables here

 

void main(void)

{

while (1)

      {

      // Place your code here  

        LedOnOff();            // 함수를 호출한다.

      };

}

전체프로그램 보기

 

외부 인터럽트를 함수로 처리하는 프로그램을 만들어 본다. [보기]