프로그래밍/C언어

c언어 - 반복분(for, while)

solution online 2023. 7. 28. 17:34
728x90
반응형

자, 이번 시간에는 반복문에 대해 알아보겠습니다.

 

제목에도 있다싶이 대표적으로 for, while 문이 있습니다.

 

각 반복문 사용법은 아래와 같습니다.

 

for문

for (초기화 ; 조건 ; 조건)

{

}

 

while문

while (조건)

{

}

 

단순하죠?

 

예제를 보시죠.

#include <stdio.h>

int main(void)
{
        int cnt = 0;

        for (cnt = 0 ; cnt < 5 ; cnt++)
        {
                printf("for: %d\n", cnt);
        }

        cnt = 0;

        while (1)
        {
                printf("while 1: %d\n", cnt);
                cnt++; // cnt = cnt + 1;

                if (cnt == 5)
                        break;

        }

        cnt = 0;

        while (cnt < 5)
        {
                printf("while 2: %d\n", cnt);
                cnt++;
        }

        return 0;
}

 

int cnt = 0;

cnt는 count의 줄임말 입니다. 이렇게 줄이는 것을 헝가리안 표기법이라고 하기도 하는데요.

헝가리안 표기법에서 정한 것을 쓰기도 하고, 그와 유사하게 많이 사용합니다 ㅎㅎ

 

정수형 변수 cnt에 0을 대입하여 초기화 했습니다.

변수명에서 유추가 가능해야 합니다.

아, cnt는 count의 줄임말이니 무언가 카운트할 때 쓰는구나. 라고 유추할 수 있습니다.

이처럼 변수명을 잘 만드는 것만으로도 개발자인 나도 그렇고 협업할 때도 큰 도움이 됩니다.

 

for (cnt = 0 ; cnt < 5 ; cnt++)

{
}

 

for문의 형태는 for (초기화 ; 조건 ; 조건) 이라고 했습니다.

반복문에 쓰기 위한 변수의 값을 초기화 해주는 부분이 '초기화' 입니다.

해당 부분은 생략이 가능합니다.

 

앞서 int cnt = 0; 으로 초기화 했기 때문에 생략 가능하지만 코드 분석시 확실하게 하기 위해 넣기도 합니다.

지금은 코드가 몇 줄 안되서 가독성에 문제는 없지만 차후 실전에서는 코드가 많기 때문에

for문에 사용되는 cnt의 초기값이 무엇인지 파악하기 위에 선언부분을 다시 찾아가야 하는 수고가 생깁니다.

그러니 나중을 위해서라도 습관을 들여놓는 것이 좋습니다.

 

조건 부분은 두 가지로 for을 반복 시키기 위한 최대 횟수를 정해주고

그 다음 조건은 cnt 변수를 증가시켜주는 조건을 넣었습니다.

 

해당 for문을 해석해보면 아래와 같습니다.

cnt에 0값을 넣어주고 cnt가 5보다 작을 때까지 for문을 실행해라.

for문을 다 실행하고 cnt값을 증가시켜 줘라

 

음?? 무언가 좀 이상한가요?

for문의 실행 순서를 보면 아래와 같습니다.

 

for (1 ; 2 ; 4)

{

    3

}

 

간략하게 1~4로 실행 순서를 표현했습니다.

초기화 먼저 되고 그 다음 첫 조건을 보고 조건이 맞으면 괄호 안에 코드를 실행하고 마지막에 두번째 조건을 실행합니다.

 

이렇게 cnt 값이 5가 될 때까지 실행하는 코드입니다.

 

반응형

 

while문은 두 가지를 준비했습니다.

두 가지 모두 같은 결과가 나오지만 코드는 조금 다릅니다.

 

while(1) 은 무조건 실행하라는 의미가 됩니다.

조건문이나 반복문에 1 이란 숫자는 참을 의미하고 모든 조건은 참일 때 동작하기 때문에

while(1)은 무조건 실행되게 됩니다.

그래서 괄호 안에 있는 코드 중 break;가 있는 것 입니다.

 

특정 조건이 맞으면 반복문을 빠져나오라는 뜻 입니다.

 

두번째 while은 while(cnt < 5) 입니다.

for문과 비슷하지요!? cnt가 5 미만일 때까지 동작하라는 뜻 입니다.

대신 cnt 값의 변화가 있어야 겠죠!?

만약 cnt 값의 변화가 없다면 해당 while문도 계속 참일 것이고 그러면 반복문을 빠져나오지 못하고 계속 실행하게 될 것 입니다.

 

주석을 달아 놓기는 했지만 cnt++ 에서 ++ 증가연산자로 해당 변수에 +1을 해주라는 뜻 입니다.

즉, cnt++ 은 cnt = cnt +1 과 동일합니다.

+2 시키고 싶다면 cnt = cnt + 2 라고 직접 코딩해야 합니다 ㅎㅎ

 

결과는 아래와 같습니다.

처음 초기화 시킨 0부터 4까지만 출력합니다.

모든 반복문에 5 미만일 때 까지만 실행하라는 조건을 주었기 때문입니다.

 

while문 시작 전에 cnt = 0; 을 한 이유는

for문에서 cnt를 증가시켜놨기 때문에 변화가 있어 조건 충족을 위해 0을 대입시켜놨습니다.

 

그러면 모든 반복문이 끝난 직후 cnt 값은 얼마일까요?

 

이건 직접 확인해 보시는 것이 재미있을 것 같습니다!? ㅎㅎ

728x90
반응형