기초단계/c언어

2022.11.09-2 함수

춘핑이 2022. 11. 9. 18:08

4. 함수

4.1 function 계산기

함수를 사용하기 위해서는 함수 선언과 정의를 해야한다.

//선언 무조건 main함수 밖에서 선언
void p(int num);

//정의 무조건 main함수 밖에서 정의
void p(int num)
{
printf("num은 %d 입니다\n", num);
}

int main(void)
{
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*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;
}

4.2 함수 종류

4.2.1 반환값이 없는 함수

//선언 및 정의
void function_without_return()
{
    printf("반환값이 없는 함수입니다\n"); // 함수 뭔지 알기위해 넣음.
}

//실행
function_without_return();

4.2.2 반환값이 있는 함수

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

//실행 위에서 쓰인 p함수 다시 가져옴.
int ret = function_with_return();
p(ret);

답: 반환값이 있는 함수입니다
    num은 10 입니다

4.2.3 파라미터(전달값)가 없는 함수

//선언 및 정의
void function_without_params()
{
printf("전달값이 없는 함수입니다\n");

//실행
function_without_params()

답 : 전달값이 없는 함수입니다

4.2.4 파라미터(전달값)가 있는 함수

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

//실행
function_with_params(35, 27, 12);

답 : 전달값이 있는 함수이며, 전달받은 값은 35 27 12 입니다

4.2.5 파라미터(전달값)도 받고, 반환값이 있는 함수

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

//실행
int ret = apple(5, 2); // 5개의 사과중에서 2개를 먹음.
//printf("사과 5개중에 2개를 먹으면? %d개가 남아요", ret);
printf("사과 %d 개중에 %d개를 먹으면? %d개가 남아요\n", 10, 4, apple(10, 4));

답 사과 10개중에 4개를먹으면 6개가 남아요.

4.3 최종 응용 계산기

처음으로 돌아가서 function 계산기

//선언 및 정의
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;
}

int num = 2;
num = add(num, 3);
p(num); //5

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

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

num = div(num, 6);
p(num); //2

4.4 프로젝트 5단계 비밀번호 맞추기

 //선언 및 정의 
int getRandownNumber(int level)
{
return rand() % (level * 7) + 1;
}

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

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

    int answer = -1;
    scanf_s("%d", &answer);
    if (answer == -1)
    {
        printf("프로그램을 종료합니다\n");
        exit(0); //exit는 그냥 프로그램 런해버림 for문끝내는게 아니라
    }
    else if (answer == num1 * num2)
    {
        //성공시
        sucess();
        count++;
    }
    else
    {
        fail();
    }


}
printf("\n\n 당신은 5개의 비밀번호 중 %d개를 맞혔습니다", count);


return 0;
}

2022.11.09 리뷰

조건과 함수를 시작하니 변수가 정말 많다. 변수선언을 잊지말고 하자.
변수 = 0 으로 왜 선언과 동시에 초기화를 하는가? 변수를 선언과 동시에 초기화를 해버려서 쓰레기값이 안들어가게하는 용도임.

귀인을 만났다. 국비로 시작해서 일본에 취업하신분께 조언을 얻었다.

중요한 것은 꺾이지 않는 마음
천천히 나아가자