280 likes | 398 Vues
Function. 함수들은 각각 독립적이면서 특정한 목적을 수행하는 목적으로 만들어진다 . 하나의 프로그램은 많은 함수들을 포함하고 있다 . 우리가 지금까지 사용해 왔던 main() 도 함수이다 . 각 함수에는 지정된 입력 인자와 출력 인자가 명시되어 있으며 이들을 통해 함수들은 서로 대화하며 프로그램의 수행을 이루어간다 . C++ 언어에서는 함수 정의가 함수 호출문보다 뒤에 오는 경우 함수를 호출하기 전 반드시 함수 원형을 선언하여야 한다 . 함수 정의 함수 원형 함수 호출과 인자
E N D
Function • 함수들은 각각 독립적이면서 특정한 목적을 수행하는 목적으로 만들어진다. 하나의 프로그램은 많은 함수들을 포함하고 있다. 우리가 지금까지 사용해 왔던 main() 도 함수이다. 각 함수에는 지정된 입력 인자와 출력 인자가 명시되어 있으며 이들을 통해 함수들은 서로 대화하며 프로그램의 수행을 이루어간다. • C++ 언어에서는 함수 정의가 함수 호출문보다 뒤에 오는 경우 함수를 호출하기 전 반드시 함수 원형을 선언하여야 한다. • 함수 정의 • 함수 원형 • 함수 호출과 인자 • 인라인(Inline) 함수
함수 정의 • 함수: 특정한 작업을 하도록 만들어진 독립적인 프로그램 • 서브루틴, 프로시저 • 주어진 입력 인자들의 값을 받아서, 작업을 수행하고 결과 값을 return문을 통해 호출자에게 돌려준다. [반환형] 함수 이름(인자1, 인자2, ... ) { 선언문; 수행문; [return 문;] } • 프로그램 작성 시간이 단축되고 프로그램의 길이가 줄어들고 읽기가 쉽고 프로그램을 변경하거나 에러를 수정하기가 쉽다
함수이름: 변수의 이름과 같이 사용자가 정의하며, 이미 정의 된 시스템이 제공하는 이름은 사용할 수 없다. • 함수의 인자: 상수, 변수, 수식, 배열이나 포인터 등 • 반환형: 이미 정의된 자료형으로 return 문에서 반환하는 값 • 반환 값이 없는 경우 -> 반환형을 쓰지 않거나, void • Return 문: 호출 문으로 값을 넘겨주기 위해 사용되는 문장 • Return 뒤에는 값, 수식 또는 변수 값 등이 사용 • 반환형이 void로 선언된 함수를 제외하고는 반드시 return문 사용
두 숫자를 입력으로 받아서 그 합을 돌려주는 함수 int sum(int num1, int num2) { int answer; answer = num1 + num2; return answer; }
함수 호출 • 프로그램의 수행이 함수로 넘어가도록 한다. • 호출 시 사용되는 인자들의 개수와 자료형은 함수 선언과 동일 함수의 원형이 먼저 선언 #include <iostream.h> // 함수 원형 선언 반환형 함수 이름(실인자1, 실인자2, ...); main() { 함수 이름(실인자1, 실인자2, ...) ; 또는 변수 = 함수 이름(인자1, 인자2, ....); ....... } • 함수의 작업이 끝난 후에는 제어가 다시 호출문으로 • 함수가 return 값을 갖는 경우와 return값이 없는 경우
#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
형식인자와 실인자 • 함수 호출문과 함수 선언부는 인자들을 통해 정보를 • 실인자 : 함수 호출시 호출문에 함수 이름과 함께 쓰인다 • 형식인자 : 함수 선언부에서 선언된 인자들이다. • 함수 호출시에 실인자들은 형식인자들과 왼쪽으로부터 차례대로 대응 • 형식인자들과 배열 순서와 자료형이 같아야 한다
int max_val(int num1, int num2, int num3) { .......... } main() { int value1, value2, value3; ......... max = max_val(value1, value2, value3); .......... }
#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; }
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
return 문이 없는 경우 : VOID • 다음 프로그램의 함수 print_message()는 호출될 때마다 인쇄 작업을 하지만, 호출문으로 돌려주는 값은 없다. • 이때, 이러한 사실을 알리기 위해 변환형 자리에 void를 쓴다. #include <iostream.h> void print_message() { cout << ‘’Learning C++ is fun.’’ << endl; } main() { print_message(); print_message(); }
인자 전달 방식 • Call By Value 와 Call By Reference • Call by value • 실인자의 값만을 형식인자에 전달 • 함수에서 형식인자에 대한 작업은 실인자에 영향을 미치지 않음
변수 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; }
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
인자 전달 방식 • Call by reference • 인자를 넘겨줄 때 형식인자의 주소를 인자로 넘겨주는 방법 • 함수의 수행 결과가 인자에 반영되어 호출한 함수에서 사용 • 함수 선언 부분의 형식인자 부분은 인자 앞에 ‘&’를 사용
#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; }
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
인라인(Inline) 함수 • 함수가 실제로 호출되는 대신에 호출문의 자리에 삽입되도록 정의 • 장점: 함수 호출에서 야기되는 시간적인 지체를 없앤다. • 단점: 자주 호출될 때는 함수의 크기가 커진다 inline 반환형 함수 이름(인자1, 인자2, ...) { .... }; • 간단하고 코드의 길이가 짧은 경우 사용
#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; }
#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’’; }
#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); } }
main() { int value; int answer; value = 3; answer = fact(value); cout << ‘’The result is ‘’ << answer; }
#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; }
빈 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'); }
main() { int score; char grade; cout << "Enter your score: "; cin >> score; grade = grd_fun(score); cout << "Your grade is " << grade <<endl; }
경과된 시간을 몇 분 몇 초로 입력하면, 그것을 초로 돌려주는 프로그램 #include <iostream.h> int convert ( int min, int sec) { int total_sec; return total_sec; }
main() { int min, sec; int result; cout << "Enter minutes and seconds: "; cin >> min >> sec; result = convert(min, sec); cout << "The result is " << result; }
1. 두 개의 정수a, b를 읽어서 a의 b 제곱승을 출력하는 프로그램을 함수를 이용하여 작성하시오. (예 : f(a, b) = ab ) 2. 입력된 정수의 절대값을 돌려주는 함수를 작성하시오. (예 : f(7) = 7. f(-7) = 7)