본문 바로가기
카테고리 없음

[C언어] 함수, 반환 값이 있는/없는 함수, 전달 값이 있는/없는 함수, 반환 값과 전달 값이 있는 함수

by 박채니 2021. 12. 31.

안녕하세요, 코린이의 코딩 학습기 채니입니다.

함수의 형태와 반환 값이 있는/없는 함수, 전달 값이 있는/없는 함수, 반환 값과 전달 값이 있는 함수에 대해서 포스팅 해보았습니다.

 

함수의 형태

// 선언
void p(int num);

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

	// 2+ 3 은?
	num = 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 * 3 은?
	num *= 3; 
	// printf("num 은 %d 입니다\n", num); // 12
	p(num);

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

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

void p(int num) 로 함수를 선언 ==> int num를 받는 p라는 함수를 선언!

p(num)으로 p라는 함수에 정의한 내용을 출력시킴

선언과 정의에서 함수 형태는 동일해야 한다.


반환값이 없는 함수

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

	return 0;
}

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

void : 아무것도 반환하지 않겠다

 

반환값이 있는 함수

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

	return 0;
}	

int function_with_return()
{

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

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

int : 정수형의 어떤 값을 반환 받겠다

return 10; : 10이라는 값을 반환하겠다

 

function_with_return이라는 함수를 호출하면 { } 내에 있는 어떠한 문장(pritnf ~)을 수행하고 10이라는 값을 반환해준다는 의미!

 

int ret = function_with_return (int return = function_with_return)

반환값이 없는 함수에서는 반환값이 없었기 때문에 함수 호출 후 어떠한 동작을 하지 않음

하지만 반환값이 있는 함수에서는 반환값을 받아야하기 때문에 return값을 출력시킴


전달값이 없는 함수

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

int main(void)
{ 	function_without_params();
	return 0;
	}
    
    void function_without_params()
{
	printf("전달값이 없는 함수 입니다.");
}

전달값이 있는 함수

// 파라미터(전달값)이 있는 함수
void function_with_params(int num1, int num2, int num3);

int main(void)
{	function_with_params(1,2,3);

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

( ~ ) 내에 전달 값을 입력

1, 2, 3 이외에 다른 숫자를 기입하면 num1, num2, num3 값도 동일하게 변경되어 출력됨

 

전달값도 받고 반환값이 있는 함수

//파라미터(전달값)도 받고, 반환값이 있는 함수
int apple(int total, int ate); // 전체 total개에서 ate개를 먹고 남은 수를 반환

int main(void)
{	int ret = apple(5, 2); // 5개의 사과 중에서 2개를 먹었어요.
	printf("사과 5개 중에 2개를 먹으면? %d개가 남아요\n", ret);
		return 0;
	}
    
    int apple(int total, int ate)
{
	printf("전달값과 반화값이 있는 함수 입니다\n");
	return total - ate;
}

3(5 - 2 / toatl - ate)이라는 숫자가 반환되어 나온 값

 

printf("사과 %d개 중에 %d개를 먹으면? %d개가 남아요\n", 10, 4, apple(10, 4));

printf 내에서도 함수 활용 가능

 

//함수를 이용한 계산기

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)
{	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 p(int num)
{
	printf("num은 %d입니다.\n", num);
}
    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;
}

*add 함수 풀이

add는 num와 3 두 개의 정수의 값을 받고 정수형 값을 반환해줌

2라는 값이 num라는 변수에 들어가있고, add라는 함수를 통하여 2+3을 하여 num는 5 라는 값이 되고, p라는 함수에 들어가서 num은 5입니다. 라는 값을 출력!


프로젝트

//프로젝트

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

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

int main(void)
{
	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는?\n", num1, num2);
		showQuestion(i, num1, num2);
	
		int answer = -1;
		scanf_s("%d", &answer);

		if (answer == -1)
		{
			printf("프로그램을 종료합니다.\n\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 * 10) + 1;
}

void showQuestion(int level, int num1, int num2)
{
	printf("\n\n######### %d번 째 비밀번호#########\n", level);
	printf("\n\t%d x %d는?\n\n", num1, num2);
	printf("####################################\n\n");
	printf("비밀번호를 입력하세요 (종료 : -1) : ");
}
void success()
{
	printf(">> 짝짝! 정답입니다!\n");
}
void fail()
{
	printf(">> 땡.. 틀렸습니다.\n");
}