본문 바로가기
[ CODING STUDY ]/》C언어 공부

C언어 12장(반복문, while문, do while문, 알고리즘)

by MRG 2020. 4. 30.
728x90
반응형

▣ 안녕하세요 ^^
저번장에 숙제는 잘해보셨나요?
이제 점점 코딩을 읽는 것부터가 어려울 수 있습니다.
그러니 이제는 정말 꼼꼼하게 코딩을 읽는 연습을 하셔야 합니다.



▣ 자 오늘은 제어문에 있는 반복문
그중에 while문을 먼저 진행하도록 하겠습니다.
저번장에 배웠던 조건문을 모두 다 이해하셨다면 반복문도 어렵지 않을 겁니다.

 

 

▣ 자 먼저 반복문은 왜 필요할까요?
이렇게 제가 두 번 암호를 입력받는 코딩을 만들었습니다.



▣ 여기서 잠깐
다시 한번 복습하면 입출력을 배울 때 이야기했듯이 scanf_s에서 " % c"형식을 지정할 때 띄어쓰기를 하는 이유는
띄어쓰기를 넣어야 화이트 스페이스인 엔터를 구분자로 인식하기 때문입니다.
저렇게 하지 않으면 위에 입력을 할 때 a와 \n를 버퍼에 저장해서
다음 scanf 입력을 받을 때 버퍼가 엔터를 가지고 와서 바로 입력이 끝나기 때문입니다. 
왜냐 쉽게 이야기하면 입력은 엔터를 누를 때 까지기 때문입니다.
이점 기억이 안 나시면 입력출력 부분을 다시 복습하시면 좋을 거 같습니다. 



▣ 그럼 다시 이야기로 돌아와서 두 번 문자를 입력받는다고 해봅시다. 
그럼 두번 코딩을 하면 아주 간단합니다.
하지만 여러 번 입력을 받아야 한다고 생각해봅시다.

 

▣ 그럼 이렇게 입력받을 수만큼 코딩을 해주면 됩니다.
하지만 그게 수천수만수억 가지가 된다고 하면... 생각만 해도 아주 끔찍합니다.
이걸 보고 나중에 다시 수정해야 한다고 하면 정말 끔찍합니다.
그렇기 때문에 컴퓨터 스스로가 반복을 할 수 있게 반복문을 사용해야 합니다.
그래야 코딩도 아주 간단해지고 우리가 읽기도 쉬워집니다.

 

 

 


▣ 자 반복문은 이렇습니다.
겁먹을 필요 없습니다.
조건문이랑 형식이 똑같습니다.
자 whlie() 괄호 안에 적은 값이 무엇일까요?
네 조건문을 기억하시면 아시겠죠?



▣ 바로 반복할 조건입니다. 
그럼 저기 조건이 맞으면 어떤 게 될까요?



