[C언어] 함수

yunssup·2023년 6월 9일

C언어

목록 보기
9/13
post-thumbnail

1.함수란?

입력을 받아서 특정한 작업을 수행하여 결과를 반환하는 것

2.함수의 장점

(1) 코드 중복 방지
(2) 함수의 재사용 가능
(3) 전체 프로그램을 모듈로 나눌 수 있음 - 개발과정과 유지보수가 쉽고, 체계적

3. 함수의 종류

(1) 사용자 정의 함수
(2) 라이브러리 함수

4. 함수의 정의

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;
}

5.매개 변수와 반환값

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;
- 함수 몸체

6. 라이브러리 함수

: 컴파일러에서 제공하는 함수 (표준 입출력, 수학 연산, 문자열 처리, 시간 처리, 오류 처리, 데이터 검색과 정렬)

6-1. 난수 함수

: 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;
}

0개의 댓글