입력을 받아서 특정한 작업을 수행하여 결과를 반환하는 것
(1) 코드 중복 방지
(2) 함수의 재사용 가능
(3) 전체 프로그램을 모듈로 나눌 수 있음 - 개발과정과 유지보수가 쉽고, 체계적
(1) 사용자 정의 함수
(2) 라이브러리 함수
void print_stars() { for (int i=0;i<30;i++) printf("*"); }
void - 반환형
print_stars() - 함수 이름
for (int i=0;i<30;i++)
printf("*");
- 함수 몸체
예제) print_stars() 함수를 2번 호출하여서 다음과 같이 출력하는 프로그램을 작성
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void stars() { for (int i = 0; i < 30; i++) printf("*"); } int main(void) { stars(); printf("\n별이래요 별\n"); stars(); return 0; }
int max(int x, int y) { if(x>y) return x; else return y; }
int - 반환형
max - 함수 이름
(int x, int y) - 매개 변수
if(x>y)
return x;
else
return y;
- 함수 몸체
: 컴파일러에서 제공하는 함수 (표준 입출력, 수학 연산, 문자열 처리, 시간 처리, 오류 처리, 데이터 검색과 정렬)
: rand() - 난수 생성 함수
예제) 1부터 45번 사이의 난수 발생
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main(void) { int i; for (i = 0; i < 6; i++) printf("%d ", 1+(rand()%45)); return 0; }
위의 코드는 항상 같은 난수를 출력시킴!!
코드를 실행할 떄마다 다른 난수를 출력시키기 위해서는
시드(seed)를 다르게 해야함
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int i;
srand((unsigned)time(NULL));
for (i = 0; i < 6; i++)
printf("%d ", 1 + (rand() % 45));
return 0;
}
예제) max() 함수를 호출하여서 사용자가 입력한 값 중에서
더 큰 값을 찾아보자.#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int max(int x, int y) { if (x > y) return x; else return y; } int main(void) { int x,y; printf("점수를 입력하시오 : "); scanf("%d", &x); printf("점수를 입력하시오 : "); scanf("%d", &y); printf("더 큰 값은 %d입니다.", max(x,y)); }
예제) 정수의 합을 계산하는 add() 함수
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int add(int x, int y) { return x + y; } int main(void) { int x,y; printf("점수를 입력하시오 : "); scanf("%d", &x); printf("점수를 입력하시오 : "); scanf("%d", &y); printf("두 수의 합은 %d입니다.", add(x,y)); }
예제) 팩토리얼 계산 함수
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int fact(int n) { int result = 1; for (int i = 1; i <= n; i++) result = result*i; return result; } int main(void) { int n; printf("알고싶은 팩토리얼 값은?"); scanf("%d", &n); printf("%d!의 값은 %d입니다.", n, fact(n)); return 0; }
예제) 조합(combination) 계산 함수
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int get_integer(void); // 정수 입력 받는 함수 int combination(int n, int r); // C 계산 함수 int factorial(int n); //! 계산 함수 int get_integer(void) { int n; printf("정수를 입력하시오:"); scanf("%d", &n); return n; } int factorial(int n) { int i; long result = 1; for (i = 1; i <= n; i++) result = result * i; return result; } int combination(int n, int r) { return (factorial(n) / factorial(r) * factorial(n - r)); } int main(void) { int a, b; a = get_integer(); b = get_integer(); printf("C(%d,%d)=%d", a, b, combination(a, b)); return 0; }
예제) 소수 구하기
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int get_integer(void); // 정수 입력 받는 함수 int prime(int); // 소수 계산 함수 int get_integer(void) { int n; printf("정수를 입력하시오:"); scanf("%d",&n); return n; } int prime(int n) { int divisors = 0, i; for (i = 1; i <= n; i++) { if (n % i == 0) divisors++; } return(divisors == 2); } int main() { int n; int result; n = get_integer(); result = prime(n); if (result == 1) printf("%d은 소수입니다.", n); else printf("%d은 소수가 아닙니다.", n); }
예제) 동전 던지기 게임 : 동전을 100번 던져서 앞면이 나오는 횟수와 뒷면이 나오는 횟수 출력
define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h> int coin_toss(void); int main(void) { int toss; int head=0; int tail=0; srand((unsigned)time(NULL)); // 매번 실행시킬때마다 다른 난수 출력 for (toss = 0; toss < 100; toss++) { // 동전을 100번 던질때까지 if (coin_toss() == 1) // 값이 1이면 head 값 증가 head++; else tail++;// 아니면 tail값 증가 } printf("동전의 앞면 : %d\n", head); printf("동전의 뒷면 : %d\n", tail); return 0; } int coin_toss(void) { int i = rand() % 2; //앞면일지 뒷면일지 if (i == 0) return 0; else return 1; }