이번에는 반복문 중 하나인 for 문에 대해 알아보도록 하겠습니다.







1. for 문 이란?


첫 번 째 주제에서처럼 for 문도 다른 반복문인 while, do~while문 처럼 반복을 위해 사용되는 문장입니다.


while, do~while 문. 이 두 가지 했으면 충분한 것 같은데 굳이 또 다른 반복문을 할 필요가 있을까? 라는 궁금증이 생기실 수 있습니다.


이에 대한 것은 다음의 예제를 먼저 본 후 진행 하도록 하겠습니다.



예제를 보면서 이렇게 생각할 수 있습니다.


main이라는 함수를 선언 해주고, 4 bytes 크기의 int 형 변수인 count를 선언하면서 동시에 0으로 초기화를 해줬구나.


반복문 중 하나인 while 문을 선언 했는데 조건은 count 가 10이 되기 전까지 while문을 실행 해주는구나.


반복을 실행하는 문장은 어떤 기능일까? -----> "비교를 위한 예제입니다." 라는 문장을 출력하는 구나.


몇 번 출력하는 걸까? ----------> count++; 이라는 문장이 있다면 총 10번의 printf 기능을 하고 반복문인 while 문이 종료가 되겠구나.


while 문이 종료되고나면 return 0; 문장으로 인해서 프로그램이 종료가 되겠구나.


이처럼 어떠한 기능을 '반복'하고 싶고, '몇 번 반복'하고, '반복 조건을 충족시킬 문장'은 어떤 것인지 한 번에 보는 것이 힘듭니다.(번거로워요...)


이렇듯 일반적인 while, do~while 문은 익숙해진다 해도 한 번에 알아 보기에는 약간 무리가 있습니다.


따라서 반복 횟수, 반복 조건 등을 한 번에 알아 볼 수 있도록 해주는 문장이 'for 문' 입니다.








2. for 문의 구조와 이해


for 문의 구조는 다음과 같은 필수 요소 들로 이루어져 있습니다.


필수요소 

기능

                                          초기식

  반복을 위한 변수의 선언 

                                          조건식 

  반복의 조건 검사

                                          증감식 

  반복의 조건을 '거짓' 으로 만들기 위한 연산


물론 위의 요소들이 while, do~while 문 에서도 사용이 되는 요소 들입니다.



예제에서 보시는 것처럼 while, do~while 문에도 필요한 요소들입니다.


하지만 for 문의 경우 초기식, 조건식, 증감식을 한 줄에 표현 할 수 있습니다.



예제에서 알 수 있듯이 반복을 실행할 문장을 '몇 번 반복하고, 반복 조건을 만족 시키는 증가 및 감소식, 반복 조건 및 증가, 감소에 사용되는 변수의 초기화'를 한 줄에 작성하여 알아 보기 편하도록 되어 있는 것을 확인 하실 수 있습니다.


이렇듯 코드를 간결화 하고, 가독성을 좋게 해주기 때문에 for 문을 사용하게 됩니다.


다시 한 번 for 문의 구조를 정리해 보면 다음과 같습니다.


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

{

// 반복의 대상이 되는 문장들

}


이러한 형식으로 for 문을 사용해주시면 됩니다.


그런데 바로 위의 예제에서 for 문을 2개 사용 했는데 왜 그런거지? 라는 궁금증을 가지시는 분들도 계실거고, 대략 눈치를 채신 분들도 계실겁니다.


for 문 이후에 if 문 에서도 나오는 내용이지만 for 문에서 반복할 문장이 1줄일 경우, 중괄호 { } 의 생략이 가능합니다.

* 하지만 반복할 문장의 마지막에 세미콜론 ; 을 반드시 작성하셔야 됩니다.


for 문이 작동하는 순서에 대해 알아보도록 하겠습니다.


for 문이 작동하는 순서는 다음과 같습니다.


1) 초기식 ==> int count=0 에 해당하는 초기화는 반복문이 시작하기 전 '1회' 만 실행합니다.

2) 조건식 ==> count < 10 에 해당하는 조건의 검사는 반복문의 시작에 앞서 진행하고, 반복 영역을 실행하기 전에 항상 확인 합니다.

3) 증감식 ==> count++ 에 해당하는 증감연산은 반복영역을 실행한 후에 진행합니다.


이렇듯 더욱 간단히 순서를 나열해 보면,


(1) 초기식 ==> (2) 조건식 ==> (3) 반복영역 실행! ==> (4) 증감식 ==> (2) ==> (3) ==> (4) ==> (2) 조건식이 '거짓' 이 될 경우  종료!


위와 같은 순서로 for 문이 작동하는 것을 알아 보았습니다.


실제로 편하고(개인 적인 생각입니다.), 가독성이 좋고, 코드의 간결화도 할 수 있는 for 문을 주로 사용합니다.








