Prosto

for문(반복문) 이해, 예제 -C언어 본문

Programing/C Programing

for문(반복문) 이해, 예제 -C언어

Prosto 2016. 9. 15. 23:37

'FOR - 위한... 쉬운 반복작업을 위한다면? 배워보자'

 

프로그래밍에서 FOR문은 if문과 마찬가지로 중요한 역할을 하고 있습니다.

같은 혹은 유사한 작업을 할 때 사용되죠. ( 고객 10000명에게 똑같은 처리를 해야한다면? 머리아프겠죠?)

 

다시 게임으로 예를 들면, 어느 게임에서 이벤트로 플레이어들에게 모두 금화 5000을 준다고 해봅니다.

그렇다면 플레이어가 총 5만 명이라면요? 프로그래밍으로 처리하려고 할 때

일일이 하나하나 모두에게 주려니까 최소 5만 라인은 작성되어야 할까요?

이런 경우 for문과 같은 반복문은 빛을 발하는 것입니다.

 

즉, 반복되는 경우에는 이러한 똑같은 처리를 해라. 라고 만들 수 있는 것이 for문 입니다.

 

for문의 기본적인 형태를 보면 아래와 같습니다.

for(선언 및 초기화; 조건; 증감부 ){

  //실행내용(반복될 내용)
}

 

->아까 그 게임에서의 금화 5000증정 처리는 이런식으로 표현 되겠네요.

for(플레이어 0번부터; 플레이어 5만번까지; 한 명씩 증가 ){

   해당 플레이어번호에게 금화 5000 증정.
}

 

 

선언 및 초기화 부분에는 몇 번부터 시작할 것인가를 알려주는 곳이고,

조건 부분은 if문에서와 같이 조건이 만족하는지를 확인해보는 곳이고,

[ 그리고 그 조건이 맞다면 중괄호{  } 안의 내용들을 실행하게 됩니다. (조건을 만족하지 않으면 for문 종료됨) ]

증감부는 반복을 수행할 때 어떠한 간격으로 처리할지를 알려주는 곳입니다.

 

 

 

 

예를 들면 printf를 이용하여 "안녕하세요.\n"라는 문구를 출력하는데 이 처리를 총 10번 해야한다면

아래와 같이 for문을 사용하면 됩니다.

 

for(int i=0; i<10; i++){

    printf("안녕하세요\n");

}

 

 

그렇다면 조건을 비교하는 부분을 i<5로 바꾼다면 어떤 결과가 나올까요?

for(int i=0; i<5; i++){

    printf("안녕하세요\n");

}

 

 

 

그럼 이번에는 선언 및 초기화 부분을 int i=7로 바꾼다면 어떤 결과가 나올까요?

for(int i=7; i<10; i++){

    printf("안녕하세요\n");

}

 

 

 

두 변화 모두 "안녕하세요"라는 문장의 출력 횟수가 달라진 것을 알 수 있습니다.

이것으로 보아 선언 및 초기화 부분이나, 조건을 비교하는 부분이 변하면

프로그램 실행에 관계가 있다는 부분을 알 수가 있죠.

 

그렇다면 증감부를 바꾸면 어떻게 될까요?

음.. i++는 i=i+1이니 i=i+2로 바꿔볼까요?

for(int i=0; i<10; i= i+2){

    printf("안녕하세요\n");

}

 

 

 

 

이번에도 출력 횟수가 달라졌네요?

그렇다면 for문을 구성하는 세 부분은 모두 반복 작업을 하는데 큰 영향을 끼치는 것이네요.

 

for문이 어떻게 돌아갈까요?

어떤 순서로 반복 실행을 해줄까요?

우리는 이것을 알고 사용해야겠죠?

(조금만 더 자세히 들여다 봅시다.)

 

어떤 순서로 진행되는지 하나씩 설명드리겠습니다.

 

 

가장 먼저 for 바로 옆에 있는 ‘선언 및 초기화’입니다. int i=0; 이 부분이죠.

이 부분을 실행하여 일정 기준이 되는 수로 초기화해줍니다.

 

그 다음으로 보는 부분이 ‘조건 비교’입니다. i<100; 이 부분이죠.

이 부분을 실행하여 현재 조건을 만족하는지 확인합니다.

 

그리고 { }안의 실행내용들을 모두 실행합니다. 여기서는 printf()였죠?

 

 

실행내용을 모두 처리한 다음으로 보는 부분은 ‘증감부’입니다.

여기서는 i++ 이 부분이죠. (i= i+1)처리를 해준 후

 

다시 ‘조건 비교’부분으로 옵니다.

그 후 조건을 만족하면 또 실행 내용들을 처리해주고요.

그리고 다시 증감부를 거쳐 다시 조건 비교... 반복입니다.

 

정리하자면

