[C언어 강좌] #9 조건문 (If, ElseIf, Switch)


안녕하세요. 파일입니다 오늘 알아볼 것은 조건문입니다.

조건문은 따로 알아보진 않았지만 앞에서 자연스럽게 사용을 했습니다(If문)

 

오늘은 If문 이외에도 다른 조건문들을 알아보고 사용법을 알아보겠습니다.

 

If문

#include <stdio.h>

int main(){
	if(조건){
		실행식 
	}
	return 0;
}

If라는 영어단어의 뜻은 '만약'입니다. 프로그래밍에서 if 역시 조건을 따지는 데 사용합니다.

위는 if문의 사용예제입니다.

if(조건)이고 조건 안의 값이 이면 중괄호 안의 코드가 실행됩니다.

 

#include <stdio.h>

int main(){
	int n;
    	printf("숫자를 입력해주세요 : ");
	scanf("%d", &n);
	
	if(n % 2 == 0) printf("짝수입니다");
	
	return 0;
}
>>> 10
10
짝수입니다
--------------------------------
Process exited after 1.236 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .

짝수를 판별하는 코드입니다.

 

2로 나누어 나머지가 없이 떨어지는 수.
우수(偶數). ↔
홀수.

짝수의 정의는 다음과 같으므로 조건문으로 입력받은 값을 2로 나눴을 때 나머지가 0인지 판별하고

0이라면 짝수라고 알려주면 됩니다. 대입 연산자(=)와 같음(==) 헷갈리지 마세요!

 

그리고 for문이던 if문이던 실행하는 실행 식이 하나일 때 이렇게 중괄호를 생략하여 표현할 수 있습니다.

그런데 저 코드에 9를 입력하면 뭐라고 나올까요??

 

if문은 조건이 참일 때 실행된다고 했습니다. 그런데 9를 2로 나누면 나머지가 0이 아니므로(홀수) 중괄호 내부의 

코드가 실행되지 않음으로 아무것도 나오지 않습니다.

그러면 if문의 값이 참이 아닐 때 실행되는 조건식을 만드는 방법이 있습니다. else를 사용하면 됩니다.

 

#include <stdio.h>

int main(){
	int n;
    	printf("숫자를 입력해주세요 : ");
	scanf("%d", &n);
	
	if(n % 2 == 0) printf("짝수입니다");
	else printf("홀수입니다");
	return 0;
}

요렇게 if문 바로 아래에 else 문을 추가해주면 if문의 조건이 충족되지 않을 때 else 문이 실행되게 됩니다.

짝수가 아니면 홀수니 이렇게 나눌 수 있는 것이죠.

 

A+ 90점 이상
A 85점 이상
B+ 80점 이상
B 75점 이상
그 외 : F

그러면 조건문을 이용하여 점수를 입력하면 다음과 같은 기준으로 등급을 구분해봅시다.

 

#include <stdio.h>

int main(){
	int n;
	scanf("%d", &n);
	
	if (n >= 90) printf("A+");
	else
	if (n >= 85) printf("A");
	else
	if (n >= 80) printf("B+");
	else
	if (n >= 80) printf("B");
	else printf("F");
	
	return 0;
}

조건에 맞게 코딩을 했습니다. 실행 식이 하나이니 if (n >= 90) printf("A+"); 로 생략했고

else를 사용할 때도 실행 식이  if (n >= 85) printf("A"); 하나라 중괄호를 생략했습니다.

값도 잘 나오고 하는데.. if문과 else 문이 너무 중첩돼서 지저분해 보입니다.

 

어떻게 할까요?

이럴 땐 저 else와 if를 합쳐주면 됩니다.

 

#include <stdio.h>

int main(){
	int n;
	scanf("%d", &n);
	
	if (n >= 90) printf("A+");
	else if (n >= 85) printf("A");
	else if (n >= 80) printf("B+");
	else if (n >= 75) printf("B");
	else printf("F");
	
	return 0;
}

이렇게요. else if는 if 문의 조건이 부합하지 않으며 새로운 조건으로 판별하고 싶을 때 사용합니다.

이렇게 다 추가해주다가 else if의 조건까지 모두 부합하지 않으면 else의 조건식이 실행됩니다.

 

 

Switch~case 문

#include <stdio.h>

int main(){
	int n;
	printf("숫자를 입력해주세요 : ");
	scanf("%d", &n);
	
	switch(n)
	{
		case 1:
			printf("1번방 전등 ON\n");
			break;
		case 2:
			printf("2번방 전등 ON\n");
			break;
		case 3:
			printf("3번방 전등 ON\n");
			break;
		default:
			printf("우리집 전등은 3개입니다");
	}
	
	
	
	return 0;
}

