이중 반복문
순회 변수로 i, j, k, … 순으로 작성합니다.
int i, j;
for (i 초기식; i 조건식 ; i 증감식)
{
for (j 초기식; j 조건식 ; j 증감식)
{
명령어;
...
}
}
Ex040501) “천천히 읽기”와 이중 반복문 [중요 샘플 코드]
다음의 소스코드를 “천천히 읽기”로 출력 결과를 예측해봅시다. 예측 결과와 실행 결과와 비교해봅시다.
// Main.c
#include <stdio.h>
int main(void)
{
int i, j;
for (i = 1; i <= 3; ++i)
{
for (j = 1; j <= 3; ++j)
{
printf("%c ", '*');
}
printf("\\n");
}
return 0;
}
천천히읽기
1.main함수 시작
2.int자료형 변수 i, j 선언
3.for반복문 초기식확인 i=1, 조건 확인 i가 3보다 작거나 같을때까지
4.현재i=1이니 중괄호 속 명령 실행
5.내부 for반복문 초기식확인 j=1, 조건 확인 j가 3보다 작거나 같을때까지
6.현재j=1이니 중괄호 속 명령 실행 *을 %c 형식으로 출력 후 j에 1증가
7.다시내부 for반복문 조건 확인 j가 3보다 작거나 같을때까지
8.현재j=2이니 중괄호 속 명령 실행 *을 %c 형식으로 출력 후 j에 1증가
9.다시내부 for반복문 조건 확인 j가 3보다 작거나 같을때까지
10.현재j=3이니 중괄호 속 명령 실행 *을 %c 형식으로 출력 후 j에 1증가
11.다시내부 for반복문 조건 확인 j가 3보다 작거나 같지 않으니 내부for문탈출 후 줄바꿈 하고 i에 1증가
12.다시 for반복문 조건 확인 i가 3보다 작거나 같을때까지
13.현재i=2이니 중괄호 속 명령 실행
14.내부 for반복문 초기식확인 j=1, 조건 확인 j가 3보다 작거나 같을때까지
15.현재j=1이니 중괄호 속 명령 실행 *을 %c 형식으로 출력 후 j에 1증가
16.다시내부 for반복문 조건 확인 j가 3보다 작거나 같을때까지
17.현재j=2이니 중괄호 속 명령 실행 *을 %c 형식으로 출력 후 j에 1증가
18.다시내부 for반복문 조건 확인 j가 3보다 작거나 같을때까지
19.현재j=3이니 중괄호 속 명령 실행 *을 %c 형식으로 출력 후 j에 1증가
20.다시내부 for반복문 조건 확인 j가 3보다 작거나 같지 않으니 내부for문탈출 후 줄바꿈 하고 i에 1증가
21.다시 for반복문 조건 확인 i가 3보다 작거나 같을때까지
22.현재i=3이니 중괄호 속 명령 실행
23.내부 for반복문 초기식확인 j=1, 조건 확인 j가 3보다 작거나 같을때까지
24.현재j=1이니 중괄호 속 명령 실행 *을 %c 형식으로 출력 후 j에 1증가
25.다시내부 for반복문 조건 확인 j가 3보다 작거나 같을때까지
26.현재j=2이니 중괄호 속 명령 실행 *을 %c 형식으로 출력 후 j에 1증가
27.다시내부 for반복문 조건 확인 j가 3보다 작거나 같을때까지
28.현재j=3이니 중괄호 속 명령 실행 *을 %c 형식으로 출력 후 j에 1증가
29.다시내부 for반복문 조건 확인 j가 3보다 작거나 같지 않으니 내부for문탈출 후 줄바꿈 하고 i에 1증가
30.다시 for반복문 조건 확인 i가 3보다 작거나 같을때까지
31.현재i=4이니 조건에 맞지않아 for문 탈출
32.return 0만나 main함수 종료
// Main.c
#include <stdio.h>
int main(void)
{
for (int i = 1; i < 4; ++i)
{
printf("%d번 무기 강화\n", i);
for (int j = 1; j <= 10; ++j)
{
printf("강화 레벨: %d\n", j);
}
}
return 0;
}
이중 반복문 꿀팁
- 줄의 개수를 파악하고 줄 번호 매기기.
- 각 줄의 칸 개수를 파악하고 칸 번호 매기기.
- 각 칸의 출력을 적기.
[어려움]Ex040503) 반대로 해보기
아래와 같이 출력되게끔 소스코드를 작성해봅시다. 이중 반복문 꿀팁을 활용하여 출력으로부터 소스코드를 역산해서 풀어봅시다.
1 2 3 4
5 6 7 8
9 10 11 12
// Main.c
#include <stdio.h>
int main(void)
{
int count = 1;
for (int i = 1; i < 4; ++i)
{
printf("\n");
for (int j=0 ; j < 4; ++j)
{
printf(" %3d", count);
++count;
}
}
return 0;
}
어렸웠던점: 이중 for문일때 외부for문은 줄 개수를 내부 for문은 칸 개수를 나타내는건 알고 있었지만
줄이 바뀔 때 마다 칸에 출력되는 수를 다르게 하려면 어떻게 해야되는지 몰랐다.
해결방안: 새로운 변수를 하나 외부for문 바깥에 만들어두어 반복문에 영향을 받지 않게 선언했다.
그래서 외부 for문을 반복할때마다 변수의 값이 초기화 되는 내부for문의 변수를 출력하지 않고
반복문을 실행할때마다 수가 계속 누적되는 외부의 변수를 출력하는걸로 해결했다.
이중 반복문의 응용
조금 다른 형태의 이중 반복문. 반복문 안에 반복문이 여러 개 들어가 있는 경우입니다.
int i, j, k;
for (i 초기식; i 조건식 ; i 증감식)
{
for (j 초기식; j 조건식 ; j 증감식)
{
작은 명령어1
...
}
for (k 초기식; k 조건식 ; k 증감식)
{
작은 명령어2
...
}
}
Ex040601) 이중 반복문 응용
아래 소스코드를 “천천히 읽기” 한번, 이중 반복문 꿀팁으로 한번 결과를 예측해봅시다. 그리고 실행 결과와 비교해봅시다.
// Main.c
#include <stdio.h>
int main(void)
{
int i, j, k;
for (i = 1; i <= 3; ++i)
{
for (j = i; j < 3; ++j)
{
printf(" ");
}
for (k = 1; k <= i; ++k)
{
printf("*");
}
printf("\\n");
}
return 0;
}
1.main함수 시작
2.int 자료형 변수 i, j, k 선언
3.for문 초기식i=1 조건 i가 3보다 작거나 같을때
4.i=1 조건에 맞으니 중괄호 속 내용 실행
5.for문 초기식j=i(현재i=1), 조건 j가 3보다 작을때
6.j=1 조건에 맞으니 중괄호 속 내용 실행
7." " 공백 출력 후 j에 1증가
8.다시 for문 조건 j가 3보다 작을때
9.j=2 조건에 맞으니 중괄호 속 내용 실행
10." " 공백 출력 후 j에 1증가
11.다시 for문 조건 j가 3보다 작을때
12.j=3 조건에 안맞으니 반복문 탈출
13.for문 초기식k=1, 조건k가 i보다 작거나 같을때(현재i=1)
14.k=1 조건에 맞으니 중괄호 속 내용 실행
15.* 출력 후 반복문 탈출
16.줄바꿈 한 후 i에 1증가
17.다시 for문으로 조건 i가 3보다 작거나 같을때
18.i=2 조건에 맞으니 중괄호 속 내용 실행
19.for문 초기식j=i(현재i=2), 조건 j가 3보다 작을때
20.j=2 조건에 맞으니 중괄호 속 내용 실행
21." " 공백 출력 후 j에 1증가
22.다시 for문 조건 j가 3보다 작을때
23.j=3 조건에 안맞으니 반복문 탈출
24.for문 초기식k=1, 조건k가 i보다 작거나 같을때(현재i=2)
25.k=1 조건에 맞으니 중괄호 속 내용 실행
26.* 출력 후 k에 1증가
27.조건k가 i보다 작거나 같을때(현재i=2)
28.k=2 조건에 맞으니 중괄호 속 내용 실행
29.* 출력 후 k에 1증가
30.조건k가 i보다 작거나 같을때(현재i=2)
31.k=3 조건에 안맞으니 반복문 탈출
32.줄바꿈 한 후 i에 1증가
33.다시 for문으로 조건 i가 3보다 작거나 같을때
34.i=3 조건에 맞으니 중괄호 속 내용 실행
35.for문 초기식j=i(현재i=3), 조건 j가 3보다 작을때
36.j=3 조건에 안맞으니 반복문 탈출
37.for문 초기식k=1, 조건k가 i보다 작거나 같을때(현재i=3)
38.k=1 조건에 맞으니 중괄호 속 내용 실행
39.* 출력 후 k에 1증가
40.조건k가 i보다 작거나 같을때(현재i=3)
41.k=2 조건에 맞으니 중괄호 속 내용 실행
42.* 출력 후 k에 1증가
43.조건k가 i보다 작거나 같을때(현재i=3)
44.k=3 조건에 맞으니 중괄호 속 내용 실행
45.* 출력 후 k에 1증가
46.조건k가 i보다 작거나 같을때(현재i=3)
47.k=4 조건에 안맞으니 반복문 탈출
48.줄바꿈 한 후 i에 1증가
49.다시 for문으로 조건 i가 3보다 작거나 같을때
50.i=4 조건에 안맞으니 반복문 탈출
51.return 0만나 main함수 종료
'C' 카테고리의 다른 글
| [내배캠자습]C언어 챕터 5-2 : 2차원 배열 (0) | 2026.03.28 |
|---|---|
| [내배캠자습]C언어 챕터 5-1 : 1차원 배열 (0) | 2026.03.28 |
| [내배캠자습]C언어 챕터 4-4 : 무한 반복문, break, continue (0) | 2026.03.28 |
| [내배캠자습]C언어 챕터 4-3 : do-while문 (0) | 2026.03.28 |
| [내배캠자습]C언어 챕터 4-2 : for문 (0) | 2026.03.28 |