- 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 |