오버헤드프레스 2023. 3. 19. 17:08

일정 조건을 만족하는 동안 같은 실행문을 반복하는 게 반복문이다.

반복문에는 항상 반복의 조건을 정의하는 조건식과 조건을 만족했을 때 실행하는 문장이 있으며,

조건식의 위치에 따라 크게 3가지 반복문으로 구분할 수 있다.

while (조건식)          for (초기식; 조건식; 증감식)      do
{                      {                                 {
    실행문;                 실행문;                            실행문;
}                      }                                  }while(조건식);

 

 

while문

while문은 조건식을 먼저 검사하고 조건식이 참인 동안 실행문을 반복한다.

예제로 알아보자.

 

#include <stdio.h>

int main(void)
{
	int a = 1;        //변수를 선언하고 곱셈을 하기 위해 1로 초기화 
	
	while(a < 10)     //a가 10보다 작으므로 조건식은 참 
	{
		a = a * 2;    //a에 2를 곱해 다시 저장 
		
	}
	
	printf("a : %d\n", a);   //a값 출력 
		 
	return 0;
}

while문을 반복하며 a < 10. 즉, a = 8인 값이 들어가 a = 16 값이 나온다.

 

중괄호의 사용법과 들여쓰기

모든 반복문은 실행문을 중괄호로 묶어 반복할 부분을 표시한다.

만약 실행문이 한 문장이면 중괄호를 생략할 수 있다.

 

 

for문

while문과 비슷하게 for문도 반복문이다. 다만 for문은 실행문을 원하는 횟수만큼 반복할 때 사용한다.

예제로 알아보자.

 

#include <stdio.h>

int main(void)
{
	int a = 1;        //변수를 선언하고 1로 초기화 
	int i;            //반복 횟수를 세기 위한 변수 
	
	for(i = 0; i < 3; i++)  //i는 0으로 초기화된 후에 3보다 작은 동안(i < 3) 
	{                       //하나씩 증가하면서(i++) 
		a = a * 2;          //실행문을 실행 
	}
	printf("a : %d\n", a);  //for문을 빠져나오면 a값 출력 
		 
	return 0;
}

초기식(i = 0;)은 한 번만 실행된다. 조건식(i < 3;)이 참이면 반복할 문장 실행 (a = a * 2)

반복할 문장 실행 후 증감식으로 올라간다(i++). i를 1 증가시키고 다시 조건 검사.

이를 반복하며 i < 3인동안 반복된다.

 

 

for문 사용 시 주의점

1. 초기식, 조건식, 증감식은 반복 횟수를 알기 쉽게 작성한다.

2. 반복 횟수를 세는 변수를 반복문 안에서 바꾸지 않는 것이 좋다.

 

 

do ~ while문

while문, for문은 조건식을 먼저 학인하는 반면 do ~ while문은 일단 반복할 문장을 수행한 후에 조건식을 검사한다.

예제를 통해 알아보자.

 

#include <stdio.h>

int main(void)
{
	int a = 1;        //변수를 선언하고 1로 초기화 
	
	do                //반복문 시작 위치 
	{
		a = a * 2;     //a의 값을 2배로 늘린다. 
    } while(a < 10);    //a가 10보다 작으면 a = a *2를 반복 
    
	printf("a : %d\n", a);  //반복이 끝나면 a값 출력 
		 
	return 0;
}

int a = 1;로 a를 1로 초기화한 후 반복문을 시작한다.

1, 2, 4, 8일 때 반복할 문장을 실행하고 마지막 실행한 후에 a가 16이 되면서 반복을 끝낸다.

 

 

중첩 반복문

중첩 반복문은 반복문 안에 실행할 문장으로 반복문이 포함된 것이다.

별 그리기 예제로 알아보자.

 

#include <stdio.h>

int main(void)
{
	int i, j;             //반복 횟수를 세기 위한 제어 변수
	
	for(i = 0; i < 3; i++)  //i가 0부터 2까지 증가하면서 3번 반복
	{
		for(j = 0; j < 5; j++)  //j가 0부터 4까지 증가하면서 5번 반복
		{
			printf("*");        //별 출력문
		}
		printf("\n");          //별을 5번 출력한 후에 줄을 바꾼다.
	 } 
		 
	return 0;
}

i = 0;일 때, *이 5개 출력되고 printf(\n);에 의해서 줄 바꿈이 된다.

i = 1;이 되고 다시 *이 5개 출력되고 printf(\n);에 의해 줄바꿈이 된다.

마지막으로 i < 3이기에 i = 2;를 마지막으로 *이 출력되고 반복문은 끝이 난다.

 

 

break와 continue 분기문

break는 반복문 안에서 반복을 즉시 끝낼 때 사용된다. 

예제를 통해 break의 사용법을 알아보자.

 

#include <stdio.h>

int main(void)
{
	int i;                     //반복 횟수를 세기 위한 제어 변수 
	int sum = 0;               //1부터 10까지의 합을 누적할 변수 
	
	for(i = 1; i <= 10; i++)   //1부터 10까지의 합을 누적할 변수 
	{
		sum += i;              //i값을 sum에 누적 
		if (sum > 30)          //누적한 값이 30보다 크면 반복문을 끝낸다. 
		break;
	}
	printf("누적한 값 : %d\n", sum);
    printf("마지막으로 더한 값 : %d\n", i); 
	return 0;
}

만약 if(sum < 30)이 없었다면 1~10을 전부 더한 값이 나왔을 것이다. if break를 사용해 for문 하나만 탈출했다.

while(조건식)
{
    ....
    if(조건식)
    {
        ....
        break;
    }
}

만약 위처럼 for문 없이 진행된다면 반복문 블록 전체를 탈출한다.

 

그러나 switch ~ case문의 블록 안에서 break를 사용하면 switch ~ case 블록만 벗어난다.

 

continue

continue는 반복문의 일부를 건너뛴다.

예를 들어 3의 배수를 빼고 1부터 100까지의 합을 구할 때 효과적으로 사용할 수 있다.

for(i = 1; i <= 100; i++)
{
    if((i % 3) == 0)
    {
        continue;
    }
    sum += i;
}

i가 3의 배수면 sum += i 문장을 건너뛰고 블록 끝으로 간 후에 다시 반복합니다.

 

for문과 달리 while문에서 continue를 사용하면 다음 실행위치가 조건식이 된다.

i = 1;
while(i <= 100)
{
    if((i % 3) == 0)
    {
        continue;
    }
    sum += i;
    i++
}

위 코드에서는 i가 3일 때 증감식 i++를 건너뛰므로 while문의 조건식은 계속 참이 된다.

즉, 무한 반복을 한다.

 

반복문은 이것으로 마무리하겠다.