본문 바로가기
c언어

c언어 for문 알아보기

by 개발자 L 2022. 12. 4.
반응형

c언어 for문 알아보기

네 안녕하세요, 이번 포스팅에서는 c언어에서 가장 자주 쓰는 반복문인 for문에 대하여 알아보도록 하겠습니다.

for문은 while문과 do_while문 같이 반복문의 한 종류입니다.

그리고 while문 보다 훨씬 많이 쓰는 방법입니다.

지금부터 그 이유와 사용방법을 같이 알아보도록 하겠습니다.

 

1. for문의 구조

for문은 이렇게 생겼습니다.

for(i = 0; i < n; i++)
{
	printf("hi\n");
}

이러한 구조를 띄는데,

for문 안에 조건식은 총 3가지입니다.

  • 초기식
  • 조건식
  • 증감식

이 3가지가 모여서 for 루프가 돌아갈 수 있는 조건을 형성합니다.

그럼 이들에 대하여 알아보도록 하겠습니다.

 

1 - 1. 초기식

초기식은 for문에서 돌릴 변수의 초기값을 말합니다.

보통 0을 굳이 셀 필요가 없는 경우가 아니라면 초기값은 어지간하면 0으로 잡습니다.

그 이유는 컴퓨터는 항상 0을 제일 먼저 세기 때문이죠.

 

1 - 2. 조건식

조건식은 보통 범위를 잡습니다.

대다수의 경우는 0을 포함하여 세기 때문에 자기 자신 '미만'으로 잡습니다.

하지만 초기값을 1로 잡을 경우는 자기 자신까지 같이 세어줘야 그 범위가 나오므로 '이하'로 잡습니다.

 

1 - 3. 증감식

증감식은 증감 연산자를 사용하여 나타냅니다.

보통 '++'를 써서 누적적으로 증가를 시키는 방법을 가장 많이 쓰지만,

때에 따라서 '--'를 써서 누적적으로 감소를 시킬 때도 있습니다.

 

1 - 4. for문의 실행 순서

for문은 while문과 실행되는 순서는 똑같습니다.

  1. 초기값이 들어간다.
  2. 변수가 범위 내에 있으면 printf()에 있는 것을 출력한다.
  3. 변수를 증감시킨다.
  4. 증감된 변수가 for문의 조건식 범위 내에 있으면 추가적으로 실행이 되고, 범위를 벗어났다면 종료가 된다.

이런 순서로 for루프가 진행이 됩니다.

제가 이를 토대로 하나의 간단한 예제를 한 번 작성을 해보도록 하겠습니다.

#include <stdio.h>

int main()
{
	int i;
	
	for(i = 0; i < 5; i++)
	{
		printf("hi\n");
	}
    
	return 0;
}

이렇게 한 번 작성을 해봤습니다.

그럼 결과가 어떻게 나오는지 한 번 봅시다.

hi
hi
hi
hi
hi

이렇게 결과가 잘 나오는 것을 보실 수가 있습니다.

 

2. 증감 수식의 형태

for문에서는 증감 수식이 여러 가지가 사용이 됩니다.

  • 증가식
  • 감소식
  • 곱 증가식
  • 복합식

이 중에서 가장 많이 사용되는 것은 증가식입니다.

그렇지만 때에 따라서는 나머지 증감식도 사용이 됩니다.

그럼 하나씩 그 형태를 알아보도록 하겠습니다.

 

2 - 1. 증가식

증가식은 1씩 누적이 되는 식입니다.

이렇게 씁니다.

for(i = 0; i < n i++)

 

2 - 2. 감소식

감소식은 증가식과는 반대로 1씩 감소가 되는 식입니다.

이렇게 씁니다.

for(i = 0; i < n; i--)

 

2 - 3. 곱 증가식

단순히 덧셈과 뺄셈 기호만 이용을 하는 것이 아니라 곱 기호를 써서도 증감식을 나타낼 수 있습니다.

이렇게 씁니다.

for(i = 0; i < n; i *= 2)

이렇게 쓰면 변수 i가 2배씩 증가를 하게 됩니다.

 

2 - 4. 복합식

이들을 한 데 섞어서 수식을 짤 수도 있습니다.

for(i = 0; i < n; i = (i * i) + 2)

이런 식으로 쓸 수가 있는데, 잘 쓰지 않는 방법입니다.

실제로 이렇게 범위를 크게 건너뛰며 연산을 할 일이 거의 없기 때문입니다.

반응형

 

3. 다양한 for 루프 사용법

for 루프를 쓰는 방법들도 여럿 존재합니다.

이를테면 세 부분이 모두 채워져 있는 것이 일반적인 경우인데,

어딘가가 빠져있는 경우들이 있을 수 있습니다.

하지만 이런 경우는 의도적으로 빼는 것이라서 문제가 될 것은 없습니다.

이런 경우들이 있습니다.

  • 세 개의 식이 모두 빠져있을 경우(무한루프)
  • 초기식, 조건식, 증감 식이 빠져있을 경우(조건식 생략 = 무한루프)
  • 여러 개의 변수를 초기화시키는 경우
  • 초기식에 다른 문장이 들어가는 경우
  • 다수의 조건식을 사용하는 경우

