조건문과 반복문
조건문(Conditional Statements)
코드 흐름을 분기하는 문장이다.
if 문
int a = 7;
if (a > 10) {
printf("a는 10보다 큼");
} else if (a > 5) {
printf("a는 5보다 큼");
} else {
printf("a는 5보다 작거나 같음");
}
if
: 조건이 참(true)이면 실행else if
: 다음 조건이 참(true)면 실행else
: 모든 조건이 거짓(false)면 실행
순차 평가
if
-else if
-else
구조는 위에서 아래로 조건을 평가한다.(Top-Down)- 참인 조건이 발견되면 해당 블록에서 실행하고 끝남(이후 조건은 검사하지 않음)
조건 순서
- 조건을 평가하는 순서에 따라 결과가 달라질 수 있다.
- 더 구체적이고 좁은 조건을 위쪽에 배치하는 것이 좋음
int score = 85;
if (score > 60) {
printf("합격");
} else if (score > 80) { // 검사되지 않음
printf("우수");
}
합격
switch 문
int n = 2;
switch (n) {
case 1:
printf("n은 1");
break;
case 2:
printf("n은 2");
break;
default:
printf("n은 1도 2도 아님");
}
- 하나의 값을 여러 경우(
case
)로 나누어 처리한다. break
를 명시적으로 써서 블록을 탈출한다.
fall-through
- case 끝에 break를 쓰지 않으면 다음 case로 흘러(fall through) 넘어간다.
int n = 1;
switch (n) {
case 1:
case 2:
printf("1 또는 2");
break;
default:
printf("1도 2도 아님");
}
if vs switch 선택 기준
if
를 사용하는 경우- 범위조건(
>
,<
,>=
,<=
) 이 필요한 경우 - 복잡한 조건식이 필요한 경우
- 변수 여러 개를 비교해야 할 경우
- 범위조건(
if
는 단순 값 비교를 넘어 다양한 형태의 복합 조건을 표현할 수 있다.
switch
를 사용하는 경우- 하나의 변수를
- 여러 개의 상수 값 중 하나와 비교할 때
- 각 분기마다 간단한 처리를 할 때
switch
는 특정 값(case
)을 기반으로 분기할 때 효율적이다.
반복문(Loops)
특정 조건을 만족하는 동안 코드를 반복 실행한다.
while 문
int i = 0;
while (i < 3) {
printf("%d\n", i);
i++;
}
- 조건이 참이면 계속 반복
- 조건을 먼저 평가
do-while 문
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 3);
- 무조건 한 번 실행하고, 그 다음 조건을 평가
for 문
for (int i = 0; i < 3; i++) { // (초기식; 조건식; 증감식)
printf("%d\n", i);
}
- 초기화 -> 조건 평가 -> 실행 -> 증감 순서로 동작
int i = 0
(초기식): 제어 변수 초기화i < 3
(조건식): 반복마다 평가. 참이면 실행, 거짓이면 종료i++
(증감식): 제어 변수 업데이트
반복문 제어
continue
: 건너뛰고 다음 반복을 진행break
: 반복문 탈출
함수 내 반복문의 경우 return
으로 함수를 종료해서 탈출할 수 있다.
for vs while 선택 기준
-
for
를 사용하는 경우- 반복 횟수가 명확하게 정해져 있는 경우
- 초기화 -> 조건 평가 -> 증감의 흐름이 자연스러운 경우
-
while
을 사용하는 경우- 반복 횟수를 사전에 알 수 없는 경우
- 조건이 만족될 때까지 반복하고 싶은 경우
- 반복 제어가 더 유연한 조건이 기반인 경우