[C언어] 반복문
1. 반복문
반복문은 크게 3가지 정도이며, 해당 조건이 만족되는 동안 단일 문장 또는 여러 문장으로 이루어진 블럭을 반복적으로 처리합니다.
◆ while 문
while문은 ()안의 조건이 '참'으로 만족하는 동안 {} 안의 블럭을 반복적으로 처리합니다.
while(조건)
{
반복 작업할 코드
}
아래 예를 봅시다.
int a = 0;
while (a < 3)
{
printf("A");
++a;
}
위의 코드는 int 형 변수 a가 3보다 작을때까지 'A'를 출력하는 코드입니다. printf()문 아래에 증감 연산자로 a를 증가시키므로, 결과적으로 'A'를 3번 출력하여 출력결과물은 'AAA' 가 되게 됩니다. 예를 하나 더 들어보겠습니다.
int a = 1;
while (a < 5)
a += a;
printf("a = %d", a);
변수 a의 값을 할당 연산자 '+=' 으로 자기자신을 계속 더하다가, 5보다 크면 빠져나가 출력하게 됩니다. 위의 코드상으로는 정화깋 3번 반복이 되며, 결과값은 8이 됩니다.
위의 예에서처럼 반복실행할 내용이 한 문장일때는 중괄호를 생략할 수 있습니다. 대부분의 경우 이처럼 생략이 가능하기 때문에 앞으로는 생략할 수 없는 것들만 따로 설명하도록 하겠습니다.
◆ do while문
do while문은 while문과 다르게, 조건 체크를 반복하려는 작업 아래에서 하게 됩니다.
do
{
반복 작업할 코드
} while (조건);
아래 예를 봅시다.
int a = 0;
do
{
printf("A");
++a;
} while (a < 3);
while문의 첫번째 예와 같은 코드입니다. 다만 조건을 아래에서 처리하기 때문에 a가 설령 3 이상이라도 printf()문을 한번은 실행하기 때문에 반드시 'A' 하나는 출력이 되게 됩니다. 프로그래밍을 할때 어떤 작업을 하려는지 생각해서 while문을 쓸지, do while문을 쓸지를 잘 판단하여 사용하시기 바랍니다.
또한 do while문은 {}를 생략할 수 없고, while 뒤에 세미콜론 ';' 을 빼먹으면 안된다는점 참고하시기 바랍니다.
◆ for문
for문은 while문에 증감연산까지 일괄적으로 가능한 반복문입니다.
fot (변수의 초기값; 조건; 변수의 연산)
{
반복 작업할 코드
}
예를 들어봅시다.
int a;
for (a = 0; a < 3; a++)
printf("A");
역시 맨 처음 while문의 예와 같은 결과입니다. for문 뒤의 괄호에 a의 초기값을 0으로 해서, a가 3보다 작을때까지 반복하며, a값을 1씩 증가시키라는 내용입니다. 여기서 ++a가 아닌 a++을 사용했습니다만 ++a를 사용해도 상관없습니다.
반복문은 조건을 이런식으로 하여 사용할 수도 있습니다.
while (1)
{
}
do
{
} while (1);
for (;;)
{
}
조건이 참일때 블럭안의 내용을 실행하는 것이므로 저렇게 조건에 '1'을 주게 되면, 별도로 빠져나오게 하는 코드를 만나지 않는 이상, 무한히 반복 작업을 하게 됩니다. 이를 '무한 루프' 라고 합니다. 이런 무한루프는 가급적 사용하지 않는 것이 애러방지에 도움이 되며, 사실상 프로그래밍 대부분은 저런 무한루프 없이 구현이 가능하니 되도록이면 조건을 잘 줘서 자연스럽게 반복문을 빠져나갈 수 있게 만드는 것이 좋습니다.
2. 적절한 반복문의 선택 방법
지금까지 세가지 반복문인 while문, do while문, for문에 대해 알아보았습니다. 이것들을 작업에 맞게 골라 쓸 수 있는데, 다음과 같은 특성에 맞게 선택하여 사용하면 됩니다.
while문
특정 조건이 맞을때만 반복 작업이 필요할때
do while문
처음 한번은 조건에 상관없이 반드시 실행되어야 할때
for문
정해진 일정 횟수만큼 반복 작업이 필요할때
대강 위의 기준에 제일 맞는 것을 선택하면 됩니다. 물론 절대적인건 아닌게, 조건문을 조합하면 while문으로 가능한 작업이 for문으로도 가능하고 그 반대도 되기 때문입니다. 많이 해보시면서 제일 편한 것을 선택하면 되겠습니다. 앞으로 강좌를 이어나가며 반복문은 많이 사용할 것이므로 그때마다 어떤 경우에 어떤 반복문을 사용하는지 주의깊게 보시면 되겠습니다.