이것으로 반복문 중 하나인 for 문에 대하여 간단하게 알아 보았습니다.


다음에는 for 문의 중첩과 for 문 중첩 예제, 반복문들을 다양하게 중첩시켜서 사용하는 예제와 for 문 구조의 생략 가능한 부분, for 문의 무한 루프에 대해서 글을 올리도록 하겠습니다.












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

C 언어 반복문의 중첩  (0) 2017.01.15
C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - do~while문  (0) 2017.01.09
C언어 반복문 - while문(2)  (0) 2017.01.02
C언어 반복문 - while문(1)  (0) 2017.01.02

#상당히 늦었습니다. 죄송합니다. 오랫만에 와서 올리는 건데 짧은 내용에 대해 미리 사과의 말씀 드리고 진행 하도록 하겠습니다.




이번에는 do~while문에 의한 문장의 반복에 대해 알아보도록 하겠습니다.





1. do~while문 이란?


do~while문이란 '반복영역을 최소한 한번은 실행하는 구조'인 반복문 입니다.


do~while문은 while문과 거의 차이가 없습니다.


그러면 왜 do~while문이 필요하지? 라는 궁금증이 생기실 수 있습니다.


이와 관련하여 다음의 예제를 보도록 하겠습니다.



위의 예제에서 확인할 수 있듯이 do~while문과 while문은 차이가 거의 없습니다.


예제를 봐도 똑같지 않나? 라는 생각을 하실 수 있습니다.


이러한 궁금증에 대해서 위의 예제를 통해 다시 한 번 자세히 살펴보면 다음과 같은 사실을 알 수 있습니다.


1) 위의 예제의 경우에는 반복횟수가 이미 정해져 있습니다.

2) while문은 조건을 확인 하는 문장이 위쪽에 있는데 do~while문은 뒤쪽에 있습니다.

* 영어사전에서 do 는 '~하다' 라는 의미입니다.


여기까지 오셨으면 어느정도 눈치 채신 분들도 계실거고, 이러한 생각도 하실 수 있습니다.


단순하게 사용자의 입력이 완료될 때까지를 기다리는 계산기처럼 반복 횟수가 정해지지 않았을 경우 어떻게 하지?


C언어의 절차지향적 언어의 특성으로 위에서 부터 아래쪽의 순으로 순차적으로 실행 할 경우 do~while문의 반복영역은 무조건 한 번이 실행되나?


라는 궁금증이 생기실 수 있습니다.


우선 do~while문은 무조건 do~while문 의 중괄호 { } 사이의 영역은 무조건 처음에는 한 번 실행을 한 후, 조건을 검사합니다.


또 한가지 예를들면 사용자의 입력이 언제 끝날지 모르고, 무조건 한 번은 입력이 되어야 할 경우 do~while문을 사용합니다.


이러한 경우에는 while문 보다 do~while문이 훨씬 자연스럽기 때문입니다.


다음은 do~while문이 while문 보다 자연 스러운 상황을 나타내는 예제입니다.



위의 예제에서처럼 무조건 한 번은 실행이 되어야 할 경우에 do~while문을 사용하게 됩니다.


아직 이해가 되시지 않으신 분들은 다음 예제를 보도록 하겠습니다. (제 설명이 부족해서..)



위의 예제에서 보시는 것처럼 프로그램이 입력을 받기도 전에 종료가 되어 버렸습니다.


조건식을 만족하지 않아 while문의 반복영역을 실행조차 하지 않고 종료가 되는 것을 확인 하실 수 있습니다.


여기서 '그럼 조건식을 바꾸거나 조건에 사용된 변수를 다른 값으로 초기화 하면 되지 않나?' 라는 분들이 계실수도 있습니다.


당연히 가능합니다.


하지만 그렇게 하는 경우도 계실 수 있지만 '무조건 한 번은 실행 시키는 프로그램을 만들어야 되는데 while문 밖에 쓸 수 없다' 라는 문제에 직면 했을 경우 다음과 같이 do~while문이 while문 보다 자연 스럽다는 것을 아실 수 있습니다.



위의 예제에서처럼 무조건 한 번을 입력해야 되는데 '저는 do~while 문은 모릅니다. ㅠㅠ' 라는 상황이 생겼다고 가정하겠습니다.


그리하여 while문을 이용해서 작성을 해 본 결과 굉장히 부자연 스럽다는 것을 확인 할 수 있습니다.



이렇듯 do~while문은 입력을 받아 누적이 되어야 하는 프로그램의 경우 do~while문이 훨씬 자연스러운 것을 알 수 있었습니다.


또한 '최소한 1회는 반복영역을 실행하게 된다'는 점이 while문과의 가장 큰 차이점이라 할 수 있습니다.






이것으로 C언어 반복문 중 하나인 do~while문에 대하여 알아 보았습니다.



