1. 반복문이란?
반복문은 특정 코드를 여러 번 반복 실행할 때 사용하는 제어문입니다.
반복문 = 같은 코드를 여러 번 실행
반복문을 사용하면 코드의 양을 줄이고 효율적인 프로그램을 작성할 수 있습니다.
반복문을 사용하면 코드의 양을 줄이고 효율적인 프로그램을 작성할 수 있습니다.
반복문의 필요성:
반복문이 없다면?
printf("Hello\n");
printf("Hello\n");
printf("Hello\n");
printf("Hello\n");
printf("Hello\n");
// 100번 출력하려면...?
반복문을 사용하면?
int i;
for (i = 0; i < 100; i++) {
printf("Hello\n");
}
C 언어의 반복문 종류:
| 반복문 | 특징 | 주요 용도 |
|---|---|---|
while |
조건이 참인 동안 반복 | 반복 횟수가 정해지지 않은 경우 |
do-while |
최소 1회 실행 후 조건 검사 | 한 번은 반드시 실행해야 하는 경우 |
for |
반복 횟수가 명확한 경우 | 반복 횟수를 알고 있는 경우 |
2. while문
while문은 조건이 참인 동안 코드를 반복 실행합니다.
기본 형태
while (조건식)
{
// 조건이 참일 때 반복 실행할 코드
}
실행 흐름:
시작 → 조건 검사 → 참? → 코드 실행 → 조건 검사 반복
↓ 거짓
종료
while문의 동작 원리
1. 조건식을 먼저 검사
2. 조건이 참이면 코드 실행
3. 다시 조건식으로 돌아가 검사
4. 조건이 거짓이면 반복 종료
1. 조건식을 먼저 검사
2. 조건이 참이면 코드 실행
3. 다시 조건식으로 돌아가 검사
4. 조건이 거짓이면 반복 종료
실습 1
#include <stdio.h>
int main() {
int count = 0;
while (count < 3) {
printf("count = %d\n", count);
count++; // count 증가 (중요!)
}
printf("반복 종료\n");
return 0;
}
실행 결과 보기
count = 0 count = 1 count = 2 반복 종료
- count가 0, 1, 2일 때 조건(count < 3)이 참
- count가 3이 되면 조건이 거짓이므로 반복 종료
- count++가 없으면 무한루프 발생!
실습 2 - 사용자 입력 반복
#include <stdio.h>
int main() {
int num;
printf("숫자를 입력하세요 (-1 입력 시 종료)\n");
num = 0; // 초기값 설정
while (num != -1) {
printf("입력: ");
scanf("%d", &num);
if (num == -1) {
printf("프로그램을 종료합니다.\n");
} else {
printf("%d를 입력하셨습니다.\n", num);
}
}
return 0;
}
실행 결과 보기
숫자를 입력하세요 (-1 입력 시 종료) 입력: 5 5를 입력하셨습니다. 입력: 10 10를 입력하셨습니다. 입력: -1 프로그램을 종료합니다.
무한루프
조건이 항상 참이면 반복문이 영원히 실행됩니다.
의도하지 않은 무한루프 (주의!):
int num = 1;
while (num < 5) {
printf("무한 반복!\n");
// num이 변하지 않음 → 무한루프!
}
의도적인 무한루프:
while (1) { // 1은 항상 참
printf("무한 반복 중...\n");
// 특정 조건에서 break로 탈출
}
💡 무한루프 탈출 방법
• 프로그램 강제 종료:
• 코드 내에서 탈출:
• 프로그램 강제 종료:
Ctrl + C• 코드 내에서 탈출:
break 사용
3. do-while문
do-while문은 최소 한 번은 실행한 후 조건을 검사합니다.
기본 형태
do {
// 최소 1회는 실행되는 코드
} while (조건식);
⚠️ while문과의 차이점
• while문: 조건 검사 → 실행
• do-while문: 실행 → 조건 검사
• do-while문은 조건이 거짓이어도 최소 1회는 실행됩니다!
• while문: 조건 검사 → 실행
• do-while문: 실행 → 조건 검사
• do-while문은 조건이 거짓이어도 최소 1회는 실행됩니다!
실행 흐름:
시작 → 코드 실행 → 조건 검사 → 참? → 코드 실행 반복
↓ 거짓
종료
실습 3
#include <stdio.h>
int main() {
int num;
do {
printf("숫자 입력 (-1 입력 시 종료): ");
scanf("%d", &num);
} while (num != -1);
printf("종료되었습니다.\n");
return 0;
}
실행 결과 보기
숫자 입력 (-1 입력 시 종료): 5 숫자 입력 (-1 입력 시 종료): 10 숫자 입력 (-1 입력 시 종료): -1 종료되었습니다.
do-while문은 입력을 최소 1회는 받아야 하는 경우에 적합합니다.
실습 4 - 1부터 10까지의 합
#include <stdio.h>
int main() {
int num = 1;
int sum = 0;
do {
sum += num; // sum = sum + num
num++;
} while (num <= 10);
printf("1부터 10까지의 합: %d\n", sum);
return 0;
}
실행 결과 보기
1부터 10까지의 합: 55
- num이 1부터 10까지 증가하며 sum에 더해짐
- 1 + 2 + 3 + ... + 10 = 55
4. for문
for문은 반복 횟수가 정해져 있을 때 가장 많이 사용하는 반복문입니다.
기본 형태
for (초기식; 조건식; 증감식)
{
// 반복 실행할 코드
}
각 요소의 역할:
| 요소 | 역할 | 실행 시점 |
|---|---|---|
| 초기식 | 반복 변수 초기화 | 딱 한 번만 실행 |
| 조건식 | 반복 조건 검사 | 매 반복마다 검사 |
| 증감식 | 반복 변수 변경 | 매 반복 후 실행 |
실행 순서:
초기식 → 조건식 → 참? → 코드 실행 → 증감식 → 조건식 반복
↓ 거짓
종료
for문의 실행 순서
1. 초기식 실행 (딱 1번)
2. 조건식 검사
3. 조건이 참이면 코드 실행
4. 증감식 실행
5. 2번으로 돌아가 반복
1. 초기식 실행 (딱 1번)
2. 조건식 검사
3. 조건이 참이면 코드 실행
4. 증감식 실행
5. 2번으로 돌아가 반복
실습 5
#include <stdio.h>
int main() {
int i;
for (i = 0; i < 5; i++) {
printf("i = %d\n", i);
}
return 0;
}
실행 결과 보기
i = 0 i = 1 i = 2 i = 3 i = 4
i = 0: 초기식, i를 0으로 초기화i < 5: 조건식, i가 5보다 작으면 반복i++: 증감식, i를 1씩 증가- 총 5회 반복 (i = 0, 1, 2, 3, 4)
실습 6 - 1부터 100까지의 합
#include <stdio.h>
int main() {
int i;
int sum = 0;
for (i = 1; i <= 100; i++) {
sum += i;
}
printf("1부터 100까지의 합: %d\n", sum);
return 0;
}
실행 결과 보기
1부터 100까지의 합: 5050
for문의 다양한 형태
증감식 변형:
// 2씩 증가
for (i = 0; i < 10; i += 2)
printf("%d ", i); // 0 2 4 6 8
// 1씩 감소
for (i = 5; i > 0; i--)
printf("%d ", i); // 5 4 3 2 1
요소 생략 가능:
int i = 0;
for (; i < 3; i++) { // 초기식 생략
printf("%d ", i);
}
무한루프:
for (;;) { // 모든 요소 생략
printf("무한 반복!\n");
// Ctrl + C로 종료
}
💡 for문 vs while문
• for문: 반복 횟수가 명확할 때 (카운팅)
• while문: 조건에 따라 반복할 때 (조건 기반)
• for문: 반복 횟수가 명확할 때 (카운팅)
• while문: 조건에 따라 반복할 때 (조건 기반)
5. 중첩 반복문
반복문 안에 또 다른 반복문을 넣을 수 있습니다.
기본 형태
for (외부 초기식; 외부 조건식; 외부 증감식)
{
for (내부 초기식; 내부 조건식; 내부 증감식)
{
// 외부 반복 1회당 내부 반복 전체가 실행됨
}
}
중첩 반복문의 실행 횟수
외부 반복 N회 × 내부 반복 M회 = 총 N × M회 실행
외부 반복 N회 × 내부 반복 M회 = 총 N × M회 실행
실습 7 - 구구단 출력
#include <stdio.h>
int main() {
int dan, num;
printf("=== 구구단 ===\n");
for (dan = 2; dan <= 9; dan++) {
printf("\n[%d단]\n", dan);
for (num = 1; num <= 9; num++) {
printf("%d × %d = %d\n", dan, num, dan * num);
}
}
return 0;
}
실행 결과 보기
=== 구구단 === [2단] 2 × 1 = 2 2 × 2 = 4 2 × 3 = 6 ... 2 × 9 = 18 [3단] 3 × 1 = 3 3 × 2 = 6 ... [9단까지 계속]
외부 for문(dan)이 1회 실행될 때마다 내부 for문(num)이 9회 실행됩니다.
실습 8 - 별 찍기 패턴
#include <stdio.h>
int main() {
int i, j;
printf("직각삼각형 패턴:\n");
for (i = 1; i <= 5; i++) {
for (j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
실행 결과 보기
직각삼각형 패턴: * ** *** **** *****
- i = 1일 때: j가 1번 반복 → * 1개
- i = 2일 때: j가 2번 반복 → * 2개
- i = 5일 때: j가 5번 반복 → * 5개
6. break와 continue
반복문의 흐름을 제어하는 두 가지 키워드입니다.
break - 반복문 즉시 종료
break는 반복문을 완전히 탈출합니다.
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 10; i++) {
if (i == 5) {
break; // i가 5일 때 반복문 종료
}
printf("%d ", i);
}
printf("\n반복문 종료\n");
return 0;
}
실행 결과 보기
1 2 3 4 반복문 종료
i가 5가 되면 break가 실행되어 반복문이 즉시 종료됩니다.
continue - 다음 반복으로 건너뛰기
continue는 현재 반복만 건너뛰고 다음 반복을 계속합니다.
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 5; i++) {
if (i == 3) {
continue; // i가 3일 때 아래 코드 건너뛰기
}
printf("%d ", i);
}
printf("\n");
return 0;
}
실행 결과 보기
1 2 4 5
i가 3일 때 continue가 실행되어 printf를 건너뛰고 다음 반복으로 넘어갑니다.
실습 9 - 짝수만 출력하기
#include <stdio.h>
int main() {
int i;
printf("1부터 10까지 짝수만 출력:\n");
for (i = 1; i <= 10; i++) {
if (i % 2 != 0) { // 홀수면
continue; // 건너뛰기
}
printf("%d ", i);
}
printf("\n");
return 0;
}
실행 결과 보기
1부터 10까지 짝수만 출력: 2 4 6 8 10
break vs continue 비교:
| 키워드 | 동작 | 사용 시점 |
|---|---|---|
break |
반복문 즉시 종료 | 더 이상 반복이 필요 없을 때 |
continue |
현재 반복만 건너뛰기 | 특정 조건에서 일부 코드만 건너뛸 때 |
실행 흐름 비교
• break: 반복문 탈출 → 반복문 다음 코드 실행
• continue: 반복문의 처음(증감식)으로 이동 → 다음 반복 진행
• break: 반복문 탈출 → 반복문 다음 코드 실행
• continue: 반복문의 처음(증감식)으로 이동 → 다음 반복 진행
7. 종합 실습
문제 1 - while문 (기초)
문제 1
다음 코드의 실행 결과는?
반복문
#include <stdio.h>
int main() {
int i = 5;
int sum = 0;
while (i > 0) {
sum += i;
i--;
}
printf("%d", sum);
return 0;
}
문제 2 - do-while문 (기초)
문제 2
다음 코드는 몇 번 실행됩니까?
반복문
#include <stdio.h>
int main() {
int num = 10;
int count = 0;
do {
count++;
} while (num < 5);
printf("%d", count);
return 0;
}
문제 3 - for문 (기초)
문제 3
다음 코드의 실행 결과는?
반복문
#include <stdio.h>
int main() {
int i;
for (i = 0; i < 4; i++) {
printf("%d ", i * 2);
}
return 0;
}
문제 4 - break (중급)
문제 4
다음 코드의 실행 결과는?
반복문
#include <stdio.h>
int main() {
int i;
int sum = 0;
for (i = 1; i <= 10; i++) {
sum += i;
if (sum > 10) {
break;
}
}
printf("%d", i);
return 0;
}
문제 5 - continue (중급)
문제 5
다음 코드의 실행 결과는?
반복문
#include <stdio.h>
int main() {
int i;
int count = 0;
for (i = 1; i <= 5; i++) {
if (i == 2 || i == 4) {
continue;
}
count++;
}
printf("%d", count);
return 0;
}
문제 6 - 중첩 반복문 (중급)
문제 6
다음 코드의 실행 결과는?
반복문
#include <stdio.h>
int main() {
int i, j;
int count = 0;
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
count++;
}
}
printf("%d", count);
return 0;
}
문제 7 - 팩토리얼 (고급)
문제 7
5! (5 팩토리얼)의 값은?
// 5! = 5 × 4 × 3 × 2 × 1
int n = 5;
int result = 1;
int i;
for (i = 1; i <= n; i++) {
result *= i;
}
printf("%d", result);
반복문
문제 8 - 무한루프 판별 (고급)
문제 8
다음 중 무한루프가 발생하는 코드는? (여러 개 선택 가능)
A. while (1) { }
B. for (;;) { }
C. int i = 0;
while (i < 5) {
printf("%d ", i);
}
D. do {
printf("Hello");
} while (1);
반복문
핵심 요약
1. while문
• 조건이 참인 동안 반복
• 형태:
• 조건을 먼저 검사
2. do-while문
• 최소 1회는 실행 후 조건 검사
• 형태:
• 한 번은 반드시 실행해야 할 때 사용
3. for문
• 반복 횟수가 정해져 있을 때 사용
• 형태:
• 가장 많이 사용되는 반복문
4. 중첩 반복문
• 반복문 안에 반복문
• 외부 N회 × 내부 M회 = 총 N×M회 실행
• 2차원 패턴, 구구단 등에 활용
5. break
• 반복문 즉시 종료
• 더 이상 반복이 필요 없을 때 사용
6. continue
• 현재 반복만 건너뛰고 다음 반복 진행
• 특정 조건의 코드만 건너뛸 때 사용
7. 무한루프
•
• 강제 종료:
• 의도적인 경우: break로 탈출
• 조건이 참인 동안 반복
• 형태:
while (조건) { 실행문 }• 조건을 먼저 검사
2. do-while문
• 최소 1회는 실행 후 조건 검사
• 형태:
do { 실행문 } while (조건);• 한 번은 반드시 실행해야 할 때 사용
3. for문
• 반복 횟수가 정해져 있을 때 사용
• 형태:
for (초기식; 조건식; 증감식) { 실행문 }• 가장 많이 사용되는 반복문
4. 중첩 반복문
• 반복문 안에 반복문
• 외부 N회 × 내부 M회 = 총 N×M회 실행
• 2차원 패턴, 구구단 등에 활용
5. break
• 반복문 즉시 종료
• 더 이상 반복이 필요 없을 때 사용
6. continue
• 현재 반복만 건너뛰고 다음 반복 진행
• 특정 조건의 코드만 건너뛸 때 사용
7. 무한루프
•
while (1) 또는 for (;;)• 강제 종료:
Ctrl + C• 의도적인 경우: break로 탈출