유튜브 나도코딩 c언어 기초 강의 내용입니다.
함수는 기본적으로
반환형 함수이름(전달값) {실행할 코드}로 이루어지고, 선언과 정의는 main함수 밖에서 해야한다.
반환값과 전달값은 있을 수도 있고 없을 수도 있다.
#include <stdio.h>
void p(int num);
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);
int main(void) // main이란 함수인데 파라미터(전달값)이 없고 반환형이 정수형이다.
// void는 반환값이나 전달값이 없을 때 사용된다.
{
int num = 1;
p(num);
//반환값이 없는 함수
function_without_return();
//반환값이 있는 함수
int ret = function_with_return();
p(ret);
// 파라미터(전달값)가 없는 함수
function_without_params();
// 파라미터(전달값)가 있는 함수
function_with_params(1, 2, 3);
// 파라미터(전달값)도 받고, 반환값이 있는 함수
int ret2 = apple(5, 2); // 5개의 사과 중 2개 먹었음
printf("사과 5개 중 2개를 먹으면 %d개가 남아요.\n\n", ret2);
printf("사과 %d개 중 %d개를 먹으면 %d개가 남아요.\n\n", 10, 4, apple(10, 4)); //이런식으로 안에서 바로 함수호출 가능
return 0;
}
// 정의
void p(int num) // void 함수이름 (전달값), void : 반환하지 않겠다.
{
printf("num 은 %d 입니다. \n\n",num);
}
void function_without_return()
{
printf("반환값이 없는 함수입니다.\n\n");
}
int function_with_return()
{
printf("반환값이 있는 함수입니다.\n\n");
return 10;
}
void function_without_params()
{
printf("전달값이 없는 함수입니다.\n\n");
}
void function_with_params(int num1, int num2, int num3)
{
printf("전달값이 있는 함수이고, 전달받은 값은 %d, %d, %d 입니다.\n\n", num1, num2, num3);
}
int apple(int total, int ate)
{
printf("전달값과 반환값이 있는 함수입니다.\n\n");
return total - ate;
}
함수를 정의해두면 간단하게 함수명만 쓰는 것으로 함수를 호출해서 코드를 실행 시킬 수 있으므로 편하다.
#include <stdio.h>
#include <time.h>
#include <stdlib.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);
showQuestion(i, num1, num2);
int answer = -1;
scanf_s("%d", &answer);
if (answer == -1)
{
printf("프로그램을 종료합니다.");
exit(0); // 프로그램 바로 종료
}
else if (answer == num1 * num2)
{
success();
count++; // 맞힌 횟수 한번 증가. for문 밖에 count 선언과 초기화 해둠/
}
else
{
fail();
}
}
printf("\n\n 5개의 비밀번호 중 %d 개를 맞혔습니다.", 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 번 째 비밀번호 ########\n", 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");
}
간단한 비밀번호 맞추기 프로젝트이다.
getRandomNumber 함수를 정의하고 반환값은 랜덤으로 받을건데, 파라미터를 i 로 했기 때문에 for 문을 반복하면서
i가 커질 수록 랜덤으로 나오는 수의 범위도 커져서 비밀번호는 어려워진다.
-1을 입력받으면 프로그램을 바로 종료, 답이 맞으면 count 횟수 증가와 sucess 함수를 통해 "Good ! 정답입니다." 출력,
답이 맞지 않으면 fail 함수를 통해 "땡 ! 틀렸습니다."를 출력한다.
getRandomNumber는 전달값과 반환값이 있는 함수로, 파라미터를 입력받고 그 파라미터에 따라 반환값이 달라진다.
showQuestion는 전달값은 있고 반환값이 없는 함수로, 파라미터를 입력받고 그 파라미터에 따라 출력값이 바뀐다.
sucess와 fail은 전달값과 반환값이 없는 함수로, 함수 호출 시 printf만 실행한다.
'c언어 기초' 카테고리의 다른 글
c언어 포인터 pointer - 나도코딩 (0) | 2022.05.30 |
---|---|
c언어 배열 array - 나도코딩 (0) | 2022.05.30 |
c언어 loop, 반복문, 이중반복문, for,while, do while - 나도코딩 (0) | 2022.05.29 |
c언어 조건문 if else break continue switch~case rand 랜덤- 나도코딩 (0) | 2022.05.29 |
c언어 변수,자료형, printf, scanf - 나도코딩 (0) | 2022.05.29 |