본문 바로가기
C언어

C언어 기초 8. 조건문

by algosketch 2019. 9. 12.
  • if
  • if ... else
  • if ... else if ... else
  • switch

 지금까지는 프로그램의 흐름이 정해져 있었다. 하지만 조건문을 알고 나면 흐름을 통제하여 프로그램을 실행할 때마다 다른 결과를 가져올 수 있다. 조건문에는 if문과 switch문이 있으며, if문에는 if, if ... else, if ... else if ... else 세 종류가 있다.

1) if

 if문은 if(조건) {...} 의 구조를 갖는다. 조건에 해당하는 부분이 참이 되면 {...} 부분을 실행하고 거짓이면 무시하고 넘어간다. 코드로 확인해 보자.

int score;
scanf("%d", &score);
if (score >= 60)
{
    printf("축하합니다! 합격입니다.\n");
}
intput
80
output
축하합니다! 합격입니다.

 

2) if ... else

 참고로 입력이 60 미만이면 출력값이 존재하지 않는다.

 if ... else는 if조건문이 참이라면 앞의 if 뒤의 {...}를 실행하고 거짓이라면 else 뒤의 {...}를 실행하게 된다. C언어에서 {}괄호의 위치는 크게 중요하지 않다. 따라서 다음과 같이 코드를 작성해도 실행이 전혀 지장이 없으며 실제로 많이 사용하는 코드 스타일이다. (코드 스타일은 개인마다 다르며, 언어에 따라서도 달라진다.)

int score;
scanf("%d", &score);
if (score >= 60) {
    printf("축하합니다! 합격입니다.\n");
}
else {
    printf("불합격입니다.\n");
}
intput
50
output
불합격입니다.

 

3) if ... else if ... else

 if ... else if ... else 는 if가 거짓이라면 다음으로 오는 else if조건을 확인하고 그것도 거짓이라면 else를 실행한다. else if는 여러 개는 넣어도 된다. if 이후 괄호 안의 내용이 한 줄이라면 괄호를 생략해도 된다. 단, 여러 줄이라면 반드시 괄호가 필요하다.

int score;
scanf("%d", &score);
if (score >= 70)
    printf("축하합니다! 1급 합격입니다.\n");
else if (score >= 60)
    printf("2급 합격입니다.\n");
else
    printf("불합격입니다.");
intput
65
output
2급 합격입니다.

 

4) switch

 이제 조건문으로 할 수 있는 것이 무엇인지 한두 개쯤 생각해볼 보고 해결 방법도 떠올려 보라. 그 중 어떤 것은 else if로 해결이 가능하지만 else if의 개수가 많이 코드가 지저분해질 것 같다는 생각이 들 것이다. 만약 학생들의 점수를 받아 A부터 F등급까지 나누려고 해 보자. 등급이 A, B, C, D, F 이므로 if와 else를 제외하고라도 else if 가 무려 3개나 들어간다. 이럴 경우에 좀더 적합한 조건문인 switch가 있다.

 switch문과 정수 자료형의 특징을 이용하여 위에서 언급한 상황을 처리해 보겠다.

 switch문은 switch() 의 괄호 안에 있는 숫자아 동일한 숫자를 갖고 있는 분기(case)를 찾아가서 그 지점부터 코드를 읽어내려간다. 그리고 해당 분기가 끝나는 지점에는 break;를 삽입하여 분기를 끝내줘야 한다. break;가 없으면 그 밑으로도 계속해서 코드를 읽게 된다. 만약 (숫자)에 해당하는 분기가 없으면 default로 넘어가게 된다.

int score;

scanf("%d", &score);

score /= 10;

switch (score) {
case 10:
case 9:
    printf("A\n");
    break;
case 8:
    printf("B\n");
    break;
case 7:
    printf("C\n");
    break;
case 6:
    printf("D\n");
    break;
default:
    printf("F\n");
}

 score /= 10를 보자. 예를 들어 95점을 받았다면 9.5라는 값이 score에 들어가야 한다. 하지만 score는 정수 자료형으로 선언된 변수로 소수점이 소실된 9라는 값이 저장된다. score는 9이기 때문에 case 9:를 찾아가서 break;를 만날 때까지 코드를 실행한다. 만약 100점이라면 score에는 최종적으로 10이 저장되고 case 10부터 실행하지만 break가 없기 때문에 case 9부분까지 실행된다. 점수가 59점 이하라면 default 이하를 실행한다.

'C언어' 카테고리의 다른 글

C언어 기초 10. 함수 (part 1. 끝)  (2) 2019.12.14
C언어 기초 9. 반복문  (0) 2019.12.07
C언어 기초 7. C언어 연산  (0) 2019.09.07
C언어 기초 6. 주석  (0) 2019.09.07
C언어 기초 5. scanf() 함수  (0) 2019.08.15