5. 함수의 개념
• 인수를 전달 받아 일련의 작업을 수행한 뒤 그 결과를 반환하는 문장들의
집합.
• 언어에 따라 메소드(method), 프로시저(procedure) 등으로 불러지기도
한다.
• 간단히 수학에서의 함수를 생각하면 된다.
• C 프로그램은 이러한 함수들이 모여 이루어지게 된다.
F(x)?……!!
6. 함수의 필요성
• 반복되는 작업들을 함수로 작성함으로써 코드의 간략화.
• 간략화된 코드로 인한 가독성 증가.
• 코드의 모듈화를 통한 재사용 용이, 효율성 증대.
• 유지 관리 측면에 많은 이점 제공.
VS
8. 기본 정의법
int add(int a, int b)
{
int result;
result = a + b
return result;
}
반환형
함수 이름 매개 변수
함수 몸체
9. Q1. 간단한 함수 만들기
• 두 값을 넣으면 큰 값을 반환하는 bigger 함수를 만들어 보라. (단, main 함수는 작성
할 필요 없이, bigger 함수만 작성하도록 한다.)
10. A1. 간단한 함수 만들기
int bigger(int a, int b)
// 두 개의 int형을 매개변수로 받아 int형을 반환하는 bigger 함수
{
if(a>b) return a; // a가 b보다 크면 a를 반환
else return b; // 그 외의 경우 b를 반환
}
11. 함수 원형 이용(1)
• Q1의 전체 코드
#include <stdio.h>
int bigger(int a, int b)
{
if(a>b) return a;
else return b;
}
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("n%d is bigger.n", bigger(a, b));
}
12. 함수 원형 이용(2)
• 함수 원형을 이용한 코드
#include <stdio.h>
int bigger(int a, int b); // 함수원형!
int main(void) // main문이 위로 올라올 수 있다!
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("n%d is bigger.n", bigger(a, b));
}
int bigger(int a, int b)
{
if(a>b) return a;
else return b;
}
14. 함수의 호출
• 문법 : (함수명)((매개인자))
• Ex) add(1, 2);
• 매개인자로 넘겨준 데이터를 이용하여 함수 내부의 코드를 실행한다.
Void main()
{
…
add(1, 2);
…
bigger( 2, 3);
…
}
Int add(int a, int b)
{
…
…
}
Int bigger (int a, int b)
{
…
…
}
15. 값의 반환 (1)
• 함수를 통하여 얻어진 값을 반환하려면 ‘return’을 사용하면 된다.
• 또한 반환값은 함수의 반환형과 일치해야 한다.
Int add(int a, int b)
{
return a+b;
}
16. 값의 반환 (2)
• 단! 반환값은 오직 하나!
Int multi_add(int a, int b, int c)
{
return a+b, b+c, a+b+c;
}
17. 값의 반환 (2)
• 단! 반환값은 오직 하나!
Int multi_add(int a, int b, int c)
{
return a+b, b+c, a+b+c;
}
19. 지역변수 (1)
#include <stdio.h>
int add(int a, int b);
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("result : %dn", add(a, b));
}
int add(int x, int y)
{
int result;
result = x+y;
return result;
}
result 변수의 생존 기간
(add 함수 내에서만 생존!)
a,b 변수의 생존 기간
(add 함수 내에서는 적용되지 않는다!)
21. 전역변수
• 전역변수 : 함수 외부에서 선언되어 소스 파일 전체에서 사용되는 변수
#include <stdio.h>
int count = 0;
void main(void)
{
func();
printf(“%dn”, count);
}
void func(void)
{
count++;
}
22. 저장 유형 지정자 (1)
• Static : 지역변수를 고정시켜주는 지정자.
void main(void)
{
int i;
for(i=0; i<10; i++) printf(“%dn”, func());
}
int func(void)
{
static int count = 0;
count++;
return count;
}
23. 저장 유형 지정자 (1)
• Static : 지역변수를 고정시켜주는 지정자.
void main(void)
{
int i;
for(i=0; i<10; i++) printf(“%dn”, func());
}
int func(void)
{
static int count = 0;
count++;
return count;
}
24. 저장 유형 지정자 (2)
• register : 변수를 메모리가 아닌 CPU 내부의 레지스터에 저장
Ex)
register int i;
for(i=0; i<10000; i++) sum += I;
26. 암호화 프로그램의 함수화
1. 지난 세미나 때 만든 암호화 프로그램을 함수화 하세요.
1. 암호화 하는 부분을 함수화 합니다.
2. 평문(char plain[])을 매개 변수로 받아서 암호문(int
chipher[])으로 바꿔 넣어줍니다.
3. 다음과 같은 함수 원형을 사용합니다.
4. void Encrypted(char plain[], char key[], int
chipher[])
27. 암호화 프로그램의 함수화
2. 이번엔 복호화 함수도 만듭니다!
1. 이건 암호화의 역순으로 진행하면 되겠죠?
2. 암호문(int chipher[])을 받아서, 평문(char plain[])
으로 바꿔 넣어줍니다.
3. 다음과 같은 함수 원형을 사용합니다.
4. void Decrypted(int chipher[], char key[],
char plain[],);
28. 암호화 프로그램의 함수화
3. 메인 문에서 기능을 선택해 프로그램을 이용할 수 있도록 하세요.
1. 메뉴는 다음 과 같습니다.
1. 암호화
2. 복호화
3. 프로그램 종료
4. 제출일은 다음 주 토요일 정오, 4월 6일 12:00 까지 입니다!
제출은 dragonznet@naver.com 으로 하세요!