프로그래밍 언어/C언어_기초 프로그래밍

[ C언어 기초 ] 6. 반복문

딩드 2024. 9. 16. 20:33
반응형
  • 반복(iteration) : 같은 처리 과정을 되풀이 하는 것.

- 반복문이 없으면 비슷한 코드를 여러 번 작성해야 하므로 코드가 복잡해지고 길어지고 유지보수가 어려워진다.
 
- 반복문의 종류
 
   1. while 문(조건 제어 반복) : 조건이 만족되는 동안에는 반복을 계속하는 구조.
      - 미리 반복 횟수를 알 수 없는 경우에 사용.
      - 조건식이 참(true)인 동안 코드 블록을 반복적으로 실행.
      - 기본 구조 :
      while ( i <10 )
      {
           printf("Hello World! \n");
      }
         - 위의 구조에서, while 옆 괄호 () 안에 있는 것은 조건식, while 아래 중괄호 {} 안에 있는 문장은 반복 문장이다. 또한 i는 루프제어 변수.
      - 조건식이 참(true)이면 중괄호 {} 안에 있는 코드 블록을 실행하고 다시 조건을 검사. 조건식이 참이 아니면(거짓, false) while문을 빠져나간다.
 
   2. for 문(횟수 제어 반복, for 루프) : 정해진 횟수만큼 반복하는 경우에 사용.
      - 미리 반복 횟수를 알 수 있는 경우에 사용.
      - 초기식(initialization), 조건식(expression), 증감식(increment)의 3부분으로 구성됨. 3부분은 세미콜론으로 분리되어 있음
         ex) for( i=0 ; i<5 ; i++ )
               {
                     printf("Hello World! \n");
               }

         에서, i=0은 초기식, i<5는 조건식, i++는 증감식이다.
        - for 문에서 초기식은 가장 먼저 실행되고 딱 한 번만 실행됨. 이어서 조건식이 검사되며, 조건식이 참이면 루프가 실행됨. 루프의 실행이 끝나면 증감식이 실행됨. 이어서 다시 조건식이 검사됨. 한 번이라도 조건식이 거짓이면 바로 for 문을 벗어나게 된다.
         - 초기식 : 반복 루프를 시작하기 전에 한 번만 실행됨. 주로 변숫값을 초기화하는 용도. int i=0;과 같이 제어 변수를 선언도 가능.
         - 조건식 : 반복의 조건을 검사하는 수식. 이 수식의 값이 거짓이 되면 반복이 중단됨. 이 수식은 반복을 하기 전에 계산됨.
         - 증감식 : 한 번의 루프 실행이 끝나면 증감식이 실행됨.
         - 초기식, 조건식, 증감식은 생략 가능. 또 반복되는 문장이 하나이면 중괄호도 생략 가능.
      - 주의할 점 : 반복되는 문장이 2줄 이상이면 중괄호를 사용하여 묶어주기. 조건식은 참, 거짓을 판별 가능한 수식이면 어떤 것이던지 가능하며 논리 연산자를 이용하여 여러 가지 조건을 결합도 가능. 초기화 수식에서는 콤마 연산을 사용하여 2개 이상의 변수를 초기화시킬 수도 있음. for 문의 3부분이 전부 비어있으면 루프가 무한히 반복됨(중지하려면 Ctrl+C를 눌러야 함). 증감식에서는 주로 증가 수식이 많이 이용되지만, 때에 따라 감소 수식도 사용됨.while 문이나 for 문에서 만약 반복 처리할 내용이 없다면 NULL 문장을 사용하는 거도 가능.

참고) 프로그래밍에서 반복은 흔히 루프(loop).라고 한다. 프로그램이 반복할 때 이전 단계로 되돌아가는데 이것이 동그라미를 그리는 것처럼 보이기 때문이다.

참고) 엠베디드 시스템의 경우, 여러 이유로 예전 버전의 C 컴파일러를 사용하는 경우가 흔하기 때문에, 가급적 for 루프 안에서 변수 선언을 하지 않는 것이 좋다.

참고) Sleep()는 밀리 초 동안실행되는 프로그램을 일시적으로 중지시키는 함수로,  <windows.h> 헤더파일에 정의되어있다. 예를 들어, 프로그램을 1초 동안 재우고 싶으면 Sleep(1000);을 쓰면 된다.
참고) system("cls");는 화면을 지우는 함수로, cls는 clear screen의 약자이고, <stdlib.h> 헤더파일에 정의되어있다.

  • do-while 문

- while 문과 비슷하나 반복 조건을 루프의 처음이 아니라 루프의 끝에서 검사한다는 것이 다르다.
- 구조 :
do
{
     printf("Hello World! \n");
     i++;
} while( i < 10 );

   - 조건식은 참, 거짓을 가릴수 있는 수식이면 되고 반복되는 문장은 단일문 또는 복합문일 수 있다. 맨 끝에 세미콜론을 붙여야 한다는 것을 주의.
- while 문과 다른 점은, 반복 문장이 적어도 한 번은 실행된다는 점이다. 따라서 do...while 문은 반복 문장이 적어도 한 번은 실행되어야 하는 경우에 사용하는 것이 가장 바람직하다. ex) 사용자로부터 데이터를 받은 후에 처리해야 하는 경우 - 메뉴를 출력 후 사용자의 입력을 받는 부분에 많이 사용.

  • 중첩 반복문(nested loop) : 반복 루프 안에 또 다른 반복 루프가 있는 것.

- 외부에 위치하는 반복문을 바깥쪽 반복문(outer loop)이라고 하고 내부의 반복문을 안쪽 반복문(inner loop)라고 한다. 안쪽 반복문은 바깥쪽 반복문이 한 번 반복할 때마다 새로 실행된다.
- 주의할 점은, 각각의 반복문을 제어하는 변수가 달라야 한다는 점. 만약 같은 변수가 사용되면 논리적 오류 발생 가능.

  • 무한 루프, break, continue

- break 문 : 반복 루프를 벗어나기 위해 사용. 반복 루프 안에서 break 문이 실행되면 반복 루프는 즉시 중단되고 반복 루프 다음에 있는 문장이 실행된다.
- continue 문 : 현재 수행하고 있는 반복 과정의 나머지를 건너뛰고 다음 반복을 시작하게 만든다. 반복 루프에서 continue 문을 만나게 되면 continue 문 다음에 있는 후속 코드들은 실행되지 않는다.
- 무한 루프(infinite loop) : 조건 제어 루프에서 프로그램이 무한히 반복하는 경우.
   - 무한 반복이 발생하면 프로그램을 빠져 나올 수 없기 때문에 문제가 되지만, 중간에 빠져나가는 조건을 주면 문제가 되지 않는다.
   -  신호등 제어 프로그램 같은 경우, 무한 반복하여야 한다.
   - 형태 :
   while (1) {
          if (조건)
                      break;
          if (조건)
                      continue;
          }

   - while  ((x%3 == 0) || (x < 0)) { ~ } 보다 while (1) {   if (x%3 == 0) break;   if (x<0) break; ~ }처럼, while 루프의 조건문을 만드는 것보다, 무한 루프를만들고 그 안에서 루프를 벗어나는 조건을 적어주는 편이 이해하기 쉽다.
  

반응형