안녕하세요, 코린이의 코딩 학습기 채니입니다.
함수의 형태와 반환 값이 있는/없는 함수, 전달 값이 있는/없는 함수, 반환 값과 전달 값이 있는 함수에 대해서 포스팅 해보았습니다.
함수의 형태
// 선언
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");
}