[C] 4. function (함수)

Kim Dongil·2022년 10월 10일
0

C

목록 보기
6/28

함수

- 함수(Function) : 프로그램 코드의 일부로 특정한 기능에 필요한 코드를 모아 놓은 독립적인 부분
- 함수 호출(Function Call) : 독립적 코드로 만들어 놓은 함수를 호출 하는 것

// function
// 계산기

int num = 2;
printf("num 은 %d 입니다\n", num); // 2

// 2 + 3 은?
num = num + 3; // num += 3;
//printf("num 은 %d 입니다\n", num); // 5

// 5 - 1 은?
num -= 1; // num = num - 1;
//printf("num 은 %d 입니다\n", num); // 4

// 4 x 3 은?
num *= 3;
//printf("num 은 %d 입니다\n", num); // 12

// 12 / 6 은?
num /= 6;
//printf("num 은 %d 입니다\n", num); // 2

함수 선언

필요성 : 컴파일러의 특성상, 함수는 호출되기 전에 정의되어야 한다. 
의미 : 이후에 정의될 함수에 대한 정보 제공

// 선언
void p(int num);

int num = 2;
printf("num 은 %d 입니다\n", num); // 2
p(num);

// 2 + 3 은?
num = num + 3; // num += 3;
//printf("num 은 %d 입니다\n", num); // 5
p(num);

// 5 - 1 은?
num -= 1; // num = num - 1;
//printf("num 은 %d 입니다\n", num); // 4
p(num);

// 4 x 3 은?
num *= 3;
//printf("num 은 %d 입니다\n", num); // 12
p(num);

// 12 / 6 은?
num /= 6;
//printf("num 은 %d 입니다\n", num); // 2
p(num);

// 정의
void p(int num)
{
	printf("num 은 %d 입니다\n", num);
}

함수의 형태

// 전달값 : 36
// 함수 : ㅁ + 4
// 반환형 : ?

반환형 함수이름(전달값)

void 함수이름(int num1, int num2, char c, float f)
{

}

함수 종류

#include <stdio.h>

void function_without_return();
int function_with_return();
void function_without_params();
void function_with_params(int num1, int num2, int num3);
int apple(int total, int ate); // 전체 total 개에서 ate 개를 먹은 남은 수를 반환

int add(int num1, int num2);
int sub(int num1, int num2);
int mul(int num1, int num2);
int div(int num1, int num2);

int main(void)
{
	// 반환값이 없는 함수
	function_without_return();

	// 반환값이 있는 함수
	int ret = function_with_return();
	p(ret);

	// 파라미터(전달값)가 없는 함수
	function_without_params();

	// 파라미터(전달값)가 있는 함수
	function_with_params(35, 27, 12);
    
    // 파라미터(전달값)도 받고, 반환값이 있는 함수
	int ret = apple(5, 2); // 5개의 사과 중에서 2개를 먹었어요
	printf("사과 5개 중에 2개를 먹으면? %d 개가 남아요 \n", ret);
	printf("사과 %d 개 중에 %d 개를 먹으면? %d 개가 남아요\n", 10, 4, apple(10, 4));


	// 계산기 함수
	int num = 2;
	num = add(num, 3);
	p(num);

	num = sub(num, 1);
	p(num);

	num = mul(num, 3);
	p(num);

	num = div(num, 6);
	p(num);
    
    return 0;
}

void function_without_return()
{
	printf("반환값이 없는 함수입니다\n");
}

int function_with_return()
{
	printf("반환값이 있는 함수입니다\n");
	return 10;
}

void function_without_params()
{
	printf("전달값이 없는 함수입니다\n");
}

void function_with_params(int num1, int num2, int num3)
{
	printf("전달값이 있는 함수이며, 전달받은 값은 %d, %d, %d 입니다\n", num1, num2, num3);
}

int apple(int total, int ate)
{
	printf("전달값과 반환값이 있는 함수입니다\n");
	return total - ate;
}

int add(int num1, int num2)
{
	return num1 + num2;
}

int sub(int num1, int num2)
{
	return num1 - num2;
}

int mul(int num1, int num2)
{
	return num1* num2;
}

int div(int num1, int num2)
{
	return num1 / num2;
}
	

Project (비밀번호 마스터)

#include <stdio.h>
#include <time.h>

int getRandomNumber(int level);
void showQuestion(int level, int num1, int num2);
void success();
void fail();

int main_function_project(void)
{
	// 문이 5개가 있고, 각 문마다 점점 어려운 수식 퀴즈가 출제 (랜덤)
	// 맞히면 통과, 틀리면 실패

	srand(time(NULL));
	int count = 0; // 맞힌 문제 수
	for (int i = 1; i <= 5; i++)
	{
		// x * y = ?
		int num1 = getRandomNumber(i);
		int num2 = getRandomNumber(i);
		//printf("%d x %d ?", num1, num2);
		showQuestion(i, num1, num2);

		int answer = -1;
		scanf_s("%d", &answer);
		if (answer == -1)
		{
			printf("프로그램을 종료합니다\n");
			exit(0);
		}
		else if (answer == num1 * num2)
		{
			//성공
			success();
			count++;
		}
		else
		{
			//실패
			fail();
		}
	}
	
	printf("\n\n 당신은 5개의 비밀번호 중 %d 개를 맞혔습니다\n", count);

	return 0;
}

int getRandomNumber(int level)
{
	return rand() % (level * 7) + 1;
}

void showQuestion(int level, int num1, int num2)
{
	printf("\n\n\n####### %d 번째 비밀번호 ######", level);
	printf("\n\t%d x %d 는? \n\n", num1, num2);
	printf("############################\n");
	printf("\n비밀번호를 입력하세요 (종료 : -1) >> ");
}

void success()
{
	printf("\n >>> Good ! 정답입니다 \n");
}

void fail()
{
	printf("\n >>> 땡 ! 틀렸습니다\n");
}

참고 포스팅

C 언어 무료 강의 (입문부터 게임 개발까지)
함수의 정의와 선언

0개의 댓글