7 - Function

<학습하기>
함수 (function)
어떤 작업을 하기 위한 명령어 여러개를 모아놓은 묶음으로,
그 작업이 필요할 때마다 호출해서 쉽게 사용할 수 있도록 하는 도구.

ex)
puts() :   문자열을 받아서 콘솔에 출력하기 위한 명령어들을 모아놓은 함수.
printf() :  여러개의 데이터를 받아 출력하기 위한 명령어들을 모아놓은 함수.
scanf() :  여러 변수에 입력을 받기 위한 명령어들을 모아놓은 함수.

함수의구조
반환형식 함수이름 (전달인수)
{
  명령어;
  명령어;
  :
 return 반환값
}

-반환형식
이 함수가 실행 후의 결과를 돌려줄 때, 돌려주는 겨로가의 데이터형을 지정한다.
반환형식에는 c에서 사용하는 모든 데이터 타입이 가능하다.

-함수이름
이 함수를 호출할 때 필요한 이름. 이 이름을 통해 함수를 호출하게 된다.

-전달인수
호출하는 쪽에서 호출되는 함수로 전달해주는 데이터.
둘 이상의 데이터가 있을 경우 앞쪽 변수부터 순서대로 들어가게 된다.

-return
호출된 함수에서 호출된 쪽으로 전달하는 데이터.
return문으로 전달되는 데이터는 [반환형식]과 동일한 형이어야 한다.
return문은 함수 중간에 올 수도 있으며 ,
이 경우에는 함수의 나머지 부분을 무시하고 무조건 호출된 쪽으로 되돌아간다.


일반적으로 처음 함수를 사용하는 위치에서는 에러가 날 수 있다.
왜냐하면 컴파일러는 처음부터 끝까지 한번만 읽어서 해석하는데,
해당 함수에 대한 정보가 아직 안나왔을 수 있기 때문이다.

해결방법 1.
함수가 사용되기 전에 함수를 선언한다.
void Add()
{
}

main()
{
  Add();
}

해결방법 2.
함수가 사용되기 전에 함수에 대한 정보를 알려준다.
즉, 함수의 머리만 잘라낸 후 ;으로 마무리.
void Add();    //뒤에서 Add라는 함수가 나올 것이라 알려줌.

main()
{
  Add();
}

void Add()
{
  :
  :
}

프로그램에서 주로 사용하는 범용 함수 (printf ,scanf 등)들의 정의
비주얼 스튜디오가 제공하는 헤더파일에 따로 정의되어 있다.

stdio.h : STanDard Input Output Headerfile
콘솔 입출력 또는 파일 입출력에 관련된 여러 함수들의 정의가 되어 있는 파일.
주로 프로그램의 가장 앞에 포함되므로 header파일이라 부른다.

#include <파일이름>
#include  "파일이름"
[파일이름]에 해당하는 파일을 열어 이 부분에 끼워넣어 컴파일하라는 명령.
<파일이름>은 컴파일러의 폴더에서 파일을 찾으라는 명령이며,
"파일이름"은 해당 프로그램의 작업 폴더에서 파일을 찾으라는 명령.

<실습하기>

#include <stdio.h>
//double형 두 실수를 입력받아 사칙연산을 출력하는 프로그램을 만들어라.
//printf 나 puts 를 정의 안해도 되는 이유는 stdio.h때문.
//stdio.h문서를 열어서 확인하면 함수가 저장되어 있다.

double Add(double dblA, double dblB); //앞으로 Add라는 함수가 나올 것
double Subst(double dblA, double dblB);
double Mult(double dblA, double dblB);
double Div(double dblA, double dblB);



main()

{
double dblA, dblB;
double subst;
double mult;
double div;
double add;

printf("두개의 실수를 입력해주세요 : ");
scanf("%lf %lf", &dblA,&dblB);
// f:실수형으로 해석하라
// l:큰 변수(double형)에 집어넣어라

//Add라는 함수를 호출한다.
add = Add(dblA, dblB);
        //Add를 호출할 때 두개의 double값을 함께 전달해 주어야한다.
printf("%f + %f= %f\n", dblA, dblB, add);
//printf 에서는 %f와 %lf의 구분 없이 모두 %f사용 가능.

subst = Subst(dblA, dblB);
printf("%f - %f = %f\n", dblA,dblB,subst);

mult = Mult(dblA, dblB);
printf("%f * %f = %f\n", dblA,dblB,mult);

//dblB가 0일 경우에는 나머지 계산할 수 없음.
if(dblB !=0) //dblB가 0이 아닐 경우
{
div = Div(dblA,dblB);
printf("%f / %f = %f\n", dblA, dblB,div);
}
else
puts("dblB가 0이므로 나누기 계산 불가");

}

// 함수
/*

반환형식 함수이름(전달인수)
{



}

*/

//더하기 함수
double Add(double dblA, double dblB)
{
//두 실수 dblA와 dblB의 합을 반환한다.
return dblA+dblB;

}

//빼기 함수
double Subst(double dblA, double dblB)
{
return dblA-dblB;
}

//곱하기 함수
double Mult(double dblA, double dblB)
{
return dblA*dblB;
}

//나누기 함수
double Div(double dblA, double dblB)
{
return dblA/dblB;
}



댓글

이 블로그의 인기 게시물

11 - Scanf

JAVA - Day3 - Scanner, if, if else

JAVA - Day5 - Array,Random