▣ 네 { 화살 괄호에 스코프 범위까지 계속 반복하겠죠?
조건문을 배우면 이렇게 쉽게 이해할 수 있습니다.



▣ 저는 counter라는 변수로 조건을 만들었습니다.
0부터 2까지 숫자를 활용해서  저 반복문이 3번 작동하게 할 겁니다.
그런데 4번에 많이 익숙한 연산자가 있습니다.
증감 연산자로 +1이 되는 것입니다. 기억하시죠?



▣ 자 그럼 코딩을 하나하나 읽으면서 해석해보겠습니다.
처음에 counter 값은 0입니다.
그래서 while문 조건에서 3보다 0이 작기 때문에 참이겠죠?
while문 범위에 있는 코딩들을 실행합니다.



▣ 처음에 1번을 작동하고 그다음에 2번으로 입력을 받고
3번에 출력을 한 다음에 counter에 값을 +1을 하게 됩니다.
그럼 counter 값이 1이 되겠죠?



▣ 다시 while문으로 가서 counter랑 3을 비교합니다.
1< 3 이 작기 때문에 참이죠?
그럼 아까와 똑같이 1번 2번 3번 4번 
이렇게 counter가 3이 되기 전까지 3번 작동하게 됩니다.



▣ 조금 헷갈리시죠?
이 부분은 제가 적어둔 번호를 보면서 직접 노트에 적어서 제가 말한 이 방식으로 어떻게 진행되는지 적어보세요.
그럼 나중에 반복문 코딩을 읽을 때 정말 많은 도움이 됩니다. 

 

 


▣ 자 그럼 여기서 문제.
이렇게 counter++를 주석 처리하면 어떻게 될까요?
그럼 counter++는 컴퓨터가 읽지 않습니다.
그럼 작동하지 않겠죠?
그럼 wihile문은 어떻게 될까요?
네 당연히 while문 조건문이 계속 참이기 때문에 무한으로 작동합니다.
이점 꼭 명심하셔야 합니다.

 

 

▣ 제가 조건문에서도 이야기했지만 컴퓨터에 기준에서 참은 1을 이야기합니다. 
거짓은 0을 이야기하고요. 



▣ 그럼 while문을 계속 참으로 하려면 0을 제외한 숫자를 넣게 되면 이렇게 무한으로 작동하게 됩니다.
이점 꼭 기억해주시고 한번 무한반복으로 printf 출력을 해보세요.
그럼 정말 엄청난 속도로 끊임없이 출력되는 걸 보실 수 있습니다.
작업표시줄을 들어가면 cpu 점유율도 높습니다.
이걸 통해서 컴퓨터가 연산한다는 것도 다시 한번 알 수 있겠네요.



▣ 코딩은 틀려보는 것도 중요합니다.
우리가 조건을 잘못 넣어서 분명 while문을 무한으로 작동하게 해서 코딩이 잘못될 경우를 경험하실 겁니다.^^
겁내지 마세요~~ 
코딩은 자꾸 틀려야 실력이 향상됩니다.

 

 

▣ 자 이렇게 반복문 안에 조건문을 사용할 수 있습니다.
while문이 1 임으로 계속 참으로 인식하게 됩니다.
인식이라는 말이 좀 이상하지만 비유하자면 그렇습니다.
그럼 계속 whlie문이 작동하겠죠?



▣ 그런데 우리가 if문을 통해서 wihle문을 끝낼 수 있습니다.
counter값이 3보다 크면 break; 끝내라 이렇게 코딩을 해보세요.
그럼 if문 조건이 맞으면 break로 끝내게 됩니다.
break 우리가 switch문을 할 때 사용해봤죠?
break를 많이 활용합니다. 
꼭 저 코드를 활용해서 스스로 만들어 보세요.



▣ 자 그리고 우리는 저 위에서처럼 무한반복을 할 때 while문에 조건 숫자를 1로 하겠습니다.
그래야 그 의도를 명확하게 알 수 있기 때문입니다.



▣ 자 여기서 또 미션 밑에 있는 정답을 보지 말고 곱하기 5단을 한번 만들어보세요.
while문을 사용하셔야 합니다.

 

 

▣ 자 while문을 활용해서 이렇게 곱하기를 연산하는 걸 만들어보았습니다.



▣ 자 여기서 또 중요한 사실 제가 만든 코딩이 정답은 아닙니다. 
출력 결과가 while문을 통해서 나오게만 하면 됩니다.
조건문을 사용하셔도 되고, 변수를 더 사용하셔도 됩니다.
저는 이렇게 간단하게 만들어보았습니다.
그러니 저랑 다르다고 해서 틀린 게 아닙니다. 
이점 명심해주세요.



▣ 자 그럼 질문 while은 if문처럼 중첩으로 사용할 수 있을까요?
네 사용이 가능합니다.
반복문 안에 반복문을 넣을 수 있습니다.



▣ 그럼 여기서 또 미션 중첩 while문을 활용하여 2단부터 9단까지 곱하기가 한꺼번에 출력되게 만들어보세요.

 

 

 

 


▣ 자 저는 이렇게 만들어보았습니다. 
조금 어려울 수 있지만 제가 매 장마다 강조하는 코딩을 읽는 연습을 하시면 됩니다.



▣ 처음에 변수를 다 제외하고 1번부터 순차적으로 작동하겠죠?
자 그럼 지금부터 코딩을 읽고 해석해보겠습니다.
제가 적어둔 번호를 보시면서 읽어주세요.



▣ 1번 조건문을 맞으면 1번 while문 조건 안에 있는 범위를 순차적으로 진행할 겁니다.
그럼 2번이 작동하겠죠?
2번에서 while문 조건이 참이면 3번과 4번을 진행하게 됩니다.
몇 번을 할까요?
네 당연히 2번 조건이 거짓일 때까지 겠죠?



▣ 그럼 2번 조건이 다 끝나면 5번이 작동합니다.
5번은 왜 넣었을까요?
넣지 않게 되면 4번에서 number 2 9이기 때문에
초기화를 하지 않으면 9부터 곱하게 됩니다.
그래서 1로 다시 초기화를 했습니다.



▣ 그런 다음에 6번을 진행하겠죠?
그럼 처음 number 1은 3이 됩니다.
이제 2단이 끝났으니 3단을 해야 해서 이렇게 +1을 했습니다.
그리고 다시 1번으로 가서 조건을 검사하고 그게 참이면 아까와 동일하게 2번을 순차적으로 진행합니다.



▣ 이렇게 코딩을 하고 나서 옆에 노트를 두고 
어떻게 하나하나 순차적으로 작동하는지 필기해서 코딩을 이해하는 시간을 가져보세요.
너무 중요합니다.



▣ 그리고 제가 3번에서 %d 형식 앞에 숫자 2를 붙였죠?
먼저 제가 정답을 알려드리기 전에 2를 빼고 한번 실행해보세요.
그럼 결과에 값이 모두 길이가 다르기 때문에 이상해 보입니다.
그럼 2를 붙이면 어떻게 될까요?

 


▣ 네 이런 식으로 오른쪽 정렬을 한 것 같은 바뀌게 됩니다.
자릿수를 더 늘린다고 생각하시면 편할 거 같네요.



▣ 자 이 부분도 다르게 1부터 100까지 숫자를 더하는 코딩을 만들어보세요.

 

 

 


▣ 마지막으로 do while문입니다. 
이건 정말 간단합니다.



▣ 처음에 무조건 조건을 검사하지 않고 1번을 진행합니다. 그건 3번에 있는 모든 걸 진행하고 
그다음에 whlie문 2번을 검사하게 됩니다.
그리고 2번 조건이 참이면 3번을 작동하는 while문과 똑같은 형식입니다.
아주 간단하죠?
쉽게 이야기하면 do while문은 그냥 while문과 동일하지만 사용하는 용도는 다릅니다.



▣ 조건을 검사하지 않고 처음 무조건 한번 실행하고 검사하고 싶으면 do while문을 사용하시면 됩니다.
이 부분은 직접 한번 사용해서 순차적 원리를 살펴보시면 됩니다.

 

 



▣ 이번장에도 알고리즘 순서도를 살펴보겠습니다.
반복문을 표현하는 도형이 있죠?
밑에 있는 예제 형식을 보고 우리가 반복문을 표현할 때 이렇게 알고리즘 순서도를 설계해주세요.
그럼 나중에 우리가 코딩할 조건문과 반복문을 이 알고리즘순서도를 통해서 쉽게 코딩하실 수 있습니다. 
꼭 한번 활용해서 코딩을 진행해주세요.



▣ 자 오늘은 반복문으로 whlie문과 do while문을 배웠습니다.
지금까지 제가 강조한, 프로그램에 순차적 원리, 그리고 코딩을 읽는 습관 등등
모두 다 잘 따라오셨다면 오늘 배운 반복문 부분은 그렇게 어렵다고 생각하지 않으실 거라 생각합니다.
하지만 이 부분이 많이 어렵다면, 저번장에 진행했던 조건문부터 다시 꼼꼼하게 읽고
복습해주세요.
그리고 알고리즘 순서도를 활용해주세요.





▣ 숙제는 while문을 활용하여 컴퓨터가 정한 숫자를 맞추는 게임을 만들어보세요.
컴퓨터가 랜덤으로 숫자를 정하는 겁니다.
랜덤으로 정한 건 우리가 배웠죠?
모르시는 분들은 rand를 공부하고 오세요.



랜덤으로 숫자를 정하고 그걸 맞추는데 
만약 컴퓨터가 정한 숫자보다 작으면 작다.
크면 크다. 맞았으면 맞았다고 이야기할 수 있게 코딩을 해주세요.
중요한 건 맞출 때까지 작동해야 합니다.
그걸 while문을 사용해주세요.



▣ 그리고 다시 한번 말씀드리지만 코딩은 정답이 없습니다.
저 위에 있는 코딩들이 다 완벽한 게 아닙니다.
그러니 직접 생각해보시고 오른 코딩을 만들어보세요.
숙제 코딩도 마찬가지입니다.



▣ 숙제 꼭 해보시기 바랍니다.
질문 있으시면 댓글 남겨주세요.
그럼 다음장에서 뵙겠습니다. 





▣ 포기하지 마세요!!! 저도 했습니다. 파이팅~~

728x90
반응형

댓글