선언 및 초기화 -> 조건 비교 -> {}내용 실행 -> 증감 -> 조건 비교 -> {}내용 실행 -> 증감 -> 조건 비교 ......

이렇게 조건 비교에서 만족하지 않는 경우가 나올 때까지 반복반복되겠네요.

 

이때 처음부터 조건 비교에서 만족하지 않는다면

선언 및 초기화 -> 조건 비교까지만 실행을 하고 for문이 종료되겠죠?

예를 들면 for(int i=0; i<0; i++){} 이런 경우죠. 처음부터 조건을 만족하지 못 했죠? i는 0이니까요.

 

반대로 조건이 영원히 만족해버리면?

무한 루프에 빠지는 것이죠. 계속 for문 속을 못 나오고 반복 반복하고 있는 것입니다.

예를 들면 for(int i=0; i<10; i--){} 이런 경우죠. 증감부를 지나도 i는 계속 작아지기만 하니까요.

 

 

 역시 백문이 불여일견 백견이 불여일행이죠.

새로운 예제를 직접 실행해보시길 바라겠습니다.

 

 

예제) 1부터 10까지 숫자를 출력해주는 프로그램입니다.

어떻게 1부터 10까지 나왔는지 알겠나요?

간단하게 3이 출력되는 부분까지만 설명해드리겠습니다.

int main (void)바깥쪽은 생략하고요.

 

가장 먼저 프로그램이 시작되니 for문을 만납니다.

 

거기서 1번 처리가 선언 및 초기화

int형 변수인 i가 1로 선언 및 초기화 됐네요.

 

그 다음이 조건 비교 i<=10으로 i가 10 이하인지 확인하죠. 1 <= 10 조건 만족이네요.

 

조건이 만족하니

{ } 안의 내용인 printf("%d\n", i);가 실행됩니다. 여기서 1이 출력되었네요.

%d로 i가 몇인지 출력하고, \n으로 줄바꿈을 해줬죠.

 

그리고 { }안의 내용이 모두 끝났으니 증감부로 넘어갑니다.

i++로 i를 1 증가시켰죠.

 

그 다음으로 i<=10을 또 비교합니다. 이때는 i가 2이지만 2 <= 10 조건 만족이죠.

 

조건이 만족하니

{ } 안의 내용인 printf("%d\n", i);가 실행됩니다. 여기서 2가 출력되었네요.

 

그리고 { }안의 내용이 모두 끝났으니 증감부로 넘어갑니다.

i++로 i를 1 증가시켰죠.

 

그 다음으로 i<=10을 또 비교합니다. 이때는 i가 2이지만 3 <= 10 조건 만족이죠.

 

조건이 만족하니

{ } 안의 내용인 printf("%d\n", i);가 실행됩니다. 여기서 3이 출력되었네요.

 

이렇게 쭉 반복작업을 해나갑니다.

마지막에 i가 증가되어 11이되면 11 <= 10 비교에서 조건 만족이 아니니 for문이 종료됩니다.

 

대략적인 순서를 알겠나요?

그림으로 보면 아래와 같습니다.

 

어떻게 이해에 도움은 됐나요?

실제로 문제를 풀어보며 for문을 더 이해하고 실력을 쌓아봅시다.

 

문제1. for문을 이용하여 1부터 10까지의 합을 출력하는 프로그램을 만들어보시오.

 

(출력 결과 예)

 

문제2. for문을 이용하여 50부터 1000까지의 합을 출력하는 프로그램을 만들어보시오.

 

(출력 결과 예)

 

 

문제3. for문을 이용하여 1부터 100까지의 홀수들의 합을 출력하는 프로그램을 만들어보시오. (힌트 : 증감부)

 

(출력 결과 예)

 

 

문제4. for문 내에 scanf를 이용하여 총 5번 숫자를 입력받고, 그 숫자들의 합을 구하는 프로그램을 만들어보시오.

 

(출력 결과 예)

 

 

 

 

결과는 모두 나왔나요?

프로그램 실행은 잘 됐나요?

그럼 이제 제가 작성한 코드와 실행 결과를 올리겠습니다.

비교해보고 참고하세요.

 

-1번 문제-

 

 

-2번 문제-

 

 

-3번 문제-

 

 

-4번 문제-

 

 

여기까지 for문에 대하여 알아봤습니다.

for문은 반복문 중에서 가장 많이 사용되는 함수입니다.

사실 반복문에는 while문과 do while 등이 존재하는데

이는 다음에 살짝 다뤄보도록 하겠습니다.

 

질문은 댓글이나 메일로 따로 연락주시면 시간되는 때 답변드리겠습니다. ( 연락 )

 

프로그래밍 작성 요령과 for문 이해에 도움이 되었다면 좋겠네요.

 

 

 

Comments