이번 포스팅은 제어문입니다.

프로그래밍 언어에서 가장 많이 쓰이는 부분이기 때문에 딱 한번만 제대로 이해하고 넘어가시면 다른 언어에서도 아주 쉽게 제어문을 사용하실 수 있을겁니다!!

 

목차

     


    0. 제어문이란?

    제어문특정 문장을 수행하거나 수행하지 않도록 선택하거나, 특정 문장을 여러 번 반복 수행하게 만드는 것입니다.

     

    제어문의 종류에는 조건문, 반복문, 분기문이 있습니다.

     

    조건문 : if, switch

    반복문 : for, while, do while

    분기문 : break, continue, goto, return

     


    1. 조건문

    1.0. if / else if / else

    조건문의 대표주자는 바로 if입니다.

     

    if ( 조건식 ) { }

     

    형태로 사용하며, 조건식 내의 조건을 만족하면 { } 안의 문장이 수행됩니다.

    만약 수행문이 한 줄이라면 { }은 생략이 가능합니다.

     

     

    아래 if의 사용 예에서 scanf가 등장하는데, 이 scanf는 사용자로부터 입력을 받을 때 사용합니다.

    scanf("%d", &score);의 뜻은

    %d는 10진수 정수 형태의 값을 받는다는 이야기이고, &score는 score이라는 변수의 주소에 값을 넣는다는 이야기입니다. &(주소값)에 대한 내용은 변수에 넣을 때 붙이는 기호정도로 가볍게 넘어가시면 됩니다. 

     

     

    만약 if의 조건식이 참일 때 수행할 문장이 한 개가 아닌 여러 개면, 수행할 문장들을 반드시 { }으로 묶어야 합니다.

     

     

    만약 if의 조건문에 걸리지 않았을 때 수행할 부분도 작성하고 싶다면 else를 사용하면 됩니다.

     

     

    만약 여러 조건이 동시에 필요하다면 else if를 사용합니다.

    if, else if로 모든 조건문을 작성한 뒤에 전부 걸리지 않았을 때는 else문을 작성하면 됩니다.

    이렇게 여러 조건을 동시에 작성하는 것다중 if문이라고 합니다.

     

     

    다중 if와는 다르게 if 안에 if를 다시 작성하는 경우중첩된 if문이라고 합니다.

    어느 조건이 수행되면, 또 다른 조건문으로 넘어갈 때 사용합니다.

     

    중첩된 if와 다중 if의 차이

     

    1.1. switch / case

    switch는 정수식의 값을 평가하고, 값이 같은 case문을 찾아서 해당 case문 다음에 나열된 문장들을 수행합니다.

    break를 만날 때까지 문장들을 수행하고, break를 만나면 switch문을 빠져나갑니다.

    그리고 default를 설정하면 모든 케이스에 맞지 않는 경우 그 문장이 작동합니다.

     

     

    아래는 switch문으로 만든 사칙연산을 수행하는 계산기가 동작하는 순서를 나타낸 그림입니다.

     

     

    switch문과 if문은 사실상 거의 동일한 동작을 합니다.

    일반적으로 값을 비교하는 조건식을 사용하고, 비교할 값이 둘 이상이면 switch를 사용하는 것이 더 좋고,

    값의 범위를 비교하는 경우에는 if를 사용하는 것이 더 좋습니다.

    비교할 값이 둘 이상이면 switch, 범위를 비교하면 if else!

     

    단, switch문을 사용할 때 주의해야 하는 점

    break를 생략하면 break를 만날 때까지 모든 문장을 수행한다는 것입니다.

    또한 default는 생략될 수 있고, switch문의 맨 앞에 올 수도 있습니다.

    그리고 switch의 ( ) 안에는 정수식만 사용할 수 있으며, 실수와 문자열을 사용할 수 없습니다.

    각 주의점에 대한 그림


    2. 반복문

    2.0. for

    반복문의 가장 기초는 for문입니다.

     

    for (초기식; 조건식; 증감식) { 반복할 문장 }

     

    for문은 위와 같은 형태로 작성하고, 초기식, 조건식, 증감식이 필요하고, 뒤에 반복할 문장을 작성합니다.

    for문 뒤에 올 문장이 한 줄일 경우 { }를 생략할 수 있습니다.

     

    for문 사용 예

     

    for문을 구성하는 초기식, 조건식, 증감식, 반복문은 모두 생략할 수 있습니다.

    또한 무한루프를 만들고 안에서 조건을 걸어 break으로 탈출할 수도 있습니다.

    각종 생략법
    무한루프 후 탈출

     

    또한 for 역시 if와 같이 중첩해서 사용할 수 있습니다.

     

    중첩된 for를 이용한 구구단 출력

     

    2.1. while

    이번에는 while문입니다. for문으로 표현할 수 있는 반복문은 while로도 똑같이 표현이 가능합니다.

     

    while (조건식) { 반복할 문장 }

     

    위와 같은 형태로 while문을 작성할 수 있습니다.

     

     

    for문을 while문으로 바꾸고 싶을 때는 while문 앞에 초기식을 쓰고 while 블록 안쪽의 맨 끝에 증감식을 써 주면 됩니다.

     

     

    for문에서 생략을 통해 무한루프를 만들었던 것처럼, while문에서는 더욱 간단하게 while에 걸린 조건문에 1을 넣으면 항상 참이되어 무한루프가 돌도록 만들 수 있습니다. 이 경우에도 무한루프가 멈출 수 있는 조건을 걸어줘야겠죠?

     

     

    2.2. do while

    이번엔 do while입니다.

    do whilewhile문의 차이시작이 조건문인지, 반복할 문장인지에 달려있습니다.

     

    만약 do { 반복문 } while (조건식); 형태로 do while을 사용하면 먼저 반복문이 돌고 그 다음에 조건식을 확인하고 조건식이 맞으면 다시 반복문이 돌아갑니다.

    while (조건식) { 반복문 }의 경우 먼저 조건식부터 확인하고 만족해야 반복문으로 넘어가겠죠? 그 차이입니다.

     

    for, while, do while의 차이는 for과 while은 조건식을 먼저 검사해서 조건식이 참인 경우에만 문장을 수행하지만 do while은 먼저 문장을 수행한 후에 조건식을 검사합니다.

    더 간단히 말해서, do while은 반드시 한 번은 수행됩니다.

     

     


    3. 분기문

    분기문을 사용하면 실행 순서를 변결할 수 있습니다.

    분기문에는 break, continue, return, goto 등이 있습니다.

     

    break : 반복문을 탈출합니다.

    continue : 반복문의 시작 부분으로 이동합니다.

    return : 함수를 호출한 곳으로 돌아갑니다.

    goto : 레이블이 지정한 위치로 이동합니다.

     

    3.0. break

    switch문에서 사용하면 다음 문장으로 이동하고,

    for, while, do while문에서는 반복문을 빠져나갑니다.

     

     

     

    3.1. continue

    반복문 안에서 continue를 만나면 루프의 시작 부분으로 이동해서 조건문 검사부터 다시 진행됩니다.

     

     

    3.2. goto

    프로그램 수행 중 제어의 흐름을 프로그램의 특정 위치로 이동하려면 goto문을 사용합니다.

    이동할 문장을 가리키는 label이 필요하고, label을 정의할 때는 label을 구별하기 위한 이름과 콜론( : )이 필요합니다.

     

    만약 이 goto문으로 제어의 흐름을 아무데로나 이동하게 되면 프로그램 자체가 굉장히 어려워지기 때문에 goto문은 되도록이면 사용하지 않는 것이 좋습니다.

     

    goto 예시

     

    3.3 return

    프로그램 수행 중 return문을 만나면 함수를 호출한 곳으로 되돌아갑니다.

    main 함수 내에서 return문을 만나면 프로그램을 종료합니다.

     

    return 예시

     


    복습하면서 느끼는 것이지만 저도 참 모르는게 많습니다. goto는 정말 단 한 번도 안쓴 것 같은데..

    이제 함수를 구성하는 요소들을 거의 다 살펴보았으니, 함수에 대해서 마저 알아야겠죠?

     

    다음 포스팅에서는 함수로 찾아뵙겠습니다!! 감사합니다 :)

    반응형
    • 네이버 블로그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기