이렇게 있습니다.

 

3 - 1. 세 개의 식이 모두 빠져있을 경우

이러한 경우는 for문을 이용한 무한루프입니다.

그래서 for문이 들어가기 전에 위에서 printf()를 이용하여 무한루프를 빠져나오는 장치를 걸어야 합니다.

하지만 보통 for 루프로 무한루프를 돌리기보다는 while루프로 무한루프를 돌리는 경우가 더 많습니다.

사용법은 이렇습니다.

for( ; ; )
{
	printf("hi\n);
}

이렇게 작성을 해두면 무한루프가 돌아가게 됩니다.

 

그리고 이럴 경우에는 

그 이유는 while문처럼 장시간 돌리는 경우는 거의 없기 때문입니다.

 

3 - 2. 초기식, 조건식, 증감 식이 빠져있을 경우

초기식, 조건식, 증감식이 빠져있는 경우도 존재합니다.

이들은 하나가 빠져있을 때도 있고, 두 개가 빠져있을 때도 있습니다.

그리고 이들 중 제일 눈여겨봐야 하는 것은 조건식입니다.

그 이유는 초기식은 사실 초기값을 설정하는 것이기 때문에 그다지 영향을 주지 않아서 있어도 그만, 없어도 그만입니다.

그리고 증감식도 있어도 그만, 없어도 그만입니다.

그냥 printf()를 이용하여 루프를 빠져나오는 조건을 쓰기만 하면 그만이기 때문입니다.

그래서 두 가지는 필요가 없다면 굳이 쓰지 않아도 됩니다.

하지만 조건식이 빠진다는 것은 모든 값을 '참'으로 두겠다는 뜻이기 때문에 무한루프가 생성이 됩니다.

그렇게 되면 첫 번째 경우인 무한루프를 만드는 것과 같은 결과가 나옵니다.

그럴 경우에는 ctrl + c를 눌러줘야 합니다.

그 예시들을 보여드리도록 하겠습니다.

먼저 초기 식이 없는 경우입니다.

for( ; i < n; i++)

증감 식이 없는 경우입니다.

for(i = 0; i < n; )

초기 식이 없을 때는 i가 증가하다가 n에 다다르면 종료가 되고,

증감 식이 없을 때는 사용자가 입력을 하는 건에 한하여 무한히 돌아가지만, 종료 장치를 걸어둘 수 있습니다.

다음으로 조건식이 없는 경우입니다.

for(i = 0; ; i++)

이렇게 쓰인다면 무한히 반복이 됩니다.

그래서 이럴 때는 ctrl + c로 종료를 해야만 합니다.

 

3 - 3. 여러 개의 변수를 초기화시키는 경우

for 루프를 선언할 때 초기값에 값을 여러 개를 둘 때도 있습니다.

이럴 때는 콤마(,)를 사용하여 나타냅니다.

이렇게 씁니다.

for(i = 0, n = 0; i < n; i++)

 

3 - 4. 초기식에 변수 대신 다른 식이 들어갈 경우

초기식에는 일반 변수 대신에 다른 식이 들어갈 수도 있습니다.

for(printf("start"), i = 0; i < n; i++)

이런 식으로 말이죠.

 

3 - 5. 기타 조건식이 들어갈 경우

for문 안에 조건식이 조건만 부합하게 해 줄 수 있다면 어떤 조건식을 쓰든 상관이 없습니다.

for(i = 0; i < 1000 && sum < 5000; i++)

이렇게 쓸 수 있습니다.

 

4. 중첩된 반복문 쓰기

for문 안에 for문을 쓸 수도 있습니다.

그리고 당연히 while문 안에도 for문을 쓸 수 있습니다.

이러한 특성은 for문이 while문과는 다른 특성을 가지고 있기 때문입니다.

그건 바로 다음에 제가 설명을 드리도록 하겠습니다.

이런 식으로 사용이 가능합니다.

for(i = 0; i < n; i++)
{
	for(j = 0; j < m; j++)
	{
		printf("문장")
	}
}

이렇게 이중으로 for문을 쓰는 경우 하나와,

while(i < n)
{
	for(j = 0; j < m; j++)
	{
		printf("문장");
	}
    i++;
}

이렇게 쓸 수 있습니다.

 

5. while문과 for문의 차이점

while문과 for문은 같은 반복문이지만 차이점이 있습니다.

제가 표로 한 번 정리를 해봤습니다.

루프 for문 while문
범위 정확한 조건이 있는 범위 몇 번이 돌아갈 지 모르기 때문에 두루뭉술한 범위
변환 가능 여부 while문으로 변환 가능 for문으로 변환 불가능(범위가 정확치 않음)
포함관계 while문에 포함됨 for문을 포함함

이러한 차이점이 존재합니다.

그래서 상황에 따라서 조건에 맞게 쓰셔야 합니다.

 

여기까지 for문에 대하여 알아보았습니다.

다음 포스팅에서는 for문을 직접 사용해보면서 코딩 실력을 늘리는 시간을 가져보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다 ~

반응형

댓글