for?
C언어에서 흔히 쓰이는 반복문의 한 종류입니다.
do~while문도 있지만 전 for을 더 많이 사용하는거같아요 아직까지는
그럼 for이 어떤 방식으로 돌아가는지 알아볼게요
단순for문
반복할 문장이 하나뿐이라면 중괄호를 생략해도 됩니다.
써놨듯 초깃값이 제일 먼저 실행되고 그 다음에 조건식이 실행되며 반복할 문장을 출력한 후 증감이 이루어집니다
예를들어드릴게요
Q. for문을 사용하여 1부터 5까지의 숫자를 출력
제일 기본이 되는 for문의 사용법인데용
위 소스코드에 대해 설명해드릴게요
보시면 변수 i를 먼저 선언해주었고요
i의 초깃값을 for문 안에서 지정해줬습니다
그래서 i=1이라고 했으니까 처음 시작하는 i값은 1이 되겠네요
그 다음에 i<=5를 실행하는데 i는 5보다 작거나 같다니까 조건에 만족하므로 다음 실행 순서로 넘어갑니다
다음 실행 순서인 printf함수를 통해 1이 출력되고, 그 다음에 증감식인 i++로 넘어가서 i=2가 됩니다.
이런식으로 반복하는게 for문입니다.
그럼 조금 더 복잡한 중첩for문으로 넘어가볼게요
제가제일헷갈려한부분이 이부분입니다
일단 말로 설명을 드리자면
겉에 있는 for문을 먼저 돌릴겁니다
i=0을 첫번째로 실행합니다. 그럼 i는 0부터 시작하져?
그 다음에 조건식을 실행합니다.
위에서는 i<반복횟수라고 적혀져있는데 그 조건에 충족되면 밑에있는 for문으로 넘어가게 됩니다.
그리고 밑에있는 for문을 이제부터 실행할건데요
단순 for문 돌리듯 실행하면 됩니다.
먼저 k=0을 실행한 후 k<반복횟수가 충족되면 반복할 문장을 실행하고 k++를 실행하면 됩니다.
그렇게 밑에있는 for문을 계속 돌립니다.
그리고 밑에있는 조건이 모두 충족되면 겉에 있는 for문의 증감식으로 넘어가게됩니다.
그리고 또 똑같이 돌려주면 됩니다..
중첩 for문의 대표적인 예시는 별찍기입니다.
이 부분을 지금부터 살펴보도록 하겠습니다
Q. 별찍기를 이용하여 삼각형 출력 (왼쪽정렬)
*
**
***
****
*****
이 모양이 나오도록 별을 찍으려면 어떤 소스코드를 이용해야할까요?
먼저 변수 i와 j를 선언해줍니다.
그리고 중첩 for문을 사용하여 별을 표현할건데요
겉에 있는 for은 줄을 건너뛰는 용도로 사용할거고
속에 있는 for은 별을 표현하는 용도로 사용될것입니다.
먼저 겉에있는 for문을 통해 5줄을 출력할것입니다.
또한 안에 있는 for문을 이용해 *을 출력할것입니다.
이 소스코드대로 한다면,
j=0;j<=i;j++
j가 0부터 시작되고, 0<=0이 충족되기때문에 첫번째 *을 출력한 뒤 j++를 받아 j=1이 됨.
그럼 j=1;1<=0의 조건에 충족되지 않기 때문에 겉에 있는 for문으로 넘어가게 됨.
그럼 \n를 출력한 뒤 i++로 넘어가서 i=1이 됨.
1<5의 조건이 충족되기때문에 다음 for문 실행
위와 같은 방법으로 계속 실행됩니다.
실행결과
그럼 이런 실행결과가 나옵니다
Q. 삼각형 출력 (가운데정렬)
tip. for문 3개를 사용.
공백문자 9개, 별 1개로 시작한다.
아시겠나요?
잘 풀었다면 이런 형태의 삼각형이 나올겁니다
저는 이 방법을 조금 더 응용하여 높이를 입력받아보겠습니당
Q. 높이를 입력받아 삼각형 출력 (가운데정렬)
소스코드
값을 입력받을 변수 line을 선언하여 scanf를 이용해 line에 값을 입력받았습니다.
높이를 입력받지 않는 경우, 만약 열=10의 별을 출력한다고 가정했을때, line의 값에 10만 넣어주면 됩니다.
겉에 있는 for문을 이용해 몇 줄을 출력할 것인지 정했습니다.
안에 있는 for문을 이용해 무슨 내용을 어떻게 출력할 것인지 정했습니다.
line을 5라고 가정했을 때, 제일 첫번째 줄의 띄어쓰기는 5개가 됩니다.
그리고 밑에 있는 k의 값을 가지고있는 for문에서는 k=0부터 시작해 하나하나 별을 늘려갑니다
두번째 for문에서 k<=j*2를 안해주면 삼각형이 반쪽만 나옵니다.
실행결과
do~while
for문과 마찬가지로 사용 빈도가 높은 반복문입니다.
for문과 비슷하지만 사용 방법이 약간 다릅니다
for문은 (초깃값;조건식;증감식) 이었다면
while문은
조건이 참인 동안 그냥 계속 반복한다고 생각하면 된다.
그렇다면, for문에서는 초깃값과 증감식을 설정해줬는데 while에서는 어떻게 설정해주어야할까요?
정답은 "다른 위치에 넣어서 사용해줘야한다" 입니다.
그럼 어디에 넣어서 사용해줘야할까요?
for문이 (초깃값;조건식;증감식) 이었다면
while은
초깃값
while(조건식)
{
반복할 문장;
증감식;
}
이렇게 사용해줍니다.
while(1)은 무한루프를 만들어줍니다.
코드를 작성하기 전, while(1)을 이용해 모든 코드를 감싸주면 그 코드가 무한반복되어 돌아가게됩니다.
예시로, 무한루프를 활용한 계산기가 있습니다.
이렇게 while(1)으로 겉을 감싸주고 그 안에 소스코드를 짜준 뒤 실행하게되면
이렇게 스스로 멈추지 않는 이상 프로그램이 꺼지지 않고 계속 돌아가게 됩니다.
이제 do~while에 대해 알아보겠습니다.
do~while문은 while문과 거의 동일하지만, 조건식이 아랫쪽에 달린다는 점이 다릅니다.
while문의 경우에는 처음의 조건식이 거짓일 때 '반복할 문장들'을 한 번도 수행하지 않지만 do~while문에서는 조건식을 확인하기 전에 일단 '반복할 문장들'을 수행하므로 조건식이 참이든 거짓이든 무조건 한 번은 수행됩니다.
그렇다면 do~while을 어떤 방식으로 사용할 수 있을까요?
위 소스코드는 카페에서 주문하는 과정을 do~while문으로 나타낸것입니다.
일단 손님이 들어오면 적어도 한 번 이상의 주문 여부를 확인해야하기 때문에 do while을 사용하였습니다.
여기서 1,2,3번을 선택하면 주문을 반복하게됩니다.
4번을 선택하면 주문이 끝나게됩니다.
이런 방식의 프로그램을 만들 때 do while문이 사용됩니다.
실행결과
for문과 while문은 C언어에서 자주 사용하는 반복문이니 자주 사용해보고, 코딩하며 익혀가는것을 추천드립니다.