[C언어-막코딩] 16장 반복문(WHILE문)

in #kr-dev5 years ago (edited)

[C언어-막코딩] 16장 반복문(WHILE문)



오늘은 반복문에서 WHILE문에 대해 알아보도록 하겠습니다. 지난 시간에 FOR문과 유사한 반복문입니다. 느낌 상으로 구분을 하자면 FOR문은 고정된 순차적 반복문이라면 WHILE문을 비고정된 가변적 반복문이라라고 생각하시면 됩니다. 즉, FOR문은 정해진 고정 횟수만큼 반복하지만 WHILE문은 정해진 횟수가 아닌 어떤 특정한 조건이 만족 할 때까지 횟수가 정해져 있지 않는 반복이라고 생각 하시면 됩니다.

그러면 WHILE문을 알아 볼까요.

1. WHILE문


While문은 아래 그림 처럼 명령문을 반복하는데 정해진 횟수가 아닌 조건식이 만족할 때까지 반복하는 문을 말합니다. 즉, 1번만 반복하고 빠져 나올 수 있고 n번까지 반복하고 빠져 나올 수 있습니다. 조건식에 만족할 때까지 반복 한다고 생각하시면 됩니다.


a2.jpg

느낌으로 위 그림 처럼 원 안에서 반복 동작을 하는데 해당 원을 벗어나기 위해서는 조건식이 거짓일 때 빠져 나오기 때문에 그 조건식이 원 테두리로 그 안에서 무한 반복으로 보시면 됩니다. 느낌만 지난 시간의 For문과 비교해서 생각하시면 됩니다.

그리고 While문에는 두가지 표현이 있습니다. while문과 do-while문이 있는데 구조는 아래와 같습니다.


a1.jpg

지난 시간의 For문과 이여서 반복문을 이해하는 차원으로 유사하게 표현 했습니다. i가 10일때까지 자연수를 더하여 sum에 저장한 표현입니다.

복습으로 for문은

for(i=0;i<=10;i++){
  sum=sum+i;
}

이걸 while문으로 표현 한 것이죠.

i=0;
while(i>=10){
  sum=sum+i;
  i++;
}

같은 동작의 반복문인 것이죠. i가 10일때까지는 참이기 때문에 while안의 명령들이 i가 11이 될때까지 반복하게 됩니다. i=0부터 10까지 더하는 1~10까지의 합을 구하는 코딩이 되는 것이죠. For문과 같죠.

while문과 do-while문의 차이는 while 먼저 조건식을 체크하는 것이고 do-while문은 먼저 명령문을 수행한 뒤 조건식을 체크하는 문입니다. 즉, do-while문은 무조건 1회 반복문을 수행 한다는 반복문이고 그냥 while문의 명령문을 수행 할 수도 있고 안할 수 도 있다는 문입니다.

어쩔 때 while문과 do-while문을 사용할까요. while문은 조건에 만족하지 않으면 굳히 명령어를 수행 할 필요가 없을 때 사용 하는 것이고 do-while문은 뭔지는 모르지만 뭔가 계산을 선행해서 처리해야하는 명령어들이 있을 때 먼저 수행 한 뒤에 그 결과를 조건식에서 체크하여 계속 더 계산을 할지 아니면 그냥 빠져 나올지 정하는 문에서 사용 한다고 생각 하시면 됩니다.

설명이 좀 애매한데 코딩으로 살펴 보도록 하죠.

2. 코딩


위 while문과 do-while문 예제를 실행해 보면 다음과 같습니다.

[소스]

#include <stdio.h>

int main(int argc, char *argv[]) {
    
    int i=0;
    int sum=0;
    
    while(i<=10){
        sum+=i;
        i++;
    }   
    printf("While문 : sum=%d \n",sum);
    
    i=0;
    sum=0;
    do{
        sum+=i;
        i++;
    } while(i<=10); 
    printf("do-While문 : sum=%d \n",sum);    

    return 0;
}   

[결과]
a3.jpg

이렇게 하고 넘어가면 안되겠지요.

while문과 do-while문의 느낌을 나누는 코딩을 해봐야 겠죠.

