본문 바로가기

Code.D IT 강좌/C언어

[C언어 강좌] 제어문 - 조건문(if문, switch문)

관련 글

[C언어 강좌] 제어문 - 반복문(while문, for문, do~while문)



C언어 강좌

제어문



제어문은 다음과 같이 분류합니다.



<출처: http://codedragon.tistory.com/495>



오늘은 제어문 중 조건문에 해당하는 if문, switch문을 알아보겠습니다.



조건문(분기문, 비교문)

프로그래머가 코드상에서 특정 조건을 부여했을 때 그 조건에 만족하면 해당 문장을 출력해주는 문법입니다.

조건문은 크게 if문switch문이 있습니다.



if문, if~else문

한 번에 하나의 조건을 판단합니다.



if문 형식

if(조건식){

수행 구문(조건식이 참인 경우 수행);

}else{

수행 구문(조건식이 거짓인 경우 수행);

}



수행할 구문이 각각 한 문장이면 중괄호({}) 생략이 가능합니다.

if(조건식)

수행 구문1;

else

수행 구문2;



수행할 구문이 2 문장 이상이면 중괄호 생략이 불가능합니다.

if(조건식){

수행 구문1;

수행 구문2;

}else{

수행 구문3;

수행 구문4;

}



if문을 사용해 보겠습니다.



#include <stdio.h>

int main(void){

     //변수 선언
     int num;

     //데이터 입력 받은 후 변수에 저장
     printf("숫자를 입력해주세요 >> ");
     fflush(stdout);
     scanf("%d", &num);

     //조건문 사용
     if(num > 0){
         printf("양수입니다. \n");
     }
     if(num < 0){
         printf("음수입니다. \n");
     }

     return 0;
}



다음은 출력 결과입니다.









else문을 사용하지 않은 경우입니다.

숫자를 입력받아 if 조건문을 이용하여 0보다 큰 경우"양수입니다."를,

0보다 작은 경우 "음수입니다."를 출력합니다.

만약 음수의 조건문을 따로 지정하지 않고 else문을 사용했다면, 0을 포함했겠죠.

위의 예는 0을 포함한 조건이 아니므로 0을 입력하더라도 출력되지 않습니다.

다음으로 else문도 사용해보겠습니다.



#include <stdio.h>

int main(void){

     int age;

     printf("나이를 입력해주세요 >>>> ");
     fflush(stdout);
     scanf("%d", &age);

     //조건문 사용
     if(19 <= age && age <= 150){
     printf("회원 가입이 가능합니다 \n");
     }
     else{
         printf ("회원 가입이 불가능합니다. \n");
     }

     return 0;

}



다음은 출력 결과입니다.









나이(데이터)를 입력받아 if조건문을 이용하여 나이가 19세 이상 150세 이하일 경우,

"회원 가입이 가능합니다."를, 그 이외의 조건에는 "회원 가입이 불가능합니다."를 출력합니다.



switch문, switch~case문

이 조건문은 다양한 경우의 수가 있는 경우에 사용합니다.

if ~ else문이 길어질 때 코드를 간결하게 표현할 수 있다는 장점이 있습니다.



switch문 형식

switch(비교할 값){


case 값1:

실행할 문장;

break;

case 값2:

실행할 문장;

break;

case 값3:

실행할 문장;

break;

default:

실행할 문장;

break;

}



default는 switch문에서 정의한 case에 해당하는 조건이 없는 경우에 실행합니다.

case에 해당하는 조건 값이 없는 경우 default문을 정의하지 않으면 어떠한 문장도 실행되지 않고 switch문을 종료합니다.


break는 switch문을 종료하는 역할을 합니다.

break는 조건문, 반복문에서도 종료하는 역할을 합니다.



switch~case문 사용 시 주의사항

case 값1:에서 ;(세미콜론)이 아니라 :(콜론)임을 기억하시기 바랍니다.

실수를 사용하면 Error가 발생합니다. Ex) case 3.95 (X)

관계 연산을 사용하면 Error가 발생합니다. Ex) case num<12 (X)



#include 

int main(void){

     char ch;

     printf("(M)onday, (T)uesday, (W)ednesday, \nT(H)ursday, (F)riday, (S)aturday, S(U)nday \n");
     printf("대문자 한글자를 입력해주세요 \n(M, T, W, H, F, S, U) >>> ");
     fflush(stdout);
     scanf("%c", &ch);

     //switch ~ case문 사용
     switch(ch){
     case 'M':
     case 'm': //case 'M' && 'm' 문법에 맞지 않다 참 거짓을 판별하기 때문
         printf("Monday (월요일)");
         break;
     case 'T':
     case 't':
         printf("Tuesday (화요일)");
         break;
     case 'W':
     case 'w':
         printf("Wednesday (수요일)");
         break;
     case 'H':
     case 'h':
         printf("Thursday (목요일)");
         break;
     case 'F':
     case 'f':
         printf("Friday (금요일)");
         break;
     case 'S':
     case 's':
         printf("Saturday (토요일)");
         break;
     case 'U':
     case 'u':
         printf("Sunday (일요일)");
         break;
     default:
         printf("잘못 입력하셨습니다. 정확히 입력해주시기 바랍니다.");
         break;
     }

     return 0;

}



다음은 출력 결과입니다.






오늘은 화요일이니 T를 입력하겠습니다.






Tuesday (화요일)이 출력됩니다.



대문자 한 글자를 입력받아서 해당하는 요일을 출력하는 프로그램입니다.

대문자와 소문자는 아스키코드가 달라서 결과 값이 엄연히 다릅니다.

따라서 대문자와 소문자를 같은 결과 값이 나오도록 case를 각각 두 개씩 설정했습니다.

M(or m)을 입력할 경우 Monday(월요일),

T(or t)를 입력할 경우 Tuesday(화요일),

W(or w)를 입력할 경우 Wednesday(수요일),

H(or h)를 입력할 경우 Thursday(목요일),

F(or f)를 입력할 경우 Friday(금요일),

S(or s)를 입력할 경우 Saturday(토요일),

U(or u)를 입력할 경우 Sunday(일요일)을 출력합니다.

위의 조건에 해당하는 입력 값이 아닌 경우, "잘못 입력하셨습니다. 정확히 입력해주시기 바랍니다."를 출력합니다.