언어/C,C++

C language Chapter 5. C언어의 조건문(+switch문)

깜냥c 2020. 4. 17. 12:30

안녕하세요

 

저번에는 C언어의 입출력에 대해서 배웠습니다.

 

이번에는 C언어의 조건문에 대해서 알아보겠습니다!

 


조건문이란 이름 그대로 조건이 있는 구문입니다.

 

조건을 만족하면 어떤 일을 수행하고, 아니면 다른 것을 제시해주거나 그냥 넘어가는 것이죠.

 

이해하기 쉽게 순서도를 봅시다.

 

출처 : 위키피디아

 

그림과 같이 조건을 제시하고 그 조건을 충족하면(Yes) 그것에 맞는 일을 진행하고, 조건을 충족하지 못하면(No) 또 그것에 따른 일을 합니다.

 

C언어에서의 조건문도 동일하게 처리됩니다.

 

C언어에서 조건문은 if, else, else if를 이용해 만들고 특수하게 switch문과 조건 연산자라고 하는 삼항연산자('?')이란 것이 있습니다.

 

삼항연산자는 후에 연산자에 관해서 다룰 때 설명하고 나머지를 알아보도록 하죠.

 

 

 

1. if, else(if-else), else if

 

1)if

 

if'만약~ 라면' 라는 뜻으로 해석되며 조건을 제시하여 사용합니다.

 

if문의 구조는 다음과 같습니다.

 

if(조건)
{
	//코드
}

 

주어진 조건이 참(TRUE,1)이라면 구문안의 코드를 실행하고 거짓(FALSE,0)이라면 다음 코드로 넘어갑니다.

 

 

 

2)else(if-else)

 

else'그렇지 않으면~' 라는 뜻으로 해석되며 항상 if가 앞에 먼저 나와야 하는 if-else의 형태로 쓰입니다.

 

if-else문의 구조는 다음과 같습니다.

 

if(조건)
{
	//코드1
}
else
{
	//코드2
}

 

만약 if의 조건이 거짓이라면, else안의 코드를 실행합니다.

 

 

 

3)else if

 

else if'그렇지 않고 ~라면' 라는 뜻으로 해석되며 이것또한 항상 if가 앞에 먼저 나와야 합니다.

 

else구문에서 if를 추가한 것으로 다중조건문으로 자주 쓰입니다.

 

else if문의 구조는 다음과 같습니다.

 

if(조건)
{
	//코드1
}
else if(조건)
{
	//코드2
}

 

그리고 if, else, else if를 다 합친 다중조건문은 다음과 같이 나타낼 수 있습니다.

 

if(조건)
{
	//코드1
}
else if(조건)
{
	//코드2
}
else
{
	//코드3
}

 

2. switch

 

switch문은 case라는 변수 값을 조건으로 하여 구문을 나눕니다.

 

따라서 if, else, else if를 다 나타낼 수 있으며 위의 다중조건문을 switch 하나로 표현할 수가 있죠.

 

swtich문의 구조는 다음과 같습니다.

 

switch(변수)
{
    case 값1 :
    	//코드1
    	break;
        
    case 값2 :
    	//코드2
        break;
        
    default :
    	//코드3
    	break;
}

 

여기서 default는 생략이 가능합니다.

 

switch문의 특이한 점은 코드에서 각 casedefault에 항상 break; 라는 것이 있다는 겁니다.

 

break;라는 것은 해당 구문에서 빠져나오게 하는 것으로 위의 코드에선 switch문을 빠져나가게 됩니다.

 

만약 이 break;가 없다면 어떤 일이 발생 할까요?

 

실제 코드를 가지고 확인을 해보겠습니다.

 

#include <stdio.h>

int main(void)
{
	int a;
	
	printf("변수 :");
	scanf("%d", &a);

	switch (a)
	{
		case 0:
			printf("X\n");
		case 1:
			printf("O\n");
		default:
			printf("%d\n", a);
	}

	return 0;
}

 

다음 코드는 a라는 변수를 입력받은 후, 0이면 문자 X를 1이면 문자 O을 둘다 아니면 a값을 출력합니다.

 

이후 실행결과를 봅시다.

 

 

원래라면 0을 입력했을 시, case 0 부분만 실행 되고 종료되어야 합니다.

 

하지만 실행한 결과, case 0 부분뿐만 아니라 case 1, default 부분도 코드가 실행되었습니다.

 

이러한 이유는, switchcase의 시작 지점부터 그 아래에 있는 코드를 다 실행하기 때문입니다.

 

그래서 break; 코드를 입력해서 빠져나가게 해주는 것이죠.

 

break; 코드를 입력한 뒤 다시 실행해보면 정상적으로 처리됩니다.

 

#include <stdio.h>

int main(void)
{
	int a;
	
	printf("변수 :");
	scanf("%d", &a);

	switch (a)
	{
		case 0:
			printf("X\n");
			break;
		case 1:
			printf("O\n");
			break;
		default:
			printf("%d\n", a);
			break;
	}

	return 0;
}

 

 

 

3. 연습문제

 

조건문을 연습하기 위해 Baekjoon 문제를 하나 풀어보시면 좋을 것 같습니다.

 

문제는 1330번: 두 수 비교하기 입니다.

 

문제
두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

입력
첫째 줄에 A와 B가 주어진다. A와 B는 공백 한 칸으로 구분되어져 있다.

출력
첫째 줄에 다음 세 가지 중 하나를 출력한다.

A가 B보다 큰 경우에는 '>'를 출력한다.
A가 B보다 작은 경우에는 '<'를 출력한다.
A와 B가 같은 경우에는 '=='를 출력한다.

 

간단하게 풀리는 문제입니다.

 

i) A>B인 경우

 

ii) A<B인 경우

 

iii) A==B인 경우 ( i),ii)가 아닌 경우)

 

위와 같이 각각의 경우에 조건문을 적절하게 사용하여 풀면 되겠습니다.

 

더보기
#include 

int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    if(a>b)
        printf(">");
    else if(a<b)
        printf("<");
    else
        printf("==");
    
    return 0;
}

 


 

이상으로 글을 마치겠습니다.

 

잘못된 부분이 있으면 알려주시면 감사하겠습니다!