C언어 제곱 for문 - ceon-eo jegob formun

C

[스카웃 C언어 강좌] 11-4 반복문 for

[ 스카웃 C언어 강좌] 11-4 반복문 for

머리말

안녕하세요. Programog를 운영하고 있는 스카웃입니다.

오늘은 반복문 중 사용자면으로선 최고봉인, for문에 대해 알아보겠습니다. 

우리는 이미 반복문의 원리와 기본적인 개념들을 알고 있으므로

쉽게쉽게 이해할 수 있을 것이라 보입니다.

< 그 전에, 손가락을 살포시 눌러주세요 >   

----목차----------------

1.for문

-------------------------

[ 저번시간을 통하여 do~while문에 대해 확실히 다들알고계시겠으리라 믿고 수업을 진행하도록하겠습니다 ]

[ 저번 강좌 복습/재정리 : http://blog.naver.com/skout123/50127218188 ]

1. for문

for문, while과 같은 반복문입니다.  

그래서 for문이 없어도 while문 만으로도 모든 작업을 해낼 수 있습니다.

그러나, while문 대신 for문을 쓰게되면 가독성이 좋아하지고 코드길이도 줄일 수 있는 일이 다반사라

for문은 거의 반복문의 마스코트로 칭해지고있습니다.  

이상 for문에 대한 간단한 소개를 해보았는데요...

실제로 C언어에서 for문의 탄생배경은 이렇다고 합니다.  한마디로 요약하자면,

  " while문은 보기가 좀 그러네! "

자 이제 왜 while문이 보기가 좀~ 그런지 알아보겠습니다.

while문을 사용할 때, 적어주어야할  기본적인 구성요소 3가지는 무엇일까요?

바로, 이들입니다.

  * 반복 횟수 카운트를 위한 변수     ( int i = 0; )

  * 반복문의 탈출조건                    ( i < 7 )

  * 탈출조건 성립을 위한 연산         ( i++; )

그림으로 보자면, 바로 이 부분입니다.

[ 그림 1. 반복문의 기본 구성 3요소 ]

이러한 반복문 기본 구성 3요소들을 while문에서 만족시키려면, 무려 3줄(이상)이라는 공간이 필요합니다.

그래서 C언어 개발자 분들은 이러한 생각을 하기에 이릅니다.

  " 흠... 이 세가지를 깔끔하게 한 줄에 표시할 수 없나? 그러면 분석하기 편할 텐데. "

그래서 생겨난 것이 for입니다!

이번에 배울 for문을 깨우치고 나서는, 1줄이면 만사 오케이!! 끝납니다!

자, 반복문 for을 사용하기에 앞서 while문과의 차이점을 알려드리겠습니다.

[ 그림 2. while문과 for문의 비교 그리고 for문의 형태 ]

자 위 그림에서 오른쪽의 for문을 보시면, 

왜 for문이 while문 보다 한수 위인지 알 수 있습니다.

while문과는 달리 반복에 필요한 모든 구성요소들을 한 줄에 말끔히 나열하고 있으니깐요. 하하..

다시 말하지만, 이것이 바로 for문의 강력한 무기입니다!!?

For문은, while문을 보다 세련된 형태로 구성하기 위해 디자인 된 반복문 이라고 할 수 있습니다.

< ※ 주의 : 현재 VC++ 2010버전까지는 for문에서 int n = 0; 처럼 변수를 선언할 수 없고, 대신 미리 변수를 선언한 경우에서만 n = 0; 이런식으로 대입이 가능합니다 >

< 새로운 표준에서는 for문을 위 그림 처럼 구성할 수 있다고는 하지만, 현재 대부분의 컴파일러들은 옛날 표준을 가집니다 >

< 따라서 먼저 변수 선언을 해준 뒤 for문을 써주시기바랍니다 >

자아... 아직 for문에 대한 설명이 끝이 나지 않았습니다.

for문에 대해 더 알아보고자 합니다.

다음 그림을 봐주세요.

[ 그림 3. for문의 구성 세분화 ]

자, 보시면 왼쪽에서 오른쪽까지 순서대로 초기식, 조건식, 증감식이 있는데요.

도대체 이들이 무엇인지,,, 하나하나 설명해드리겠습니다.

-------------------------------------------------------------------------------------------------------------------------------------

  " 초기식 : 변수의 초기화를 해주는 부분이기 때문에 초기식(초기화 식) 이라고 부른다  "

  " 조건식 : 반복문의 조건검사를 해주는 부분이기 때문에 조건식 이라고 부른다 "

  " 증감식 : n++; 처럼 루프탈출을 위해 증감연산자를 이용해주는 식이 주로 오는 부분이기 때문에 증감식 이라고 부른다 "

--------------------------------------------------------------------------------------------------------------------------------------

잘 아셨나요?  for문의 몸체 부분은 말 안해도 다들 아시겠으니 생략하겠고,

이제 본격적으로 for문을 써봅시다~ 실습을 해보도록 하죠~

자, 다음은 예제소스입니다. 보고 조금씩 활용해주시면서 for문에 익숙해지세요.

----------------------------------------------------------------------------------------------------------------------

[ 사진 1. for문 활용 예제 ]

[ 사진 2. 위 예제 실행 결과 ]

-------------------------------------------------------------------------------------------------------------------

거듭제곱을 구하는 프로그램을 만들어보았습니다. 하하.

흠... 제가봤을 때 우리 실력대로라면 소스의 흐름과 각 변수의 역할들은 다 아실 것이라 믿고요..

< 모르시겠다면 질문을 해주시거나 재복습! >

이번 예제에서 주의 깊게 관찰해주실 부분은 바로 여기입니다. 

여기서 또 여러분들이 살짝 당황하셨을 것입니다.

[ 사진 3. for문에서의 다중 초기화 ]

연두색으로 색칠해놓은 부분, 즉 초기식을 보시면

i = 1, result = 1 이라고 2개나 변수를 초기화해주었습니다.

자, 이게 가능한가? 라고 물으실테지만 이미 실행결과를 보셔서 아셨듯 가능합니다.

그러니 앞으로 다중 초기화도 걱정없이 팍팍 해줍시다~     ( 되도록이면 필요할 때만 해줘야 가독성이 좋아집니다 )

아, 또 알아볼 것이있는데요~ 

예제를 봐주세요.

-------------------------------------------------------------------------------------------------------------------


[ 사진 4. 초기식, 조건식, 증감식 탐구 예제 ]

[ 사진 5. 위 예제 실행 결과 ]

-------------------------------------------------------------------------------------------------------------------

자, 먼저 9줄을 보시면

[ 사진 6. 조건식만 있는 경우 ]

초기식과 증감식이 증발하였습니다... 

아니 일부러 실험을 하기위해 없애주었는데요.

이럴 경우 어떻게 될까요?   뭐 전혀 지장되는 것은 없습니다.

변수의 값을 초기화 해주던 증감식을 통해 변수의 값을 변경해주던 말던, 위와 같은 상황에서는 쓸모가없기때문이죠.

while문으로 치면 그냥 이런 것이나 같습니다.

while(i++<3)

        puts("조건식만 존재");

ㅋㅋ 이럴 경우에는 차라리 while문을 쓰는게 훨 낳습니다.

그리고 다른 경우도 마찬가지입니다.

[ 사진 7. □□식이 없는 경우 ]

여기서 제가 말하고자 하는 바는,

그냥 이렇게 쓸 수 있다! 라는 것을 보여줄려고 이 예제를 준비했다! 라는 것입니다.

뭐 그렇게 중요한 건 아니지만 나중에 우리가 이런 식으로 쓰게될지 아무도 모르잖습니까? 하하.

자.. 이제,

[ 사진 8. 강의 끝~ ]

이상으로 오늘은 for문에 대해 알아보았습니다.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

< 숙제 >

1. 팩토리얼(!)을 계산하는 프로그램을 만들어봅시다.

프로그램 사용자로부터 숫자 하나를 입력 받은 후 , 그 숫자의 계승이 출력되도록 합시다.

ex )  5 입력 -> 1*2*3*4*5

[ 난이도 : ★★★☆ ]

2. 두 개의 정수를 입력 받아, 입력 받은 두 정수와 그 사이에 존재하는 모든 정수들의 합을 계산하는 프로그램을 만들어봅시다.

ex ) 3 , 7 입력  ->  3+4+5+6+7

[ 난이도 : ★★☆ ]

3. 1과 100 사이에 존재하는 모든 3의 배수와 5의 배수의 합을 계산하여 출력하는 프로그램을 만들어봅시다.

[ 난이도 : ★★★ ]

            숙제 결과는, http://cafe.naver.com/clubc 에 들어가셔서 '문제 다풀었다!' 게시판에 올려주시면 감사하겠습니다.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[다음강좌] 반복문의 중첩

[다다음강좌] 아스키코드 탐구

[다다다음강좌] 문자 함수 : isdigit,isalpha,islower,isupper

C언어 제곱 for문 - ceon-eo jegob formun