공부해보잠
반복문 본문
반복문의 개요
반복문은 프로그램에서 특정 코드 블록을 여러 번 실행하는 제어문입니다.
일정한 횟수 동안 반복 실행하거나, 특정 조건이 만족될 때까지 반복하는 방식으로 동작합니다.
C 언어에서는 다음과 같은 반복문을 제공합니다:
반복문 | 설명 | 특징 |
for | 초기값, 조건식, 증감식을 한 줄에 포함하는 반복문 | 반복 횟수가 정해져 있을 때 사용 |
while | 조건을 만족하는 동안 계속 실행하는 반복문 | 반복 횟수가 정해지지 않았을 때 사용 |
do-while | 실행 후 조건을 검사하여 반복하는 문 | 최소 한 번은 실행됨 |
for문
- for 문은 특정 횟수만큼 반복 실행하는 제어문
- 초기값, 최종값(조건식), 증가값을 설정하여 반복을 제어
- for(;;)와 같이 조건에 참여하는 수식을 모두 생략하면 for문은 무한 반복한다.
- for문은 처음부터 최종값에 대한 조건식을 만족하지 못하면 한 번도 수행하지 않는다.
- 문자도 for문을 수행할 수 있다
기본 구조
for (초기값; 조건식; 증가값) {
// 실행할 문장
}
초기값: 반복을 시작할 변수 값을 설정 (int i = 0;)
조건식: 반복이 진행될 조건 (i < 10; → i가 10보다 작을 때 반복)
증가값: 반복할 때마다 변수의 값을 변경 (i++ → i를 1씩 증가)
예제 :1부터 5까지 출력
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) { // i는 1부터 5까지 증가
printf("반복 %d\n", i);//i++후위증가로 5의 값이 될때까지 반복 수행
}
return 0;
}
반복 1
반복 2
반복 3
반복 4
반복 5
- i = 1 → i <= 5 만족 → 실행 → i++
- i = 2 → i <= 5 만족 → 실행 → i++
- i = 5 → i <= 5 만족 → 실행 → i++
- i = 6 → i <= 5 조건 불만족 → 종료
예제 : 중첩된 for 문 (구구단 2단 출력)
#include <stdio.h>
int main() {
for (int i = 2; i <= 9; i++) { // 2단부터 9단까지 반복
for (int j = 1; j <= 9; j++) { // 곱하는 수 (1~9)
printf("%d x %d = %d\n", i, j, i * j);
}
printf("\n"); // 단 사이에 줄바꿈
}
return 0;
}
2 x 1 = 2
2 x 2 = 4
...
2 x 9 = 18
- 깥 for 문: i가 2부터 9까지 증가하며 각 단 실행
- 안쪽 for 문: j가 1부터 9까지 증가하며 곱셈 연산 수행
예제 문자 및 문자열 출력 시
#include <stdio.h>
int main() {
for (char ch = 'A'; ch <= 'Z'; ch++) { // 'A'부터 'Z'까지 반복
printf("%c ", ch);
}
return 0;
}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
- ch = 'A'부터 시작
- ch++로 한 문자씩 증가
- 'Z'까지 반복 후 종료
#include <stdio.h>
int main() {
char str[] = "HELLO"; // 문자열 선언,
for (int i = 0; str[i] != '\0'; i++) { // NULL 문자('\0') 전까지 반복
printf("%c ", str[i]);
}
return 0;
}
H E L L O
문자열 str[]의 각 문자를 for 문을 이용해 한 글자씩 출력
C 언어에서 문자열(char 배열)을 다룰 때, "HELLO"처럼 문자열을 정의하면 자동으로 문자열 끝에 '\0'(NULL 문자)가 추가됨
문자열의 끝을 표시하기위해 \0이 추가됨
for문의 무한 루프 발생 조건 및 해결책
무한 루프 발생 원인 | 해결 방법 |
조건이 항상 참 (for (i = 1; i > 0; i++)) | 반복 조건을 명확히 설정 (i <= 10) |
증감식이 없음 (for (i = 0; i < 5;)) | 증감식 추가 (i++) |
증감 방향 오류 (for (i = 10; i > 0; i++)) | 감소 방향으로 수정 (i--) |
의도적인 무한 루프 (for (;;)) | break; 문을 사용하여 탈출 |
while문
- while 문은 조건이 참(true)인 동안 계속 반복하는 제어문
- 반복 횟수가 정해지지 않았을 때 주로 사용
- 조건이 처음부터 거짓이면 한 번도 실행되지 않음
while 문의 기본 구조
while (조건식) {
// 실행할 코드
}
조건식이 참(true)이면 {} 내부 코드 실행
조건식이 거짓(false)이면 즉시 종료
예제 1: 1부터 5까지 출력
#include <stdio.h>
int main() {
int i = 1; // 초기값 설정
while (i <= 5) { // 조건이 참이면 반복
printf("반복 %d\n", i);
i++; // i 값을 증가시켜 조건을 변경
}
return 0;
}
반복 1
반복 2
반복 3
반복 4
반복 5
- i = 1 → i <= 5 참 → 실행 후 i++
- i = 5 → i <= 5 참 → 실행 후 i++
- i = 6 → i <= 5 거짓 → 종료
예제 2: 사용자가 0을 입력할 때까지 반복
#include <stdio.h>
int main() {
int num;
printf("숫자를 입력하세요 (0 입력 시 종료): ");
scanf("%d", &num);
while (num != 0) { // num이 0이 아닐 때 계속 반복
printf("입력한 숫자: %d\n", num);
printf("숫자를 입력하세요 (0 입력 시 종료): ");
scanf("%d", &num);
}
printf("프로그램 종료\n");
return 0;
}
숫자를 입력하세요 (0 입력 시 종료): 5
입력한 숫자: 5
숫자를 입력하세요 (0 입력 시 종료): 3
입력한 숫자: 3
숫자를 입력하세요 (0 입력 시 종료): 0
프로그램 종료
- num != 0이면 계속 반복
- num == 0이면 while 문 종료
예제 3: 처음부터 조건이 거짓이면 실행되지 않음
#include <stdio.h>
int main() {
int i = 10;
while (i < 5) { // 조건이 처음부터 거짓 (10 < 5는 false)
printf("이 문장은 실행되지 않습니다.\n");
}
printf("프로그램 종료\n");
return 0;
}
프로그램 종료
- i = 10, i < 5는 처음부터 거짓 → 실행 안 됨
- 바로 "프로그램 종료" 출력
while 문에서 무한 루프 발생 예제
#include <stdio.h>
int main() {
int i = 1;
while (i > 0) { // 항상 참이므로 무한 반복
printf("무한 루프 실행 중... i = %d\n", i);
}
return 0;
}
해결방법(i++ 또는 i--를 추가하여 탈출 조건 설정)
while (i > 0) {
printf("i = %d\n", i);
i--; // 조건이 변하도록 수정
}
요약
- while 문은 조건이 참인 동안 반복 실행
- 조건이 처음부터 거짓이면 한 번도 실행되지 않음
- 반복 횟수가 정해지지 않은 경우 while 문이 적합
- 조건을 변경하지 않으면 무한 루프 발생 가능 → 탈출 조건 필수
do~while문
- do-while 문은 while 문과 유사하지만, 무조건 한 번은 실행된다는 차이가 있음.
- 즉, 실행할 문장을 먼저 실행한 후, 조건을 검사하여 반복 여부를 결정함.
do-while 문의 기본 구조
do {
// 실행할 코드
} while (조건식);
반복할 코드를 먼저 실행한 후(do {} 부분), 조건(while (조건식))을 검사함.
조건이 참이면 계속 반복, 거짓이면 종료됨.
최소 한 번은 실행됨! (while 문과의 가장 큰 차이점)
예제 1: 1부터 5까지 출력
#include <stdio.h>
int main() {
int i = 1;
do {
printf("반복 %d\n", i);
i++; // i 값을 증가
} while (i <= 5); // i가 5 이하이면 반복
return 0;
}
반복 1
반복 2
반복 3
반복 4
반복 5
- i = 1 → 먼저 "반복 1" 출력 후 i++
- i = 5까지 같은 방식으로 실행
- i = 6이 되면 while (i <= 5) 조건이 거짓이므로 종료
예제 2: 사용자가 0을 입력할 때까지 반복
#include <stdio.h>
int main() {
int num;
do {
printf("숫자를 입력하세요 (0 입력 시 종료): ");
scanf("%d", &num);
} while (num != 0); // 0이 아닐 때 계속 반복
printf("프로그램 종료\n");
return 0;
}
숫자를 입력하세요 (0 입력 시 종료): 5
숫자를 입력하세요 (0 입력 시 종료): 3
숫자를 입력하세요 (0 입력 시 종료): 0
프로그램 종료
- num = 5 → 실행 후 조건 검사 (5 != 0 → 반복)
- num = 3 → 실행 후 조건 검사 (3 != 0 → 반복)
- num = 0 → 실행 후 조건 검사 (0 != 0 거짓 → 종료)
do-while 문에서 무한 루프 발생 예제
#include <stdio.h>
int main() {
int i = 1;
do {
printf("무한 루프 실행 중... i = %d\n", i);
} while (1); // 조건이 항상 참이므로 종료되지 않음!
return 0;
}
해결방안 (break;를 추가하여 탈출)
do {
printf("반복 실행 중...\n");
if (조건) // 특정 조건을 만족하면 탈출
break;
} while (1);
do-while 문과 while 문의 차이
조건이 처음부터 거짓이면 while 문은 실행되지 않지만, do-while 문은 최소 한 번 실행됨
#include <stdio.h>
int main() {
int i = 10;
while (i < 5) { // 처음부터 거짓이므로 실행되지 않음
printf("while 실행 중... i = %d\n", i);
}
printf("while 종료\n");
do { // 조건과 상관없이 한 번 실행
printf("do-while 실행 중... i = %d\n", i);
} while (i < 5); // 조건이 거짓이므로 두 번째 실행은 안 됨
printf("do-while 종료\n");
return 0;
}
while 종료
do-while 실행 중... i = 10
do-while 종료
즉, while 문은 처음부터 조건이 거짓이면 실행되지 않지만, do-while 문은 최소 한 번은 실행됨
요약
- do-while 문은 최소 한 번 실행 후 조건을 검사
- while 문과 달리 처음부터 조건이 거짓이어도 한 번은 실행됨
- 사용자 입력을 반복적으로 받을 때 자주 사용됨
- 무한 루프 방지를 위해 탈출 조건을 반드시 고려해야 함
break, continue
- break와 continue는 switch 문이나 반복문(for, while, do-while)의 실행 흐름을 제어하는 예약어
- break는 반복문을 즉시 종료하고 빠져나감.
- continue는 현재 반복을 건너뛰고 다음 반복으로 넘어감.(반복문에서만 사용)
예제
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) { // i는 1부터 10까지 증가하며 반복
if (i == 5)
continue; // i가 5이면 출력문을 건너뛰고 다음 반복으로 이동
if (i == 8)
break; // i가 8이면 반복문 즉시 종료
printf("%d ", i); // i 값을 출력
}
return 0;
}
i 값 | if (i == 5) (continue) | if (i == 8) (break) | 출력 |
1 | ❌ 실행 안 됨 | ❌ 실행 안 됨 | 1 |
2 | ❌ 실행 안 됨 | ❌ 실행 안 됨 | 2 |
3 | ❌ 실행 안 됨 | ❌ 실행 안 됨 | 3 |
4 | ❌ 실행 안 됨 | ❌ 실행 안 됨 | 4 |
5 | ✅ continue 실행 → 출력문 건너뛰고 다음 반복 | ❌ 실행 안 됨 | (출력 안 됨) |
6 | ❌ 실행 안 됨 | ❌ 실행 안 됨 | 6 |
7 | ❌ 실행 안 됨 | ❌ 실행 안 됨 | 7 |
8 | ❌ 실행 안 됨 | ✅ break 실행 → for 문 종료 | (출력 안 됨) |
for (int i = 1; i <= 10; i++)
- i를 1부터 10까지 증가하면서 반복 실행
if (i == 5) continue;
- i가 5이면 continue; 실행 → printf("%d ", i);를 건너뛰고 다음 반복 진행
if (i == 8) break;
- i가 8이면 break; 실행 → for 문 즉시 종료
printf("%d ", i);
- i == 5와 i == 8이 아닌 경우에만 i를 출력
1 2 3 4 6 7
즉, i == 5일 때는 출력이 건너뛰어지고, i == 8일 때는 반복문이 종료됨
출처 및 참고
정보처리 산업기사 기본서(시나공)