위의 사진은 switch ~ case문의 대표적인 사례이다.
등수에 따라 상금을 차등 지급하는 경우, 1등에게 300만원, 2등에게 200만원, 3등에게 100만원을 준다고 하자.
상금의 지급 조건은 등수이고, 해당 등수는 상수 1, 2, 3이다.
규칙1. 조건식은 정수식만 사용한다.
규칙2. 기본적으로 case는 break를 포함한다.
#include <stdio.h>
int main(void)
{
int rank = 2, m = 0;
switch (rank) // rank의 값이 얼마인지 확인
{
case 1 : // rank가 1이면
m = 300; // m은 300을 수행하고
break; // 블록을 벗어나 22행으로 이동
case 2 : // rank가 2이면
m = 200; // m은 200을 수행하고
break; // 블록을 벗어나 22행으로 이동
case 3 : // rank가 3이면
m = 100; // m은 100을 수행하고
break; // 블록을 벗어나 22행으로 이동
default: // rank와 일치하는 case의 값이 없으면
m = 10; // m은 10을 수행하고
break; // 블록을 벗어나 22행으로 이동
}
printf("m : %d\n", m);
return 0;
}
break의 경우 적절하게 생략하여 사용할 수 있다.
그러나 위의 경우에서 break를 사용하지 않는다면, 1등의 경우 1등 상금 + 2등 상금 + 3등 상금을 받고.
2등의 경우 2등 상금 + 3등 상금, 3등의 경우 3등 상금을 받게 된다.
while문은 조건식을 먼저 검사하고 조건식이 참인 동안 실행문을 반복한다.
while (a < 10)
{
a = a * 2;
}
위의 식에선 a가 1이면 2가되고, 2이면 4가 되고, 4이면 8이된다. 거기서 끝!
#include <stdio.h>
int main(void)
{
int a = 1; // 변수를 선언하고 곱셈을 하기 위해 1로 초기화
while (a < 10) // a가 10보다 작으므로 조건식은 참
{
a = a * 2; // a에 2를 곱해 a에 다시 저장
}
printf("a : %d\n", a); // a값 출력
return 0;
} // 출력 값은 16이다.
#include <stdio.h>
int main(void)
{
int a = 1; // 변수를 선언하고 1로 초기화
int i; // 반복 횟수를 세기 위한 변수
for (i = 0; i < 3; i++) // i는 0으로 초기화 한 다음에, i가 3보다 작은 경우 동안 하나씩 증가함
{
a = a * 2; // 초기값이 0이고, 차례로 계산하며 진행함
}
printf("a : %d\n", a); // for문을 빠져 나오면 a값 출력
return 0;
} // 실행결과: a=8
for문은 실행문을 원하는 횟수만큼 반복할 때 사용한다.
위의 식에서는 a값이 0으로 시작하는데, for문 시작부분에서 a는 3보다 작기에 0 + 1이 되어 1이라는 값이 된다.
이러한 1은 아래 a = a * 2를 만족시켜 2가 되고 2는 다시 4로 된다. 그러나 4의 경우 i <3 을 만족하지 않는다.
따라서 i ++가 아닌 a = a * 2를 바로 만족시켜 결과 값 8을 갖게된다.
while문과 for문의 경우 조건식을 먼저 확인하는 반면, do ~ while 문은 일단 반복할 문장을 수행한 후에 조건을 검사한다.
#include <stdio.h>
int main(void)
{
int a = 1; // 변수를 선언하고 1로 초기화
do // 반복문 시작 위치
{
a = a * 2; // a의 값을 2배로 늘린다.
} while ( a < 10); // a가 10보다 작으면, 9행을 반복
printf("a : %d\n", a); // 반복이 끝난 후 a값 출력
return 0;
} // 결과 값: a=16