반복문 — 자동으로 반복하기
매번 똑같은 코드를 수백 번씩 복사하여 붙여넣을 수는 없습니다. 이제 for, while 반복문을 이용해 프로그램에게 "이 작업을 원하는 만큼 스스로 반복해!"라고 지시하는 방법을 배웁니다.
학습 목표
이번 단계를 완료하면 다음 능력을 갖추게 됩니다.
for문과 while문, do~while문의 차이와 사용법을 이해한다.break와 continue로 반복 흐름을 제어할 수 있다.반복문이란?
반복문(Loop)은 "조건이 참인 동안 같은 코드를 여러 번 계속해서 실행하라"는 문법입니다.
| 반복문 종류 | 특징 | 언제 사용하나요? |
|---|---|---|
for | 초기식, 조건식, 증감식이 한 줄에 있음 | "10번 반복해라" 처럼 반복 횟수가 명확할 때 |
while | 조건식만 있음 | "로그인 성공할 때까지" 처럼 특정 조건이 유지되는 동안 |
do ~ while | 무조건 1번은 실행 후 조건 검사 | "일단 사용자 입력을 1번 받고 나서 판단할 때" |
for문의 구조와 동작 원리
// 1부터 5까지 출력하기 for (int i = 1; i <= 5; i++) { printf("%d\n", i); }
for문 제어하기
역순으로 (10부터 1까지)
for (int i = 10; i >= 1; i--) { printf("%d ", i); } // 10 9 8 7 6 5 4 3 2 1
2씩 건너뛰기 (홀수)
for (int i = 1; i <= 10; i += 2) { printf("%d ", i); } // 1 3 5 7 9
while문과 do ~ while문
1. while문
조건이 참인 동안 반복합니다. 내부에서 i++를 해주지 않으면 영원히 멈추지 않는 무한 반복(Infinite loop)에 빠질 수 있으니 주의하세요.
int i = 1; // 초기식 while (i <= 5) { // 조건식 printf("%d\n", i); i++; // 증감식 (이게 빠지면 무한루프!) }
2. do ~ while문
조건식을 블록의 끝에서 검사합니다. 처음 조건이 거짓이더라도 무조건 1번은 코드가 실행됩니다.
int i = 10; do { printf("한 번은 실행됨: %d\n", i); i++; } while (i < 5); // 11은 5보다 작지 않으므로 여기서 종료됨
break와 continue
"즉시 그만!"
반복문 자체를 완전히 강제 종료하고 빠져나갑니다.
for(int i=1; i<=5; i++){ if(i == 3) break; printf("%d", i); } // 결과: 12
"이번 턴만 건너뛰고 다음!"
현재 회차의 남은 코드를 건너뛰고 증감식으로 갑니다.
for(int i=1; i<=5; i++){ if(i == 3) continue; printf("%d", i); } // 결과: 1245 (3만 건너뜀)
반복문과 조건문의 결합
반복(여러 데이터를 확인) + 조건(필요한 것만 필터링)의 결합은 프로그래밍의 가장 중요한 뼈대입니다.
// 1부터 10까지 돌면서 짝수만 찾아서 더하는 코드 int sum = 0; for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { sum += i; // sum = sum + i; 와 동일 } } printf("합계: %d\n", sum);
중첩 반복문 (Nested Loop)
반복문 안에 또 다른 반복문을 넣습니다. 이차원 구조(표, 게임 맵, 구구단)를 만들 때 쓰입니다.
바깥 for문은 '줄(Row)'을 제어하고, 안쪽 for문은 '칸(Col)'을 제어합니다.
for (int i = 1; i <= 5; i++) { // 5줄 for (int j = 1; j <= i; j++) { // 줄 수(i)만큼 별 찍기 printf("*"); } printf("\n"); // 줄바꿈 }
* ** *** **** *****
알고리즘 기초 실습
반복문을 통해 입력받으며 기존의 최댓값보다 더 큰 값이 들어오면 최댓값을 갱신합니다.
int number, max; printf("첫 번째 숫자: "); scanf("%d", &max); for (int i = 2; i <= 5; i++) { printf("%d번째 숫자: ", i); scanf("%d", &number); if (number > max) { max = number; // 새 최댓값으로 덮어씌움 } } printf("가장 큰 수: %d\n", max);
무한 반복과 제어
게임을 플레이하거나, 서버 프로그램은 사용자가 명시적으로 종료할 때까지 무한히 돕니다.
while (1) { printf("숫자 입력(0:종료) : "); scanf("%d", &number); if (number == 0) { break; // 0을 누르면 무한루프 탈출 } printf("입력값: %d\n", number); } printf("프로그램 종료\n");
STEP 06 최종 프로젝트
반복형 계산기 프로그램
사용자로부터 메뉴 입력을 받아 더하기/빼기/곱하기/나누기를 수행하고, '종료(5번)'를 선택할 때까지 무한히 계산을 할 수 있는 상용 프로그램 수준의 인터페이스를 만드세요.
[추가 알고리즘 도전 과제]
- 약수 구하기 : 어떤 수 N을 입력받아 1부터 N까지 반복하며 N과 나누어 떨어지는(% 연산) 수 출력
- 소수(Prime Number) 판별 : 어떤 수 N을 입력받아 약수의 개수가 2개인지 판단
- 구구단 전체 출력 : 중첩 for문을 이용해 2단부터 9단까지 출력
STEP 06 완료 체크리스트
조건문(판단)과 반복문(자동화)을 익혔습니다. 이 두 가지 블록만 있으면 사실상 "세상의 모든 알고리즘 논리"를 만들어낼 수 있습니다. 축하합니다!