이번에는 저번 글 http://widevery.tistory.com/7 에 이어서 while문의 루프와 중첩에 대하여 알아 보겠습니다.





1. 무한루프


while문에서 while(조건식) 과 같이 조건식이 '참'인 경우 while문의 내용을 실행하고, 조건식이 '거짓'일 경우 while문을 종료하게 됩니다.


그렇다면 조건식이 '항상 참'인 경우에는 어떻게 될까? 라는 생각을 가져 볼 수 있습니다. 이와 같은 생각으로 다음과 같이 해볼 수 있습니다.



0을 제외한 나머지 값은 참으로 인식하니까 참으로 인식하는 값 중 대표적으로 많이 쓰이는 1을 조건식에 넣어서 실행 해볼까? 라는 생각을 가지고 실행하게 되면 위의 예제에서처럼 따로 멈춰주지 않는 이상 계속 실행을 하게 됩니다. ( Ctrl + C를 누르면 멈추게 됩니다.)


이렇듯 반복문의 탈출조건이 성립하지 않는 경우 무한루프를 형성한다고 합니다.


이러한 무한루프는 실수로 만들어지는 경우도 있지만, 의도적으로 만들어서 break문과 함께 사용하기도 합니다.

(break문은 추후 조건에 따른 흐름의 분기와 관련하여 내용을 다루면서 그 때 다시 다루도록 하겠습니다.)





2. while문의 중첩


while문의 중첩은 말 그대로 반복을 위해 사용한 while문 안에 while문이 존재하는 경우를 의미합니다.


다음 예제는 while문을 중첩시켜서 구구단 2~9단 까지 출력을 하는 예제인데, 해당 예제를 통해서 중첩된 while문의 코드 흐름을 이해하도록 하겠습니다.



위의 예제를 보시면 코드를 실행한 결과로 오른쪽에 구구단이 출력이 된 것과 해당 코드가 구구단을 출력하기 위한 코드라는 것을 확인 할 수 있습니다.


짧고 간단한 코드이지만 while문의 중첩을 모르는 상태에서 보게 될 경우 복잡해 보일 수가 있습니다.


우선 위 예제의 코드에서 다음과 같은 내용을 알 수 있습니다.


1) while문의 중첩

2) 원하는 결과의 출력을 위한 변수 초기화

3) while문의 조건 설정


이와 같은 내용들을 확인 할 수 있습니다.


먼저 while문에서 while(조건식) 의 '조건식'이 만족할 때까지 while문 내부에 있는 문장을 실행하는 것을 저번 글에서 알아 보았습니다.


그렇다면 while문의 내부에 while문이 있다면 while문 안쪽의 while문이 끝날 때까지 처음 작성한 while문은 계속 실행이 된다는 것을 알 수 있습니다.


이와 같은 내용을 바탕으로 위의 코드를 해석하면 첫 번째 while문의 조건이 i = 2 일 때 내부의 while문을 9번 실행하고, i가 하나씩 증가 되는 것을 알 수 있습니다.


i 값이 하나씩 증가하여 i 의 값이 9일 때까지 실행이 되고, i 가 10이 되면 while문을 실행하지 않고, while문을 종료 후 그 다음 문장을 실행하게 됩니다.


또한 위의 코드에서 첫 번 째 while문이 끝날 때까지 내부의 while문을 실행해야 되는데 9번째 줄에서 j = 1; 로 초기화를 시켜주는 이유는 초기화를 하지 않고 진행하게 될 경우 구구단을 정상적으로 출력하지 않게 됩니다.


초기화를 진행 해 주지 않으면 j의 값이 계속 10으로 지정 되어 있기 때문에 다음과 같이 실행 결과가 나오게 됩니다.



[구구단 출력 예제에서 곱해지는 값인 j 값의 초기화를 하지 않았을 경우]




또한 while문을 사용하지 않고 예제에 사용된 구구단 출력을 할 수도 있습니다.



[while문의 중첩을 활용하지 않고 출력을 한 경우]



위와 같이 효율이 떨어지게 됩니다.


따라서 반복문의 중첩을 자주 사용하게 됩니다.










이것으로 반복문 중 하나인 while문에 대하여 모두 알아 보았습니다.


다음 글에서는 반복문 중 하나인 'do~while문에 의한 문장의 반복'에 대하여 공부하고 글을 올리도록 하겠습니다.












'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 반복문 - for문 (1)  (0) 2017.01.12
C언어 반복문 - do~while문  (0) 2017.01.09
C언어 반복문 - while문(1)  (0) 2017.01.02
C언어 printf 함수 와 scanf 함수  (0) 2017.01.01
C언어 상수와 기본 자료형  (0) 2016.12.27

이번에는 C언어에서 반복 실행을 위해 사용이 되는 반복문 중 하나인 while문에 대하여 알아보도록 하겠습니다.




1. 반복문


반복문 : 하나 이상의 문장을 두 번 이상 반복 실행하기 위해서 구성하는 문장입니다.


반복문의 종류는 'while', 'do~while', 'for' 문이 있습니다.


우선 반복이 필요한 이유에 대해서 다음의 예제를 보도록 하겠습니다.



위 예제에서 확인 할 수 있듯이 반복해서 할 수 있는 작업을 하나씩 전부 작업 해 준다면 효율이 떨어지게 됩니다.

(예제에서는 10개의 문장으로 예를 들었지만 100개, 1000개 등 그 이상을 하게 될 경우 효율이 굉장히 나빠지게 됩니다.)


이렇듯 반복을 해야 할 경우 쉽게 해주는 것이 반복문입니다.





2. while문의 사용


이번 글에서는 반복문 중 하나인 'while문'에 대하여 알아 보도록 하겠습니다.


while이라는 단어를 검색해 보면 '~하는 동안' 이라고 되어 있습니다.


프로그래밍에서도 마찬가지로 while문은 '~하는 동안 반복해라' 라는 것을 의미합니다.


while문을 사용해 보도록 하겠습니다.


while문 사용은 다음의 예제를 통해 먼저 알아보고 진행하도록 하겠습니다.



위 예제와 위쪽 글의 주제에 사용 되었던 예제 사진과 비교를 해 본 결과 반복문을 사용할 경우 훨씬 효율적인 것을 알 수 있습니다.


반복문 중 하나인 while문을 사용하기 위해서 다음과 같은 사실들을 알 수 있습니다.


1) 반복을 하기 위한 조건 설정 ( 5번째 줄의 int num = 1;  /  7번째 줄의 while 다음에 있는 (num < 11)  /  10번 째 줄의 num++; )


2) 반복을 하기 원하는 문장 ( 9번째 줄의 printf 문장 )


실행 순서는 다음과 같습니다.


(1) 10번 반복 하고 싶으니까 10번 반복을 위해 count 해 줄 값인 1을 num 이라는 변수에 저장

(2) while문을 선언하고 10번 반복을 위해 num이라는 변수에 저장 되어 있는 값이 11 보다 작을 때까지 라는 조건 설정

(3) 반복을 실행할 문장 작성

(4) num이라는 변수에 저장 되어 있는 값을 1 증가 (이 때 num++ 문장으로 인하여 num 값은 2가 됩니다.)

    (또한 아직 num에 있는 값이 while문의 조건 (num < 11) 을 만족하기 때문에 return 0; 문장을 실행하지 않고 다시 while문을 실행하게 됩니다.

(5) (3) ~ (4) 를 계속 반복 하면서 num 값이 11이 되어서 다시 while문의 조건(num < 11)으로 가서 해당 조건이 만족하지 않을 경우 while문을 빠져나오게 됩니다.

(6) return 0; 실행 (프로그램 종료)


이렇듯 반복을 원하는 문장과 반복 하기 위한 조건을 설정을 하게 되면 해당 반복조건이 만족하지 않을 때까지 while문이 실행이 되고, 반복조건이 만족하지 않으면 while문을 종료하고 다음 문장을 실행하게 됩니다.





3. while문의 들여쓰기


들여쓰기와 관련하여 다음의 예제를 보고 진행하도록 하겠습니다.



[들여쓰기 하지 않았을 경우]




[들여쓰기를 한 경우]



위의 두 사진에서 알 수 있듯이 들여쓰기를 해도 되고, 하지 않아도 상관은 없습니다.


단지 들여쓰기를 하게 되면 가독성이 훨씬 좋아지기 때문에 보편적으로 들여쓰기를 해서 프로그램을 작성합니다.


들여쓰기의 기준은 보통 띄어쓰기(Space) 4회 또는 Tab을 사용합니다.


들여쓰기를 하실 때 띄어쓰기(Space)와 Tab을 혼용해서 사용하시는 것보다 하나로 통일해서 일관성 있게 하는 것이 좋습니다.

(실제로 저는 처음에 프로그래밍을 할 때 띄어쓰기(Space)와 Tab을 혼용해서 사용 했었는데 작성한 소스를 수정할 때 굉장히 불편함을 겪은 적이 있습니다.)





4. 반복문의 중괄호 { } 생략


int main(void) 함수에서도 중괄호 { } 를 사용하였는데 while문에서도 사용하니까 불편하다 라고 하실 수도 있습니다.


이와 관련하여 생략을 할 수 있는 경우가 있습니다.


실행할 문장이 한 줄이거나, 한줄로 표현이 가능한 경우 입니다.



위의 예제처럼 한 줄로 표현이 가능한 경우 중괄호 { } 를 생략할 수 있습니다.

(중괄호를 사용하지 않기 위해 일부러 한줄로 다 표현하는 경우 가독성이 굉장히 떨어지게 됩니다. 그러한 방법은 사용하지 않는 것을 권장합니다.)


또한 하나의 문장이어도 중괄호 { } 를 포함 할 수 있습니다.



위의 예제처럼 하나의 문장이지만 중괄호 { } 를 생략하지 않아도 아무런 이상이 없이 정상적으로 작동하는 것을 알 수 있습니다.







이것으로 반복문 중 하나인 while문의 첫 번째 Part에 관한 내용이 끝났습니다.


다음 글에서는 while문의 무한루프와 while문의 중첩에 대하여 공부하고 글을 올리도록 하겠습니다.











'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 반복문 - do~while문  (0) 2017.01.09
C언어 반복문 - while문(2)  (0) 2017.01.02
C언어 printf 함수 와 scanf 함수  (0) 2017.01.01
C언어 상수와 기본 자료형  (0) 2016.12.27
C언어 데이터 표현방식  (0) 2016.12.25

+ Recent posts