티스토리 뷰

C언어

[4] C언어 반복문

Modification 2018. 3. 25. 00:30

안녕하세요? 최근 한 달동안 학교 때문에 바빴던 Modification입니다. 그동안 글을 못 올린 점 죄송합니다. 앞으로 한 달에 한 개씩 올라올 것 같은데, 그 대신 분량은 많을 겁니다. 방학에는 많이 올릴 수 있도록 해볼게요!! 이번에 준비한 글은 반복문에 관련된 겁니다. 프로그램은 용량이 작아야 좋습니다. 그러기 위해서는 최대한 불필요한 코드들을 줄이고, 반복적인 코드들은 '반복문'을 써야 합니다. 그러면 시작하겠습니다.


(1) for 문


for문은 반복문의 코드들 중 대표적인 코드입니다. 형식은 대략 이렇습니다.


int i;

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

{

코드

}


그러면 하나 하나 살펴봅시다. 


i=0은 이 반복문에서 코드의 끝에 관여할 변수를 초기화시킨 것입니다. 그리고 i<5는 i<5일 때까지, 즉, i가 5보다 작을 때까지 이 코드를 반복한다는 것입니다. 만약 i가 5가 된다면 그 코드를 실행하지 않습니다. 마지막 i++은 제가 원래 예전에 변수 설명 하면서 했어야 했는데, 안 한 겁니다.  간단하게 설명하자면 i의 값을 1만큼 키우는 코드입니다. for에서 말고 그냥 코드에서 i++;라고 치면 i의 값이 1 커집니다.뭔가 이해가 잘 안될 것 같은 설명인 것 같아서 예제를 만들어봅시다!


저는 이렇게 코드를 작성해 보았습니다. main 앞에 쓴 void는 안 쓰셔도 됩니다. 저는 jungsoo의 값을 0으로 잡고 5가 될때까지 반복하라고 했습니다. 그리고 이렇게 jungsoo를 반복할 코드 내에서도 써도 됩니다. 그리고 jungsoo +1이라고 쓴 것은 %d에 jungsoo의 값 + 1의 값을 넣기 위해서입니다. 왜냐하면 jungsoo는 0이잖아요. 실행시켜 보면 이렇게 됩니다.

이를 통해 for문의 처리 순서를 알 수 있습니다. jungsoo=0이라는 코드를 1번째로 실행하고, 그 다음 아래 코드를 반복하겠죠.

2. jungsoo<5라면 printf(""); 문을 실행한다.

3. jungsoo++을 실행한다.

4. 다시 2로 돌아간다. 그런데 만약 jungsoo<5가 아니라면 for문의 코드를 종료한다.


여기서 끝이 아닙니다. 이렇게 바꾸면 어떻게 될까요?

여기서 모르는 코드가 있을 겁니다. 바로 jungsoo+=2입니다. 이것도 옛날에 썼어야 하는데 안 쓴 건데, 복합대입연산자라고, 있습니다. 해석하면 jungsoo의 값을 2만큼 키우는 코드입니다. 이러면 3번만 반복 되겠죠? 그러면 이걸로 for문은 끝내죠.


(2) while 문


while문은 어떻게 보면 가장 심플한 제어문입니다. 기본적인 while문은 이렇습니다.


int i;

i=0;

while(i<5)

{

코드

}

이것도 for문과 비슷하지만 한 가지 다른 점이 있습니다. 바로 i의 값 지정과 i의 값을 변화시키는 코드가 없는 것이죠.  한 번 이렇게 작성해보았습니다.

이렇게 하면 어떻게 될까요? 아래처럼 됩니다.

만약 이렇게만 한다면 i의 값에 변동이 없기 때문에 무한 반복이 될 수도 있습니다. 그러면 이것은 어떻게 해결할 수 있을까요? 의외로 간단합니다. 코드부분에 i++; 이나 i+=0; 같은 대입연산자들을 쓰면 됩니다. 예제를 봅시다. 

이렇게 jungsoo++;를 추가시켜 한 번 반복할 때마다 jungsoo의 값을 1씩 키우도록 했습니다. 그러면 아래처럼 됩니다.

여기서 순서를 정리하자면

1. while문이 나오기 전에 변수의 값 지정

2. 만약 jungsoo<5라면 printf문과 jungsoo++를 실행

3. 다시 2로 돌아가는데 jungsoo<5가 아니라면 코드 종료


자, 그러면 while문도 어느 정도 된 것 같으니, while의 형제를 만나보도록 하죠. 


(3) do ~ while문


do~while문은 while문이랑 글자가 비슷합니다. 하지만 헷갈리면 안되요. 헷갈리면 한 번 더 실행됩니다. 비교하면서 설명해드릴게요. 일단 기본적인 틀은 이렇습니다.


int jungsoo=0;

do

{

코드

} while(jungsoo<0);


여기서 주의하실 것이 있습니다. 꼭 맨 마지막에 ;를 붙여주세요. 왜냐하면 딱 보시면 do는 동사이잖아요, 그러니까 코드를 실행한다는 코드이죠. 따라서 일반 코드들처럼 ;를 붙여줘야 합니다. 그럼 차이점을 알아봅시다. 차이점은 순서가 다르다는 겁니다. do-while문은 먼저 코드를 실행하고 그 후에 조건을 확인합니다. while문은 이렇습니다.

이렇게 while문을 작성해보았습니다. 실행하면 어떻게 될까요? 당연히 jungsoo는 이미 0보다 작지 않으니 당연히 코드는 안 실행하겠죠? 이렇게 됩니다.

이렇게 코드가 실행이 안 됩니다. 그러면 과연 do~while문은 어떻게 될까요?

이렇게 작성하면 아래처럼 됩니다.

보시면 코드가 이렇게 됩니다. 일단 printf문부터 무조건 실행하고 조건을 확인해보니 아니어서 멈춘 것입니다. 일단 첫 번째는 아닌지 맞는지 확인도 안 하고 진행하는 것이죠. 따라서 do~while문은 최소 1번은 실행이 됩니다. 

이것을 보면 순서는 이렇다는 것을 알게 되겠죠?

1. 조건을 확인 하고 일단 무조건 코드 실행부터 한다.

2. 조건을 확인하고 더 반복할지 안 할지 결정한다.


(4) 1, 0

조건 부분에 1이상의 수만 쓰시면 참으로 무조건 인식되고, 0이라 쓰면 무조건 거짓이라 인식되어 1이라 쓰면 무한 반복이 됩니다. 그리고 0이 되면 무조건 실행이 안 됩니다(do~while문 제외). 


이렇게 반복문 편을 마치겠습니다. 궁금한 점은 댓글로 남겨주세요.

'C언어' 카테고리의 다른 글

[5] C언어 조건문  (0) 2018.04.15
[3] C언어 콘솔 입력 하기  (0) 2018.02.27
[2] C언어 변수를 알기  (0) 2018.02.22
[1] C언어 콘솔 출력 하기  (0) 2018.02.20
[0] C언어 에디터 Dev C++ 다운로드  (0) 2018.02.14
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday