brunch

매거진 Sinclair

You can make anything
by writing

C.S.Lewis

by Sinclair Feb 10. 2016

제어문과 반복문

그리고 프로그램은 계속된다 III




for문: 가장 일반적인 반복문  



for(초기식 ; 조건식 ; 증감식) {

    반복실행할실행문(들) ;

} // end for  



for문은 초기식으로부터 조건식이 참일 동안 증감식을 실행하며 반복합니다. 초기식은 for문에서 한 번만 실행합니다.


초기식 - > 조건식 -> 실행문 -> 증감식 -> 조건식 -> 실행문 -> 증감식 -> … ->조건식 순으로 실행합니다. 조건식에서 종료한다는 것을 기억하길 바랍니다.

for문은 일정하게 증가하는 배열이나 문자열 처리에 좋습니다.  


초기값이 외부에서 정해진다면 초기식이 없는 경우도 있습니다.  


for( ; 조건식 ; 증감식) {

    반복실행할실행문(들) ;

} // end for  



증감식을 실행문이 포함하고 있다면 증감식이 없는 경우도 있습니다.  


for( ; 조건식 ; ) {

    반복실행할실행문(들) ;

} // end for  



또한 무한 반복을 하려면 세가지 모두 없을 수도 있습니다.  


for( ; ; ) {

    반복실행할실행문(들) ;

} // end for   




while문: 요즘은 무한 반복이 대세  


과거의 프로그램은 프로그래머가 정해진 순서대로 실행하고 그냥 종료하는 것이 대부분입니다. 하지만 요즘은 프로그램이 마음대로 종료하는 경우는 어떤 상태를 보여주는 프로그램들(ls 나 dir 같은) 말고는 없는 것 같습니다.


while문은 조건식이 참일 동안 실행하는 반복문입니다. 조건을 먼저 확인하기 때문에 조건을 만족하지 않는다면 단 한번도 실행 하지 않을 수도 있습니다. 선조건 후실행 반복문이라고 말합니다. 조건식을 대표 참값인 1로 적으면 무한 반복문이 됩니다.  


while(조건식) {

    반복실행할실행문(들) ;

} // end while  



조건식에 대한 초기값은 반드시 while문 이전에 정해져야 합니다. 뿐만 아니라 while문 안에 조건에 대한 변환식이 없다면 의도하지 않은 무한 반복에 빠지게 됩니다. 그래서 가장 일반적인 while문은 다음과 같습니다.  


초기식 ;

while(조건식) {

    반복실행할실행문(들) ;

    변환식 ;

} // end while



while문은 for문으로 바꿔서 사용할 수 있습니다.  


for(초기식 ; 조건식 ; 변환식) {

    반복실행할실행문(들) ;

} // end for  



일반적인 while 무한 반복문은 이렇게 작성합니다.  


while(1) {

    반복실행할실행문(들) ;

} // end while   




do while문: 반드시 한번은 실행해야 한다면  


do while문은 while문과는 다르게 선실행 후조건 반복문이라고 합니다. 어떠한 경우에도 반드시 한번은 실행한 후에 조건을 확인합니다. 그러므로 입력 후에 입력 값에 따라 반복실행을 결정해야 하는 경우 유용합니다.  


do {

    반복실행할실행문(들) ;

} while(조건식) ; // 다른 반복문과 달리 반드시 semicolon을 적어야합니다.   





자, 이제 아주 간단하게(?) 0이 아닌 정수형 값이 입력 될 때까지 반복 입력 받는 것을 생각해보겠습니다.  


int data ;  

do{

    printf("%s" , "0이 아닌 정수형 값을 입력하세요... ") ;

    scanf("%d" , &data) ;

} while(!data) ; // 0만 거짓이라고 했습니다. 0이 아닌 값은 모두 참입니다.  



하지만 이것은 while문이나 for문으로 바꿔서 사용할 수 있습니다.  

while문을 사용하는 경우  


int data = 0 ;  

while(!data){ // 0이 아니면 모두 참이라고 했죠?

    printf("%s" , "0이 아닌 정수형 값을 입력하세요... ") ;

    scanf("%d" , &data) ;

} // end while  


int data ;  

while(1004){ // 0이 아니면 모두 참이라고 했죠?

    printf("%s" , "0이 아닌 정수형 값을 입력하세요... ") ;

    scanf("%d" , &data) ;

    if(data) break ;

} // end while  



for문을 사용하는 경우라면,  


int data ;  

for( data = 0 ; !data ;  ) {

    printf("%s" , "0이 아닌 정수형 값을 입력하세요... ") ;

    scanf("%d" , &data) ;

} // end for   



for문을 사용하느냐 while문을 사용하느냐 아니면 do while문을 사용하느냐는 프로그래머의 개인적인 취향입니다. 저야 개인적으로 while문을 가장 많이 사용합니다만, 사실 모든 프로그래머는 문제를 어떻게 얼마나 효율적으로 잘 해결하느냐에 초점을 맞춰야 합니다. 일반 사용자는 for문을 사용했는지 while문을 사용했는지 아님 do while문을 사용했는지는 관심조차 없습니다. 아니 알 필요도 없겠죠. 일반 사용자는 오로지 좀더 정확하게 좀더 빠르게 그리고 좀더 멋지게 해결되는 것에 높은 점수를 주는 것입니다. 부디 평소에 다양한 방법을 연구하고 여러 가지 다른 방법들을 테스트하기 바랍니다. 이러한 것들이 시나브로 쌓이면 어느 날 고수의 반열에 오르게 되는 것 입니다. 모방송국의 TV프로그램 중 생활의 달인을 보면 기본이 3년이고 보통은 10년 이상을 한 우물만 판 분들이 출연하는 걸 보면 제 자신이 부끄러워집니다.




    


Try and fail, but don't fail to try.
- John Quincy Adams

시도하고 실패하라, 하지만 시도하는데 실패하진 마라














#Sinclair #씽클레어 #싱클레어 #씽클레어도씨 #씨언어 #씨프로그래밍  #C언어 #Cprogramming #C_Programming #C #Programming #Clanguage #C_Language

매거진의 이전글 제어문과 반복문
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari