" />
본문 바로가기

프로그래밍/C언어

[잼민이도 이해하는 C언어 강의] 7. 조건문 / #if, #else if, #else

[잼민이도 이해하는 C언어 강의] 7. 조건문 / #if, #else if, #else

 

안녕하세요

정고리즘의 정고쌤입니다.

 

지난 강의 보러가기

 

지난 c언어 연산자 강의를 통해

데이터들을 가공하고 연산하는 방법에 대해

학습하였습니다.

 

데이터를 가공하고 연산하는 것은

연산자와 함께 다양한 문법들을

함께 활용하면

더욱 다이나믹한 결과물을 만들어낼 수 있습니다.

 

오늘은 그 첫번째 조건문이라는 것에 대해서

알아보도록 하겠습니다.

 

 


1. if
2. else
3. else if
4. 중첩된 if문

 

오늘은 조건문이라는

C언어 문법을 알아보겠습니다.

 

조건문 역시

C계열 언어(C++, C#, C) 뿐만 아니라

Python, JAVA 등 거의 모든 프로그래밍 언어에서

공통적으로 사용되는 기본 문법이므로

꼭 알아두도록 합시다.

 


1. if

 

지난 연산자 강의에서 학습하였던

관계 연산자논리 연산자를 기억해봅시다.

 

관계 연산자와 논리 연산자의 연산 결과는

참(1)인지 거짓(0)인지를 확인할 수 있었습니다.

 

이때 조건문

참(1)일 때 실행할 내용

거짓(0)일 때 실행할 내용을

지정할 수 있습니다.

 

아래 코드를 작성해봅시다.

#include<stdio.h>
int main(void)
{
	int a,b; 
	printf("정수 두 개를 입력하시오. ");
	scanf("%d %d",&a,&b);
	
	if(a>b)
	{
		printf("%d가 %d보다 더 큽니다.",a,b);
	} 
	
	return 0;
}

 

if문은 이렇게

if와 조건식을 함께 작성합니다.

 

이때 조건식이란 참 또는 거짓의 결과가 있어야 합니다.

 

따라서 위 코드 실행 결과처럼

a에 10, b에는 5를 입력했을 경우,

a>b의 연산이 1이므로

if문 아래 { } (중괄호) 내부의 내용이 실행됩니다.

 

 

만일 이처럼

a에 5, b에는 10을 입력했을 경우

a>b를 만족하지 않기 때문에 연산 결과는 0이고,

if문 아래의 { } 내용이 실행되지 않아

아무것도 출력되지 않습니다.

 

if문은 이렇게

조건식에 따라 { } 내용을 실행 할지 실행하지 않을지

결정할 수 있습니다.

 

{ } 내부에는

예제에서는 한 줄의 문장만을 적었지만

두 줄 이상의 문장을 작성해도 문제가 없습니다.

#include<stdio.h>
int main(void)
{
	char s;
	printf("성별을 입력하시오.(남:M, 여:W) ");
	scanf("%c",&s);
	
	int age;
	printf("나이를 입력하시오. ");
	scanf("%d",&age);
	
	if(s == 'M' && 20 <= age)
	{
		printf("당신은 병역판정검사 대상자입니다!");
	}
	
	return 0;
}

 

관계 연사자 뿐만 아니라

논리 연산자도 함께 활용할 수 있습니다.

 

위 코드에서는 s가 'M'이고, age가 20 이상일 때

실행되는 if문을 작성한 코드입니다.

 

 


 2. else

if문 식은

참일 때에만 관여할 수 있고,

거짓일 때에는 그저 실행을 안하기만 합니다.

 

거짓일 때에도 별도의 실행 내용을 작성하고자 할때는

else문을 사용합니다.

 

아래 코드를 작성해 봅시다.

#include<stdio.h>
int main(void)
{
	int a,b; 
	printf("정수 두 개를 입력하시오. ");
	scanf("%d %d",&a,&b);
	
	if(a>b)
	{
		printf("%d가 %d보다 더 큽니다.",a,b);
	} 
	else
	{
		printf("%d가 %d보다 작습니다.",a,b);
	}
	
	return 0;
}

 

 

if문 예제 코드와 동일하지만

else가 추가된 것을 확인할 수 있습니다.

 

else는 이처럼 if문과 함께 작성할 수 있고,

단독으로는 사용될 수 없습니다.

else는 바로 위의 if문이 거짓일 때가 실행 조건이기 때문입니다.

그렇기 때문에 else에는 조건식이 따로 올 필요가 없습니다.

 

 

else 문의 주의할 점은

	if(a>b)
	{
		printf("%d가 %d보다 더 큽니다.",a,b);
	} 
	printf("!");
	else
	{
		printf("%d가 %d보다 작습니다.",a,b);
	}

위 처럼 if문과 else문 사이에

어떠한 다른 문장이 끼여서는 안됩니다.

 

else문은 반드시 if문과 연속으로 사용되어야 합니다.

 


3. else if

else if의 경우에는

if문과 else문 사이에 작성될 수 있습니다.

 

if문 조건이 거짓인 경우 중에서

한번 더 조건을 걸고 싶은 경우에 사용할 수 있습니다.

 

아래 코드를 작성해 봅시다.

#include<stdio.h>
int main(void)
{
	int chest;
	printf("가슴 둘레를 입력하시오.");
	scanf("%d",&chest); 
	
	char size;
	if(100 <= chest)
	{
		size = 'L';
	}
	else if(90 <= chest)
	{
		size = 'M';
	}
	else
	{
		size = 'S';
	}
	
	printf("당신의 사이즈는 %c입니다.",size);
	
	return 0;
}

 

if문에서는 가슴 둘레가 100 이상인 경우에는

사이즈에 L을 저장하도록 하고 있습니다.

 

else if는 100 이상은 아니지만

90 이상인 경우,

즉, 90 ~ 100 사이인 경우에는

사이즈에 M을 저장하도록 하고 있습니다.

 

마지막으로 else는 위 조건들을 모두 만족하지 못하는 경우

즉, 90미만인 경우에는

사이즈에 S를 저장하도록 하고 있습니다.

 

따라서 코드 실행 결과 처럼

92를 입력한 경우에는

else if가 실행되어 사이즈는 M이 됩니다.

 

 

#include<stdio.h>
int main(void)
{
	int score;
	printf("점수를 입력하시오. ");
	scanf("%d",&score); 
	
	char grade;
	if(90 <= score && score <= 100)
	{
		grade = 'A';
	}
	else if(80 <= score)
	{
		grade = 'B';
	}
	else if(70 <= score)
	{
		grade = 'C';
	}
	else if(60 <= score)
	{
		grade = 'D';
	}
	else
	{
		grade = 'F';
	}
	
	printf("당신의 학점은 %c입니다.",grade);
	
	return 0;
}

 

else if는 여러 개를 동시에 사용하여도 문제가 없습니다.

 

이를 잘 활용한다면

위 코드처럼 다양한 실행 분기를 만들어 낼 수도 있습니다. 

 


4. 중첩된 if문

 

중첩된 if문이란

if문의 { } 안에

또 다른 if문이 오는 경우를 말합니다.

 

아래 코드를 작성해 봅시다.

 

#include<stdio.h>
int main(void)
{
	char s;
	printf("성별을 입력하시오.(남:M, 여:W) ");
	scanf("%c",&s);
	
	int age;
	printf("나이를 입력하시오. ");
	scanf("%d",&age);
	
	if(s == 'M')
	{
		if(20 <= age)
		{
			printf("당신은 병역판정검사 대상자입니다!");
		} 
	}
	
	return 0;
}

 

먼저 성별이 남성인지 확인하는 조건문을 만족하여

if문 { }이 실행된다면

{ } 내부의 두 번째 if문에 의해 나이가 20세 이상인지를 판단합니다.

이 또한 참이라면 다시 { } 내부의 문장을 실행할 수 있습니다.

 

이렇게 if문 안에 또 다른 if문이 중첩된 경우를

중첩된 if문이라고 합니다.

 

뿐만아니라

	if(    )
	{
		if(    )
		{
			if(    )
			{
				if(    )
				{
					if(    )
					{
						.
						.
						.
					}
				}
			}
		}
	}

if문 안에 if문 안에 if문 안에 if문 안에 if문 안에...

필요에 따라 더 많이 중첩되는 것도 문법적으로 가능합니다.

 

 

"아니, 중첩 if문 왜 씀? 논리 연산자 && 쓰면 되는데"

 

라는 의문을 가질 수 있습니다.

아래의 코드를 작성해봅시다.

#include<stdio.h>
int main(void)
{
	char s;
	printf("성별을 입력하시오.(남:M, 여:W) ");
	scanf("%c",&s);
	
	int age;
	printf("나이를 입력하시오. ");
	scanf("%d",&age);
	
	if(s == 'M')
	{
		if(20 <= age)
		{
			printf("당신은 병역판정검사 대상자입니다!");
		}
		else
		{
			printf("Dreams come true");
		} 
	}
	else
	{
		if(20 <= age)
		{
			printf("군대는 우리가 간다. 누나들은 공부하고 계세요");
		}
		else
		{
			printf("군대는 오빠가 간다.");
		} 
	}

	return 0;
}

...죄송합니다...

 

 

중첩된 if문을 사용하면

이처럼 더 많은 분기를 만들어낼 수 있습니다.

 

남자이면서 20세 이상인 경우,

남자이면서 20세 미만인 경우,

 

여자이면서 20세 이상인 경우,

여자이면서 20세 미만인 경우

 

if문을 적절하게 중첩하여 활용한다면

코드의 질이 더 높아질 수 있습니다.

 

 


만약에 아보카도 있으면...

 

	if(아보카도 있다)
	{
		우유를 6개 산다; 
	} 
	else
	{
		우유를 1개 산다; 
	}

 

if문의 조건문은 잘 설계해야 합니다.

조건문과 실행문 모두 적절하게 설계되지 않는다면

큰 오류를 범할 수 있기 때문에

충분한 설계를 거치고 작성하는 것이 좋습니다.

 

다음 강의에서는

반복문에 대해서 알아보도록 하겠습니다.