while문은 느낌
[소스]

#include <stdio.h>

int main(int argc, char *argv[]) {
    
    int i=0;
    int sum=0;
    
    while(sum<100){
        sum+=i;
        i++;        
    }
    
    printf("While문 : sum=%d, i=%d \n",sum, i);  

    return 0;
}   

위 코딩을 볼까요. 조건식은 방금 전 했던 while문과 do-while문은 지난 시간의 for문과 유사한 동작으로 for문에 가까운 코딩이였다면 이 코딩은 while문의 느낌의 코딩에 가까운 코딩으로 생각하시면 됩니다. 느낌이 잘 구분 안되실 수 있을 거에요.
자세히 보시면 i++의 1씩 증가는 동일 합니다. 조건식은 sum의 값을 비교하는 문장으로 while문은 i증가를 기준으로 순차적 고정된 느낌의 반복 횟수가 아닌 sum값이 도달할 때까지의 고정되지 않는 i증가의 반복을 하는 문입니다. 즉, while문은 뭔가에 도달할 때까지 계속 반복 처리 계산을 수행하는 문장에서 while문을 쓴다고 이해 하시면 될 거에요.

[결과]
a4.jpg

이해 하셨다면 do-while문의 느낌도 알아 보셔야 겠죠.

[소스]

#include <stdio.h>

int main(int argc, char *argv[]) {
    
    int val=0;
    int sum=0;
    
    do{
        scanf("%d",&val);
        sum+=val;   
        printf("sum=%d , val=%d\n",sum,val);        

    } while(val!=0);
    
    printf("do-While 종료! \n");
    return 0;
}   

위 코딩은 급조한 거라 엉성하지만 그래도 느낌은 do-while문을 잘 살렸습니다. 여기에서 무조건 입력을 1회 받는데 그 값이 0이 아닐 때 계속해서 받게 하는 반복문입니다. 프로그램이 수행 되고 무조건 입력을 받고 계산을 하도록 하는 곳에서 사용하는 문입니다. 코딩은 외부에서 입력된 수의 총합을 구하는 코딩입니다. 입력 된 값이 0이 아닌 모든 수의 합이기 때문에 0이 입력되면 while문을 빠져나오도록 표현 했습니다. 이처럼 외부로의 입력은 무조건 들어오는데 그 입력에 따라서 반복동작이 결정될 때 사용한다고 생각 하시면 될 거에요.

그러면 실행을 해볼까요.

[결과]
a5.jpg

마무리


아직은 초보분들은 그 느낌을 잘 이해가 안 가실 수 있지만 여러개의 for문과 while문과 do-while문의 예제를 연습하시다 보면 3개의 차이점을 이해 하실 수 있을 거에요.

그냥 지금은 for문의 원리로 while문과 do-while문을 이해하시면 됩니다.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

항상 드는 생각이었는데 codingman 님은 진짜 코딩강의 하시면 떼돈 버실 것 같습니다. ^^ 하하. 어린이에서 커버가능한 대학원 박사까지 과정 중에서 원하는 짚으셔서 하시면 진짜 끝장날 것 같아요. ㅎㅎㅎㅎㅎ

과찬이십니다.
예전에 공부했던 내용들을 잠결에 작성하고 자는 거라서 조잡한 즉흥적 post라 챙피하네요.
전하고 싶은 내용의 1/10도 못 전해서 아쉬울 따름입니다.

이정도가 1/10 정도면 세계정복 가능하겠습니다. ^^ 하하핳하핳. 정말 장난 아니셨군요. ㅎㅎㅎㅎ

감기 조심 하세요.. 감기에 몸살에 일 바쁘고 웹툰에 ... 정신을 못 차리겠군요..

요새 날씨가 변덕이 심해서 마지막 추위인 것 같은데 감기 걸리는 분들이 많은 것 같아요.
저도 최근 감기로 고생하다가 좀 나아졌네요.
감기가 한 일주일정도 가네요. ^^

Coin Marketplace

STEEM 0.35
TRX 0.12
JST 0.040
BTC 70884.24
ETH 3570.27
USDT 1.00
SBD 4.76