Transcript 5_comp-func

Function
 함수들은 각각 독립적이면서 특정한 목적을 수행하는
목적으로 만들어진다. 하나의 프로그램은 많은 함수들
을 포함하고 있다. 우리가 지금까지 사용해 왔던
main() 도 함수이다. 각 함수에는 지정된 입력 인자와
출력 인자가 명시되어 있으며 이들을 통해 함수들은
서로 대화하며 프로그램의 수행을 이루어간다.
 C++ 언어에서는 함수 정의가 함수 호출문보다 뒤에
오는 경우 함수를 호출하기 전 반드시 함수 원형을 선
언하여야 한다.




RTDCS, HUFS
함수 정의
함수 원형
함수 호출과 인자
인라인(Inline) 함수
1
 함수 정의
 함수: 특정한 작업을 하도록 만들어진 독립적인 프로그램
 서브루틴, 프로시저
 주어진 입력 인자들의 값을 받아서, 작업을 수행하고 결과 값을 return문을
통해 호출자에게 돌려준다.
[반환형] 함수 이름(인자1, 인자2, ... )
{
선언문;
수행문;
[return 문;]
}
 프로그램 작성 시간이 단축되고 프로그램의 길이가 줄어들고 읽
기가 쉽고 프로그램을 변경하거나 에러를 수정하기가 쉽다
RTDCS, HUFS
2
 함수이름: 변수의 이름과 같이 사용자가 정의하며, 이
미 정의 된 시스템이 제공하는 이름은 사용할 수 없다.
 함수의 인자: 상수, 변수, 수식, 배열이나 포인터 등
 반환형: 이미 정의된 자료형으로 return 문에서 반환
하는 값
 반환 값이 없는 경우 -> 반환형을 쓰지 않거나, void
 Return 문: 호출 문으로 값을 넘겨주기 위해 사용되
는 문장
 Return 뒤에는 값, 수식 또는 변수 값 등이 사용
 반환형이 void로 선언된 함수를 제외하고는 반드시
return문 사용
RTDCS, HUFS
3
 두 숫자를 입력으로 받아서 그 합을 돌려주는 함수
int sum(int num1, int num2)
{
int answer;
answer = num1 + num2;
return answer;
}
RTDCS, HUFS
4
함수 호출
 프로그램의 수행이 함수로 넘어가도록 한다.
 호출 시 사용되는 인자들의 개수와 자료형은 함수 선언과 동일
함수의 원형이 먼저 선언
#include <iostream.h>
// 함수 원형 선언
반환형 함수 이름(실인자1, 실인자2, ...);
main()
{
함수 이름(실인자1, 실인자2, ...) ;
또는
변수 = 함수 이름(인자1, 인자2, ....);
.......
}
 함수의 작업이 끝난 후에는 제어가 다시 호출문으로
 함수가 return 값을 갖는 경우와 return값이 없는 경우
RTDCS, HUFS
5
#include <iostream.h>
int sum(int num1, int num2);
main()
{
int score1, score2;
int result;
cout << ‘’Enter two values : ‘’;
cin >> score1 >> score2;
result = sum(score1, score2);
cout << ‘’Sum is ‘’ << result<< endl;
}
int sum(int num1, int num2)
{
int answer;
answer = num1 + num2;
return answer;
};
Enter two values : 23 34
Sum is 57
RTDCS, HUFS
6
형식인자와 실인자
 함수 호출문과 함수 선언부는 인자들을 통해 정보를
 실인자 : 함수 호출시 호출문에 함수 이름과 함께 쓰
인다
 형식인자 : 함수 선언부에서 선언된 인자들이다.
 함수 호출시에 실인자들은 형식인자들과 왼쪽으로부
터 차례대로 대응
 형식인자들과 배열 순서와 자료형이 같아야 한다
RTDCS, HUFS
7
int max_val(int num1, int num2, int num3)
{
..........
}
main()
{
int value1, value2, value3;
.........
max = max_val(value1, value2, value3);
..........
}
RTDCS, HUFS
8
#include <iostream.h>
int math(int num1, int num2, int num3);
main()
{
int value1, value2, value3;
int result;
value1 = 10;
value2 = 20;
value3 = 30;
result = math(value1, value2, value3);
cout << ‘’The 1st result is ‘’ << result << endl;
result = math(value2, value3, value1);
cout << ‘’The 2nd result is ‘’ << result << endl;
result = math(value3, value1, value2);
cout << ‘’The 3rd result is ‘’ << result << endl;
}
RTDCS, HUFS
9
int math(int num1, int num2, int num3)
{
int temp;
temp = num1 + num2 - num3;
return temp;
}
출력
The 1st result is 0
The 2nd result is 40
The 3rd result is 20
RTDCS, HUFS
10
 return 문이 없는 경우 : VOID
 다음 프로그램의 함수 print_message()는 호출될 때마다 인쇄
작업을 하지만, 호출문으로 돌려주는 값은 없다.
 이때, 이러한 사실을 알리기 위해 변환형 자리에 void를 쓴다.