다음에는 for문에 의한 문장의 반복에 대하여 공부하고 글을 올리도록 하겠습니다.












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

C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - for문 (1)  (0) 2017.01.12
C언어 반복문 - while문(2)  (0) 2017.01.02
C언어 반복문 - while문(1)  (0) 2017.01.02
C언어 printf 함수 와 scanf 함수  (0) 2017.01.01

C언어 포인터와 배열 및 그 외의 추가적인 내용들에 대해서는 공부가 제대로 되어 있지 않은 상태이지만 정보처리산업기사 준비도 하면서 기본 문법만으로 할 수 있는 부분인 기본적인 알고리즘 중 수열에 대하여 예제 및 풀이 형식으로 글을 올리도록 하겠습니다.


(알고리즘 및 플로차트 등에 대한 내용은 추후 블로그 카테고리에 추가하여 올리도록 하겠습니다.)




1.  1+2+3+4+ ... +100까지의 합계를 구하는 순서도를 작성하시오.


문제 내용만 봤을 때는 Python이나 C 또는 Java로 생각나는 대로 바로 짜면 되서 쉽게 느껴졌었는데, 정해진 순서도에 맞게 짜려니까 어렵게 느껴지네요(저만 그런가 봐요...)


다음은 문제에 대한 순서도 입니다.



직관적으로 봤을 때 START --> STOP 까지 순서대로 진행이 되고, i<100 이라는 조건에서 조건을 확인 후 맞지 않으면 다시 반복 실행을 할 영역으로 돌아가는 것을 확인 할 수 있습니다.


문제에서 1번과 2번에 들어갈 내용을 작성하는 건데, 알고나면 쉬운데 처음 접할 경우 어려울 수 있습니다.(수학시간에 공부를 안 했던....)


문제의 1부터 100까지 양의 정수를 더할 경우 프로그램으로 코딩을 할 때 생각 할 것은 몇 가지 되지 않습니다.


1) 문제에 제시된 연산을 총 몇 회 할 것인지 (횟수 증가를 위한 변수 설정)

2) 연산의 결과를 저장할 변수 설정

3) 언제까지 연산을 할 것인지 조건 설정


이와 같은 내용을 바탕으로 순서도에 들어갈 내용을 생각 해보면 다음과 같이 지정 할 수 있습니다.


i=0이라는 연산 횟수에 대한 변수 설정, 연산의 누적된 결과를 저장할 J=0 변수 설정.


이를 바탕으로 i의 증가 값과 J값의 연산 방식을 각각 1번과 2번에 지정해 주면 됩니다.


1) i = i + 1

2) J = J + i


i값은 연산 횟수를 결정하는 값도 되지만 J = J + i에서 연산의 누적 결과를 저장하기 위한 값으로도 사용이 됩니다.


결과를 나열해보면 다음과 같습니다.


시작 : i = 0    J = 0


i = 0(i) + 1    J = 0(J) + 1(i)


i = 1    J = 1


i = 1(i) + 1    J = 1(J) + 2(i)


i = 2(i) + 1    J = 3(J) + 3(i)


i = 3(i) + 1    J = 6(J) + 4(i)


.

.

.


이러한 방식으로 진행이 됩니다.


해당 순서도를 코드로 작성하면 다음과 같습니다.



do ~ while문을 사용 하였는데, do ~ while문은 do 영역은 한 번은 무조건 실행하게 되는 영역입니다. 반드시 최소 한 번은 실행해야 할 경우 do ~ while문을 사용해 줍니다.


do 영역에서 i = i + 1로 i값을 증가시켜주고, J = J + i 로 연산의 누적 결과를 저장해 줍니다.


또한 while 조건에서 i < 100 으로 지정 해 주었는데, 이렇게 생각 할 수 있습니다. i <= 100 으로 설정해야 맞는거 아닌가? 라는 생각을 하실 수 있습니다.


이유는 간단합니다.


1 + 2 를 예로 들면 연산을 실행할 값은 1과 2로 2개가 존재하지만, 1과 2를 연산하는 횟수는 + 한 번 이기 때문입니다.


1~100 까지 1항부터 100번째 항 까지 공차가 1인 등차수열에서 항의 개수는 100개 존재 하지만, 연산의 횟수는 99회 이기 때문에 i = i + 1 에서 i 값이 1이 되고, 1부터 99까지 총 99회 연산을 실행하게 됩니다.


따라서 J = 5050 이라는 1부터 100까지 공차가 1인 등차수열의 합의 연산 결과를 확인 할 수 있습니다.








이번 글은 (수학을 못 했던) 저의 표현력이 많이 부족한 점 죄송합니다.


천천히 하나 씩 문제를 풀어보고, 한 문제 씩 예제와 풀이에 대하여 올리도록 하겠습니다.







+ Recent posts