C언어 반복문 : for문 개요
이번 글에서는 C언어에서 for문을 사용하는 방법과 케이스에 대해
정리를 해보는 시간을 가지도록 하겠습니다.
기본 문법을 정리한 뒤, for문을 중단하는 continue/break 문법과
복잡해보일 수 있는 이중 for문의 예시에 대해서 정리해보겠습니다.
C언어의 특징은 파이썬처럼 들여쓰기로 단위를 구분하는 것이 아닌,
중괄호 {} 로 블록을 구분해준다는 특징이 있습니다.
따라서, 이 점을 감안하여 가장 기본적인 for문의 예시를 먼저 살펴보겠습니다.
#include <stdio.h>
int main(){
for(int i = 0; i < 5; i++){
printf("%d\n", i);
}
}
for() 안에 iterate 인자 선언 후 중괄호로 반복될 부분을 묶어주었습니다.
여기서는 프린트하는 부분에 해당되겠지요.
그렇다면 위 for문의 출력 결과는 어떻게 될까요?
정답은 0, 1, 2, 3, 4가 각각 한 줄씩 차지하며 출력됩니다.
int i = 0; i < 5; i++ 의 의미가 기본적으로 iterator를 적는 방법인데,
이 식의 의미는
i라는 임시 정수형 자료를 할당하고, 초기 값은 0으로 설정하며(초기화),
i가 5보다 작은 경우 {} 내의 반복하는 부분을 실행하고(조건식),
1회 반복이 끝날 때 마다, i는 1씩 증가시킨다(증감식).
라는 의미로 해석해주시면 됩니다.
세미콜론으로 각 의미를 구분시키며, for문 선언의 끝부분에 )로 닫고 난 뒤에는
세미콜론이 아닌 중괄호가 와야한다는 점도 기억해주시기 바랍니다.
따라서, 맨 처음 {} 내의 문장이 실행될 경우는 i = 0이라 0이 먼저 출력되고,
1, 2, 3, 4일 때까지 반복 후, i = 5가 되면 i < 5의 조건을 만족하지 않게되어
for문이 종료되는 것입니다.
또한, i는 for문 내에서만 유효한 임시 자료형으로, for문 종료 이후에는
i를 다시 사용할 수 없게 됩니다.
이해를 돕기 위하여, 예시를 한 가지 더 살펴보겠습니다.
#include <stdio.h>
int main(){
int i = -5; // for문 전에 선언 가능
for(i = 0; i < 10; i+=2){
printf("%d\n", i);
}
}
이번에는 i를 먼저 앞에서 일반 변수로 선언한 뒤에, for 문에서 해당 변수를
사용하였습니다. 이 경우는 for문을 나가도 i 변수를 이어서 사용이 가능합니다.
(값은 마지막으로 for문을 종료할 때의 조건에 해당하는 10입니다.)
위의 경우는 i = 0부터 2씩 증가하여 10보다 작을때까지 반복하므로,
0, 2, 4, 6, 8이 한 줄씩 출력되는 것을 볼 수 있습니다.
for문 continue, break 문법
C언어 for문에서도 continue와 break 문법을 지원합니다.
먼저 continue는 만났을 경우, 해당 for문 실행 파트를 건너뛰고,
다음 iterate 인자로 바로 넘어간다는 의미입니다.
이해를 돕기 위하여 아래 예시를 살펴보겠습니다.
#include <stdio.h>
int main(){
for(int i = 10; i > 0; i--){
if(i % 2 == 0){ // 짝수면 건너뛴다는 의미
continue;
}
printf("%d\n", i);
}
}
이번에는 i가 10부터 1씩 감소하며 0보다 큰 경우에 반복을 진행하는 케이스입니다.
다만, i가 2의 배수라면, if 문 내의 continue를 만나서 아래의 print문을 건너뜁니다.
따라서, 위의 출력 결과는 9, 7, 5, 3, 1이 한 줄씩 출력되는 결과를 가지게 됩니다.
참고로, for 문 내에서는 if 문 등 다른 블록을 넣는 것도 가능하며,
중괄호로 어디까지 if문의 끝이고, 어디까지가 for문의 끝인지를 구분하는 것이
중요하다는 점을 기억해주시기 바랍니다.
이번에는 break 문을 보겠습니다. break는 만났을 경우, 해당 for문을 바로 중단합니다.
#include <stdio.h>
int main(){
for(int i = 10; i > 0; i--){
if(i == 5){ // 5에서 중단
break;}
printf("%d\n", i);
}
}
i가 10부터 1씩 감소하다가 5가 되었을 때, if 문 내의 break를 만나
i = 4, 3, 2, 1인 케이스는 실행되지 못하고 for문이 중단됩니다.
따라서, 위의 출력 결과는 10, 9, 8, 7, 6이 한 줄씩 출력되고 끝이 나게 됩니다.
for문 변수 여러개 순회시키기
초기화 및 증감식의 형태를 이용하여 동시에 여러개의 변수를
선언하고 순회시키는 것도 가능합니다.
아래의 케이스에서 예시를 살펴보겠습니다.
#include <stdio.h>
int main(){
for(int i = 0, j = 1; i < 5; i++, j*=2){
printf("i = %d, j = %d\n", i, j);
}
}
세미콜론으로 구분 전에 쉼표로 여러개의 변수 선언 및
iterate 조건을 구분해주어 여러개 변수를 동시에 순회시키는 것이 가능합니다.
다만, 선언하는 두 변수의 자료형은 동일해야 합니다!(여기서는 int형으로 같습니다.)
위 코드의 실행 결과는 다음과 같습니다.
i는 1씩 증가, j는 2씩 곱해지다가 i가 5가되면 중단되는 상황을 볼 수 있었습니다.
참고로, for문의 조건 식에 and, or 등으로 복잡한 조건을 지정하는 것 또한 가능합니다.
초기화식, 증감식 생략 예시
초기화식이나 증감식을 다음과 같이 생략하는 경우도 구현이 가능하긴 합니다.
#include <stdio.h>
int main(){
int i = 0;
for( ; i < 5; ){ // 조건식만 제시
printf("%d\n", i);
i++;
}
}
위 코드도 0, 1, 2, 3, 4가 한 줄씩 정상 출력되는 것이 확인 가능합니다.
초기화가 필요 없고, 증감식을 구현하기 애매한 경우에는 위와 같은 케이스도
고려해볼 수 있겠습니다.
이중 for문 예시(구구단)
이중 for문 사용하는 경우는 for문 내에 for문을 넣어주시면 되고,
중괄호로 각 for문 블록의 경계를 잘 구분해주시면 됩니다.
또한, iterate를 하는 변수가 겹치면 큰 오류가 발생할 수 있다는 점도 기억해주세요.
대표적인 이중 for문 사용 예시인, 2 ~ 4단을 출력하는 구구단 예시를 살펴보겠습니다.
#include <stdio.h>
int main(){
for(int i = 2; i <= 4; i++){ //바깥 for문 : 2~4단 의미
for(int j = 1; j < 10; j++){ //안쪽 for문 : 1~9를 곱하는 의미
printf("%d * %d = %d\n", i, j, i*j);
} // 안쪽 for문을 끝내는 중괄호
printf("--------------\n"); // 각 단의 끝에 출력될 구분선
} // 바깥쪽 for문을 끝내는 중괄호
}
출력 결과는 다음과 같습니다.
중괄호로 바깥쪽 for문과 안쪽 for문 블록이 어떻게 구분되었는지를 눈여겨보시고,
구분선이 출력되는 부분이 안쪽 for문 종료 후에 선언되어, 각 단이 끝날때마다
1번만 출력된 점도 주목해주시면 좋을 것으로 생각됩니다.
'C & C++' 카테고리의 다른 글
[C언어] switch ~ case 문 사용법, 유의 사항 정리 (0) | 2021.12.15 |
---|---|
[C언어] 문자열에서 많이 사용되는 함수 : strlen, strcpy, strcat, strcmp (1) | 2021.12.13 |
C언어 논리 연산자, 비트 연산자 차이 비교, 사용 예시 (0) | 2021.12.08 |