✏️함수
🔎 선언/정의
함수는 먼저 선언해주고, main을 통해 함수 구현, main문 아래 함수 정의를 해주는게 일반적이다.
#include <stdio.h>
// 선언
void p(int num);
int main(void)
{
//function
//계산기
int num = 2;
//printf("num은 %d 입니다.\n", num);
p(num);
// 2 + 3 은?
num = num + 3;
//printf("num은 %d 입니다.\n", num);
p(num);
num *= 3;
//printf("num은 %d 입니다.\n", num);
p(num);
num /= 6;
//printf("num은 %d 입니다.\n", num);
p(num);
return 0;
}
// 정의
// 반환형 함수이름 (전달값)
void p(int num)
{
printf("num 은 %d 입니다.\n", num);
}
🔎 반환값이 없는 함수
#include <stdio.h>
//반환값이 없는 함수
void function_without_return();
int main(void)
{
function_without_return();
return 0;
}
void function_without_return()
{
printf("반환값이 없는 함수 입니다. \n");
}
🔎 반환값이 있는 함수
#include <stdio.h>
//반환값이 있는 함수
int function_with_return();
int main(void)
{
int ret = function_with_return();
printf("반환값은 %d 입니다.\n", ret);
return 0;
}
int function_with_return()
{
printf("반환값이 있는 함수입니다.\n");
return 10;
}
🔎 파라미터
#include <stdio.h>
void function_without_params();
void function_with_params(int num1, int num2, int num3);
int apple(int total, int ate);
int main()
{
// 파라미터(전달값)이 없는 함수
function_without_params();
//전달값이 있는 함수
function_with_params(1, 2, 3);
//파라미터도 받고 반환값이 있는 함수
int ret = apple(5, 2); // 다섯개의 사과 중에서 2개 먹음
printf("남은 사과는 %d개 입니다\n\n", ret);
printf("사과 %d개 중에 %d개 먹으면 %d개 남아요.\n", 10, 4, apple(10,4));
return 0;
}
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;
}
✏️ 계산기
#include <stdio.h>
//계산기 함수
int add(int num1, int num2);
int sub(int num1, int num2);
int mul(int num1, int num2);
int div(int num1, int num2);
void p(int num);
int main()
{
int num = 2;
num = add(num, 3);
p(num);
num = sub(num, 1);
p(num);
num = mul(num, 24);
p(num);
num = div(num, 6);
p(num);
return 0;
}
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;
}
void p(int num)
{
printf("num 은 %d 입니다.\n", num);
}
✏️ 프로젝트
🔎 비밀번호 마스터
#include <stdio.h>
#include <time.h>
int getRandomNumber(int level);
void showQuestion(int level, int num1, int num2);
void sucess();
void fail();
int main()
{
// 문이 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 의 값은 얼마입니까?\n", 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)
{
//성공
sucess();
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("%d X %d 의 값은 얼마입니까?\n", num1, num2);
printf("#########################\n");
printf("비밀번호를 입력하세요(종료 : -1) >> ");
}
void sucess()
{
printf("\n >> GOOD! 정답입니다.\n");
}
void fail()
{
printf("\n >> OMG! 틀렸습니다.\n");
}
🍏 KEEP, 습관 중요한 것
너무 어렵게만 생각하지 말고 다양한 프로젝트 경험을 통해 이렇게도 구현할 수 있구나 접해보고 시도해보는게 중요한 것 같다.
🍎 PROBLEM, 이슈, 에러, 오류
함수 이름이 길어질 수록 오타로 인해 실행이 안되는 부분이 많았다. 함수 이름을 그냥 복붙해서 쓰는게 오류를 줄이는 방법 같다.
은근 오류가 나 발견하면 코드 제일 마지막에 세미콜론(;)을 붙이지않아 발생하는 오류가 많았다.
🍉 TRY 시도
레벨이 올라갈수록 더 어려운 수식 계산이 나오도록 설정하라는 문제를 봤을때, 사실 멘붕이었다. 이걸 어떤 식으로 구현해야 할까?
풀이방법을 보고 깜짝 놀랐다!
발상의 전환! 5번의 반복을 위해 카운트했던 i를 level로 설정해 레벨이 올라갈수록 더 큰 숫자가 나오도록 한 점이 색달랐다. 발상의 전환!
저번의 2개씩 늘어나는 별 찍는 것도 그렇고 이번에도 그렇고.
컴퓨터적 사고가 필요하다!
'c언어 개발일지' 카테고리의 다른 글
[나도 코딩 C언어] 포인터 (0) | 2022.08.16 |
---|---|
[나도 코딩 C언어] 배열 (0) | 2022.08.16 |
[나도 코딩 C언어] 조건 / 분기 (0) | 2022.08.12 |
[나도 코딩 C언어] 반복문 (0) | 2022.08.04 |
[나도 코딩 C언어] 변수, 상수, 입출력 (0) | 2022.08.01 |
댓글