Prosto

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

Programing/C Programing

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

Prosto 2016. 9. 17. 08:46

'WHILE - 까지.. 일정  조건이 만족할 때까진 반복!'

 

프로그래밍에서 while문은 반복문의 가장 기본입니다.

일정한 조건이 만족하는 동안 계속 반복하는 함수죠.

for문을 가장 많이 사용하지만 기본 형태이기에 알아두어야겠죠?

(while문도 경우에 따라 자주 이용하기도 합니다.)

 

 

게임으로 예를 들면, 어느 게임에서 독에 맞으면 1초에 체력을 5씩 감소한다고 해봅니다.

그렇다면 플레이어가 독에 걸려서 체력이 1이상이라면 체력이 일정시간 동안은

계속 닳아야겠죠?

이런 경우 while문을 이용하면  수월하게 반복 작업을 처리해줄 수 있습니다.

 

즉, 특정 조건에 만족하는경우 반복된다면 이러한 처리를 해라. 라고 만들 수 있는 것이 while문 입니다.

(while문은 반복문의 기본이니 while문으로도 for문은 만들 수 있습니다.)

 

 

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

while( 조건 ){

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

 for문보다 훨씬 간다하죠? 어떻게보면 if문과 비슷한 구조를 가지고 있고요.

 

->아까 그 게임에서의 체력 5 반복 감소 처리는 이런식으로 표현 되겠네요.

while( 체력>0 ){   //체력이 1 이상.

   체력 -= 5;

   시간 지연 1초;   //1초 후에 또 감소하기 위하여 딜레이 줌.

}

 

while문의 경우 조건 부분이 만족하는 한 계속 반복합니다.

    - while(항상 만족하는 조건){ }으로 소스를 작성하면 무한루프문이 만들어지는 거죠.

 

예를 들어 while문으로 사용자에게 입력을 0을 받기 전까지

입력을 받을 때마다 "안녕하세요"라는 문구를 출력한다면

이런식으로 만들어지겠네요.

 

int selectNum;

scanf("%d", &selectNum);

while(selectNum != 0){

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

    scanf_s("%d", &selectNum);

}

 

 

프로그램 자체는 입력 ->(조건 확인 후 )-> 출력 -> 입력 ->(조건 확인 후 )-> 출력 -> ...의 반복이죠.

여기서 조건 확인 부분이 while의 괄호 안입니다. 그 조건이 0이 아닌 경우면 출력과 입력을 다시 받는 거죠.

 

그렇다면 조건 부분을 selectNum == 0으로 바꾸면 어떻게 될까요?

int selectNum;

scanf("%d", &selectNum);

while(selectNum == 0){

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

    scanf_s("%d", &selectNum);

}

 

 

 

이번에는 조건 부분을 selectNum >= 0으로 바꾸면 어떻게 될까요?

int selectNum;

scanf("%d", &selectNum);

while(selectNum >= 0){

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

    scanf_s("%d", &selectNum);

}

 

 

 

출력 결과를 보면 어떠한 변화가 있는지 아시겠나요?

조건에 따라 어떤 때는 0이 아니기만 하면 반복을 하고

어떤 때는 0이여야 반복을 하고

또 어떤 때는 0이상이면 반복을 하죠?

 

이렇게 조건을 하나 준 후 그 조건이 만족하는 한 계속 반복해주는 것이

바로 while문입니다!

 

그러면 마지막으로 우리가 while문으로 for문을 만들어 본다면 어떤 형태인지

확인을 해보고 갑시다.

먼저 for문으로 printf("안녕\n");을 10번 찍는다고 하면 이렇습니다.

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

    printf("안녕\n");

}

그렇다면 while으로 for문과 같이 만들면 아래의 형태입니다.

int i=0;

while(i<10){

    printf("안녕\n");

    i++;

}

어떻게 정말 같은 순서로 처리를 해주는 것 같나요?

이렇듯 for문, while문 어느쪽이든

제대로 이해한다면 반복문은 잘 사용하실 수 있을 것입니다.

 

 

그럼 이제 문제를 풀어보시면 좋을 것 같네요!

 

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

(단, 출력 결과를 참고하여 현재 카운팅 중인 수와 sum을 표시해주세요.)

 

(출력 결과 예)

 

 

문제2. while문을 이용하여 입력받은 숫자가 0보다 크다면 2로 나눌 때마다 어떤 수가 나오는지 출력하는 프로그램을 만드시오.

(정수형으로 나머지 없이 몫만 출력하면 됩니다. 출력 결과를 참고하세요.)

 

(출력 결과 예)

 

 

문제3. while문을 이용하여 입력한 숫자를 모두 더해주는 프로그램을 만들어보시오.

(단 0을 입력시 입력을 그만 받고 합계를 나타내세요. - 출력 결과를 참고하세요.)

 

(출력 결과 예)

 

 

문제4. (문제3을 업그레이드)while문을 이용하여 입력한 숫자들의 평균을 구해주는 프로그램을 만들어보시오.

(단 0을 입력시 입력을 그만 받고 평균을 나타내세요. - 출력 결과를 참고하세요. 평균=실수로)

 

(출력 결과 예)

 

 

문제들을 가능하면 while문의 의미가 있는 문제로 만들었습니다.

결과는 모두 나왔나요?

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

비교해보고 참고하세요.

 

-1번 문제-

 

 

 

-2번 문제-

 

 

 

-3번 문제-

 

 

 

-4번 문제-

count를 통해 차곡차곡 입력된 개수를 늘려가고

마지막 결과에 합산한 sum/count를 하여 구한 것을 확인할 수 있습니다.

 

여기서 (float)sum/count 부분은 형변환을 사용했습니다.

sum을 잠시 float형으로 변환하여 사용했죠.

그렇기에 float / int의 결과로 실수가 나온 것입니다.

 

 

 

 

지금까지 while문에 대하여 알아봤습니다.

어떤 것인지부터 예제, 문제까지 풀어봤습니다.

while문의 이해에 도움이 좀 됐다면 좋겠습니다.

 

 

+ 음.. 그러면 잠깐 do while문에 대해서도 듣고 갈까요?

do while문은 while문과 굉장히 유사하지만 약간의 차이점이 있습니다.

 

'do! 일단 한번 해라. 그리고 while문을 진행하라'는 의미의 do while문입니다.

위의 말 그대로 일단 한번은 { } 중괄호 안의 내용을 실행하고,

 그 후 while 조건을 확인하고 반복하는 것입니다.

 

(do while문에 대하여 자세히 보려면 여기를 누르면 새창이 열립니다.)

 

 

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

 

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

 

Comments