30.6 연습문제: 3으로 끝나는 숫자만 출력하기
다음 소스 코드를 완성하여 1과 103 사이의 숫자 중 3으로 끝나는 숫자만 출력되게 만드세요.
practice_number_ending_3.c
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i = 1; for (;;) { ① _______________ ... _________________ ②________________ _________________ printf("%d ", i); i++; } return 0; }
실행 결과
3 13 23 33 43 53 63 73 83 93 103
정답
① if (i % 10 != 3) { i++; continue; } ② if (i > 103) break;
해설
for 반복문에서 printf 함수로 i의 값을 출력한 뒤 i를 1씩 증가시키고 있습니다. 따라서 printf 함수 윗 부분의 코드를 완성하여 3으로 끝나는 숫자를 출력해야 합니다.
먼저 3으로 끝나는 숫자를 구하려면 i를 10으로 나눈 뒤 나머지가 3인지 검사하면 됩니다. 하지만 if (i % 10 == 3)에서 i를 출력하더라도 그 아래에 있는 printf에서도 i를 출력하므로 원하는 결과가 나오지 않게 됩니다. 따라서 아래에 있는 printf에서 i가 출력되지 않도록 continue로 코드를 건너뛰어야 합니다.
3으로 끝나는 숫자만 출력되도록 하려면 if (i % 10 != 3)과 같이 if 조건문을 만들어서 3으로 끝나지 않는 숫자일 때 continue로 건너뜁니다. 이렇게 하면 그 아래에 있는 printf에서 3으로 끝나는 숫자만 출력할 수 있습니다. 그리고 continue로 코드를 건너뛰면 아래에 있는 i++;까지 건너뛰게 되므로 continue 위에 i++;을 넣어주어야 합니다.
for 반복문에 아무것도 지정되어 있지 않으므로 무한 루프입니다. 따라서 if 조건문을 사용하여 i가 103보다 클 때 break로 루프를 중단해줍니다. 여기서는 숫자를 출력하는 printf가 아래에 있으므로 i가 103과 같을 때 break로 중단해버리면 103은 출력되지 않습니다(103을 출력하기 전에 break로 루프가 중단됨). 그러므로 103까지 출력하려면 i가 103일 때는 그냥 넘어가고 루프를 한 번 더 실행하여 i가 103보다 클 때 루프를 중단하는 것입니다.