목차
- 중첩 반복문
- 반복문 탈출
- continue 분기문
1. 중첩 반복문
흠, 심심한데 별(*)로 나무나 그려 보죠.
가볍게 5줄짜리로 그려봅시다.
*
**
***
****
*****
한번 이렇게 그려보세요. 다 그리셧나요?
#include <stdio.h>
int main()
{
printf("*\n");
printf("**\n");
printf("***\n");
printf("****\n");
printf("*****\n");
return 0;
}
음...
아니, 물론 이건 잘못된 건 아니에요. 오히려 이렇게 짧을 경우에는 저렇게 짜는게 좋아요.
하지만 나무가 50줄을 넘어간다면..?
500줄은? 5000줄은? 50000줄은...
아무튼, 이런 경우의 수를 위해 for문을 사용하는거에요.
한번 만들어보죠.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0, b = 0, n = 0; //반복 횟수를 세기 위한 a, b
printf("나무의 높이를 입력하세요 : ");
scanf("%d", &n); //반복 횟수 조절을 위한 n
for (a = 0; a < n; a++) //a를 n번 시행합니다
{
printf("\n");
for (b = 0; b <= a; b++) //b(*)를 위쪽 for문의 시행 횟수만큼 출력합니다.
{
printf("*");
}
}
return 0;
}
좋아요. 만약 30을 입력하면
나무의 높이를 입력하세요 : 30
*
**
***
****
*****
******
*******
********
*********
**********
***********
************
*************
**************
***************
****************
*****************
******************
*******************
********************
*********************
**********************
***********************
************************
*************************
**************************
***************************
****************************
*****************************
******************************
젠장 이 긴 출력은 뭐냐!
아무튼, for문의 중첩을 통해 이런 귀찮은 것들을 손쉽게 처리할 수 있어요.
사실, 이런 복잡한 중첩문들은 먼저 간결한 의사문으로 표기해보고 짜는게 좋은데
1. 반복 횟수를 받는다
2. 시행한다, 이때 시행은 반복 횟수만큼 시행된다.
3. 시행된 횟수만큼 별을 적고 줄바꿈한다.
에요. 주석문을 참조하세요.
이러한 의사문을 통해 반복의 규칙을 찾아내면 여러 복잡한 문제들을 해결할 수 있어요.
2. 반복문 탈출
흠, 하지만 저 조건 말고 다른 특정한 경우에도 좀 탈주하고싶어요.
그럴 경우에 쓰는 것이 break; 문이에요. break; 문은 어느 경우에도 시행되면 반복문 한 겹을 탈출해요.
사실 break; 문은 이미 설명했으므로 여기까지만 말하고, for문에서 한번 실습해볼게요.
가령, 1부터 n까지의 값을 모두 합치는 프로그램을 만들어봅시다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0, b = 0, sum = 0; //값을 처리하기 위한 변수
printf("합할 값을 입력하세요: ");
scanf("%d", &a);
for (b = 0; b <= a; b++)
{
sum += b; //총합에 값을 더합니다, sum +1, sum +2....
}
printf("총합 : %d", sum); //for문 반복 후 sum값 출력
return 0;
}
이렇게 된 상태에서 실행하면.
합할 값을 입력하세요: 100
총합 : 5050
처럼 나와요.
하지만 총합이 너무 커지면 프로그램이 느려지거나 오래 걸릴 수 있기 때문에, 총합이 10000을 넘기면 그냥 for문을 종료해버리고싶어요.
그러기 위해서 사용하는 것이 break문이에요.
한번 중간에 추가해 볼게요.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0, b = 0, sum = 0;
printf("합할 값을 입력하세요: ");
scanf("%d", &a);
for (b = 0; b <= a; b++)
{
sum += b;
if (sum > 10000)
{
printf("값이 너무 큽니다.\n");
break;
}
}
printf("총합 : %d", sum);
return 0;
}
이러면 만약 sum이 10000을 넘는 순간 for문을 빠져나와요.
break; 문은 반복문을 한 겹만 빠져나오기 때문에, 중첩된 반복문일 경우 break;문을 여러번 사용해야 한다는 것을 기억하세요!
3. continue 분기문
만약 값이 일정 변동치를 넘으면 반복문의 일부를 무시해버리고 싶을 때가 있어요.
반복문 2개로 쪼개는것도 있지만, 여기서는 continue문을 사용해 봅시다.
continue문은 반복문을 탈출하지는 않지만, continue문의 조건에 따라 일부 반복문의 부분을 무시하고 끝으로 이동해요.
한번 3의 배수만 따로 뽑아주는 프로그램을 만들어 볼까요.
#include <stdio.h>
int main()
{
int a = 0;
for (a = 1; a <= 100; a++) //for문을 100번 시행
{
if ((a % 3) == 0) //만약 a가 3의 배수일 경우 시행
{
printf("3의 배수입니다.\n");
continue; //for문의 끝( } )으로 이동하고 증감식을 실행합니다.
}
printf("%d입니다.\n",a); //for문의 기본 시행, a가 3의 배수일 경우 continue에 의해 무시됨
}
return 0;
}
좋아요 실행하면...
아니, 100번 실행하면 너무 길어지기에 그냥 20까지만 가져올게요.
1입니다.
2입니다.
3의 배수입니다.
4입니다.
5입니다.
3의 배수입니다.
7입니다.
8입니다.
3의 배수입니다.
10입니다.
11입니다.
3의 배수입니다.
13입니다.
14입니다.
3의 배수입니다.
16입니다.
17입니다.
3의 배수입니다.
19입니다.
20입니다.
좋아요!
한 가지 알아두셔야 할 점은, for문과 다르게 while문에서는 continue를 사용할 경우 끝으로 이동하기 때문에 증감식이 작동하지 않아요. for문은 증감식을 처리하는 것과 다르게 말이죠.
그러니, 사용에 따라 주의를 기울이도록 합시다.
'프로그래밍 > C' 카테고리의 다른 글
변수와 데이터 입력 - 예제 모음 (0) | 2025.04.18 |
---|---|
상수와 데이터 출력 - 예제 모음 (0) | 2025.04.18 |
while문, for문, do ~ while문 (2) | 2025.04.18 |
switch ~ case문 (0) | 2025.04.18 |
if문 (0) | 2025.04.18 |