Switch문은 말 그대로 집안의 전등 스위치를 켜듯이 입력 정수에 따라 case를 나누는 조건문입니다.

위의 예제를 보시면 n이라는 정수를 입력받고 n이 1,2,3에 따라 조건문이 실행됩니다.

 

if문과의 차이점을 비교해보자면 오직 정수만 비교할 수 있고 비교방식도 >, < 부등호 비교가 안되며,

==(같음) 밖에 안됩니다. 그리고 특이하게 중괄호가 아니라 : 를 사용합니다

마치 파이썬 같네요.

 

위의 코드를 분석해보자면 1을 입력하면 "1번 방 전등 ON" 이 출력되고 break로 종료되게 됩니다.

2,3 도 동일하며 그 이외의 값이 입력되면 default의 내용이 실행되고 코드가 종료됩니다.

즉 case 이외의 조건이 들어온다면 default가 실행됩니다.

 

그런데 위 코드에서 break가 없다면 어떻게 될까요?

 

#include <stdio.h>

int main(){
	int n;
	printf("숫자를 입력해주세요 : ");
	scanf("%d", &n);
	
	switch(n)
	{
		case 1:
			printf("1번방 전등 ON\n");
		case 2:
			printf("2번방 전등 ON\n");
		case 3:
			printf("3번방 전등 ON\n");
		default:
			printf("우리집 전등은 3개입니다");
	}
	
	
	
	return 0;
}

입력 : 1

숫자를 입력해주세요 : 1
1번방 전등 ON
2번방 전등 ON
3번방 전등 ON
우리집 전등은 3개입니다
--------------------------------
Process exited after 1.068 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .

입력 : 2
숫자를 입력해주세요 : 2
2번방 전등 ON
3번방 전등 ON
우리집 전등은 3개입니다
--------------------------------
Process exited after 0.2782 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .

break를 지우고 실행해 봤습니다.

무엇이 보이시나요?

1을 입력하면 break로 종료가 안돼서 default까지 switch 내부의 모든 경우의 수(default 포함)가 실행되게 됩니다.

2를 입력하면 case 2 아래에 있는 모든 경우의 수가 출력되고요.

 

break의 역할은 자동차 브레이크처럼 딱 원하는 부분만 실행시키고 멈추게 하는 역할이라고 보시면 됩니다.

 

If문과 Switch 문의 사용?

그러면 어떨 때 if문을 사용하고 어떨 땐 Switch 문을 사용하게는 게 좋을까요?

 

일반적으로 if문은 조건이 적을 때 성능이 더 뛰어나고

조건이 많을 땐 switch문의 성능이 뛰어나다고 합니다.

switch 문은 조건이 많아져도 instruction 이 추가로 요구되지 않기 때문입니다.

 

물론 == 의 비교가 아니라면 switch 문을 쓸 수 없겠지만요.

switch문은 또한 if문에 비해 코드를 한눈에 볼 수 있다는 장점이 있습니다.

 

 

Break & Continue

#include <stdio.h>

int main(){
	int n;
	printf("숫자를 입력해주세요 : ");
	scanf("%d", &n);
	
	for (int i = 1; i<=n; i++){
		if (i % 2 == 1)
			continue;
		printf("%3d", i);
	}	
	return 0;
}

숫자를 입력해주세요 : 100
  2  4  6  8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44
  46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98100
--------------------------------
Process exited after 1.421 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .

다음 코드를 실행해보면 짝수만 출력됩니다.

if (i % 2 == 1)  continue;  이 코드 때문인데요.

Continue를 사용하면 조건식을 강제로 수행하게 됩니다. break와 용례가 반대죠.

 

 

또한 Switch에서 continue는 사용하실 수 없습니다.

 

 


오늘은 조건문(If, else, switch)에 대해서 알아봤습니다. 이해가 잘되시나요 ㅎㅎ?

요즘은 내용을 최대한 줄이고 액기스만 뽑아내고 있으니 읽으시는데 크게 부담은 없으셨을 거 같습니다.

 

조건문은 프로그래밍 전반적으로 안 쓰이는 곳이 없으니 확실히 알아두는 것이 좋을 거 같습니다.

다음 편에선 반복을 편하게 해주는 함수(function)에 대해 알아보겠습니다. 감사합니다  ^^

COMMENT WRITE

  1. 비밀댓글입니다

  2. break continue 부분이요 ㅠㅠ

  3. 비밀댓글입니다