#include <iostream.h>
void print_message()
{
cout << ‘’Learning C++ is fun.’’ << endl;
}
main()
{
print_message();
print_message();
}
RTDCS, HUFS
11
인자 전달 방식
 Call By Value 와 Call By Reference
 Call by value
 실인자의 값만을 형식인자에 전달
 함수에서 형식인자에 대한 작업은 실인자에 영향을 미치지 않음
RTDCS, HUFS
12
 변수 a 와 b 의 각 값을 10과 20으로 각각 할당하고, 함수
change를 호출한 후에 a,b 값을 출력해 보는 프로그램
#include <iostream.h>
void change (int front, int back);
main()
{
int a = 10;
int b = 20;
change (a, b);
cout << ‘’a = ‘’ << a;
cout << ‘’ b = ‘’ << b << endl;
}
RTDCS, HUFS
13
void change (int front, int back)
{
int temp;
temp = front;
front = back;
back = temp;
cout << ‘’front = ‘’ << front;
cout << ‘’ back = ‘’ << back << endl;
}
front = 20 back = 10
a = 10 b = 20
RTDCS, HUFS
14
인자 전달 방식
 Call by reference
 인자를 넘겨줄 때 형식인자의 주소를 인자로 넘겨주는 방법
 함수의 수행 결과가 인자에 반영되어 호출한 함수에서 사용
 함수 선언 부분의 형식인자 부분은 인자 앞에 ‘&’를 사용
RTDCS, HUFS
15
#include <iostream.h>
void change (int &front, int &back);
main()
{
int a = 10;
int b = 20;
change (a, b);
cout << ‘’a = ‘’ << a;
cout << ‘’ b = ‘’ << b << endl;
}
RTDCS, HUFS
16
void change (int &front, int &back)
{
int temp;
temp = front;
front = back;
back = temp;
cout << ‘’front = ‘’ << front;
cout << ‘’ back = ‘’ << back << endl;
}
front = 20 back = 10
a = 20 b = 10
RTDCS, HUFS
17
인라인(Inline) 함수
 함수가 실제로 호출되는 대신에 호출문의 자리에 삽입
되도록 정의
 장점: 함수 호출에서 야기되는 시간적인 지체를 없앤
다.
 단점: 자주 호출될 때는 함수의 크기가 커진다
inline 반환형 함수 이름(인자1, 인자2, ...) { .... };
 간단하고 코드의 길이가 짧은 경우 사용
RTDCS, HUFS
18
#include <iostream.h>
inline int sum(int num1, num2)
{
int answer;
answer = num1 + num2;
return answer
};
main()
{
int score1, score2;
int result;
cin >> score1 >> score2;
result = sum(score1, score2);
cout << result;
}
RTDCS, HUFS
19
#include <iostream.h>
int odd_even (int num)
{
if (num % 2 == 0)
return (2);
else
return (1);
}
main()
{
int answer;
answer = odd_even(7);
if (answer == 1)
cout << ‘’The number is odd \n’’;
else
cout << ’’The number is even \n’’;
}
RTDCS, HUFS
20
#include <iostream.h>
int fact (int num)
{
int x, result;
result = 1;
if (num == 0)
return (result);
else
{
for (x = 1; x <= num; x++)
result = result * x;
return (result);
}
}
RTDCS, HUFS
21
main()
{
int value;
int answer;
value = 3;
answer = fact(value);
cout << ‘’The result is ‘’ << answer;
}
RTDCS, HUFS
22
#include <iostream.h>
int add2 (int num1, int num2)
{
if ((num1 == 0) || (num2 == 0))
return (0);
else
return (num1 * num2);
}
int add4 (int num1, int num2, int num3, int num4)
{ int temp1, temp2;
temp1 = add2(num1, num2)+ 10;
temp2 = add2(num3, num4) - 5;
return(add2(temp1, temp2);
}
main()
{ int
answer;
answer = add4(5, 6, 7, 8);
cout << ‘’The result is ‘’ << answer;
}
RTDCS, HUFS
23
빈 line 채우기
#include <iostream.h>
{
if (score >= 90)
else if (score >= 80)
else if (score >= 70)
else if (score >= 60)
else if ( score >= 65 )
return('F');
}
RTDCS, HUFS
24
main()
{
int score;
char
grade;
cout << "Enter your score: ";
cin >> score;
grade = grd_fun(score);
cout << "Your grade is " << grade <<endl;
}
RTDCS, HUFS
25
 경과된 시간을 몇 분 몇 초로 입력하면, 그것을 초로 돌려주는 프
로그램
#include <iostream.h>
int convert ( int min, int sec)
{
int total_sec;
return total_sec;
}
RTDCS, HUFS
26
main()
{
int min, sec;
int result;
cout << "Enter minutes and seconds: ";
cin >> min >> sec;
result = convert(min, sec);
cout << "The result is " << result;
}
RTDCS, HUFS
27
1. 두 개의 정수a, b를 읽어서 a의 b 제곱승을 출력하는
프로그램을 함수를 이용하여 작성하시오.
(예 : f(a, b) = ab )
2. 입력된 정수의 절대값을 돌려주는 함수를 작성하시오.
(예 : f(7) = 7. f(-7) = 7)
RTDCS, HUFS
28