본문 바로가기
개발/C, C++

[c/c++] for문 (2)

by 77monkey 개발자 2023. 8. 16.
반응형

오늘은 저번에 작성한 for문에서 추가적인 내용을 적어보려고 한다.

혹시나 해당 페이지로 들어오셨다면 아래 페이지를 먼저 보고 오시는 것을 추천한다.

 

[c/c++] for문

for문에 대해서 이번에 적어보려고 한다. if문에 비해서 for문은 생각보다 어려울 수 있다. 하지만 천천히 잘 따라오길 바란다. for문 형식 for (초기화; 조건; 변수 증감) { } for문 설명 for문 형식에서

77monkey.tistory.com


for문의 다양한 형태

// 기본 형태
for (int i = 0; i< 5; i++) {
	//코드
}

// 응용 형태
for (int i = 0, k = 0; i < 3 && k < 5; i++, k += 2) {
	//코드
}

기본 형태에 대해서는 위 페이지에서 설명했기 때문에 넘어가고,

응용형태에 대해서 한 번 해석해 보자.

초기화가 2개나 있다. i와 k를 각각 0으로 초기화를 하는 것이다.

조건식을 보면 나중에 다루겠지만, (조건식) && (조건식) 이 있다. i < 3이 참이고, k < 5가 참이면 조건식이 참이 되게 된다.

그러면 주석으로 표시된 코드가 실행되고, i가 1 증가(i=1)가 되고, k는 2가 증가(k=2)가 된다. 

주석으로 표현된 코드가 i와 k를 출력하는 거라면, 아래와 같이 코드와 결과가 생긴다.

//코드
#include <stdio.h>

int main() {

	for (int i = 0, k = 0; i < 3 && k < 5; i++, k += 2) {
		//코드
		printf("%d %d\n", i, k);
	}
	
	return 0;
}


//결과
0 0
1 2
2 4

혹시나 해서 설명을 조금 더 하면, for문의 초기화, 조건, 변수 증감에 맞게 작성을 하면 문제가 없다. 

#include <stdio.h>

int main() {

    int k = 0;
    for (; k < 5; k++)
    {
        printf("%d\n", k);
    }

    k = 0;
    for (; k < 5; ) {
        if (k % 2 == 0) { //짝수일 때
            k += 1;
        }
        else { //홀수일 때
            k += 3;
        }
        printf("%d\n", k);
    }

    return 0;
}

참고하시길...

 

무한 루프 for문 형식

for ( ; ; ) {
	// 코드
}

 

무한 루프 for문 형식

사실 for문 무한 루프는  이해가 안 될 수도 있다.

#include <stdio.h>

int main() {

	for ( ; ; ) {
		printf("hello\n");
	}
	
	return 0;
}

설명을 한다면, for문에 조건식이 들어가지 않아서 항상 참이 되어서 무한 루프가 생성된다.

위와 같은 코드를 작성하면, 아래와 같은 결과가 나온다.

hello
hello
hello
hello
hello
hello
hello
... (hello 반복) ...

 

중첩 for문 형식

for (초기화; 조건; 변수 증감) {
	for (초기화; 조건; 변수 증감) {
	    for (초기화; 조건; 변수 증감) {
			... (for문 반복) ... 
		}
	}
}

 

중첩 for문 예시

중첩 for문을 사용하는 경우는 여러 경우가 있을텐데, 지금 딱 떠오르는 예시는 배열 출력하는 거라서 이렇게 배열 출력 코드를 사용하게 되었다. 

여기에서 이중 for문도 중요하지만, 정말 자주하는 실수 중 하나를 설명하면,,

i, j 같은 변수를 사용하는 것은 정말 위험하다. 

나중에 i와 j를 같이 사용해서 버그를 찾느라 고생할 수 있다. 

그렇기 때문에 i, j 가 아닌 다른 변수를 사용하기를 추천한다!!! 

이 내용을 알려주려고 썼지, 앞으로 안 쓰도록 하겠다...ㅜㅜ

#include <stdio.h> 

int main() {
	int arr[2][3] = { 
		{0, 1, 2},
		{3, 4, 5}
	};

	for (int i = 0; i < 2; i++) {
		for (int j = 0; j < 3; j++) {
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}

다시 코드로 돌아와서 보면, for문에 대해서 확실하게 알고 있으니 쉽지 않은가?  

i \ j 0 1 2
0 arr[0][0] arr[0][1] arr[0][2]
1 arr[1][0] arr[1][1] arr[1][2]

예전 내 생각을 해보니, 쉽지 않을 것 같다...

표를 보면 도움이 될 것 같아서 만들었다.

i가  0으로 초기화가 되고, i < 2가 참이기 때문에 for문 중괄호 안으로 들어온다. 

그랬더니 2번째 for문을 만났다. 

2번째 for문에서 j가 0으로 초기화가 되고, j < 3가 참이기 때문에 arr[i][j](arr[0][0])이 출력된다. 

그리고 j가 1 증가(j=1)되고, 다시 j < 3을 봤더니 참이라서 arr[i][j](arr[0][1])이 출력된다. 

한번 더 하면 된다. 좀만 버티자! 

다시 j가 1 증가(j=2)가 되고, j < 3을 봤더니 참이라서 arr[i][j](arr[0][2])이 출력된다. 

그리고 j가 1증가(j=3)가 되어 j < 3을 봤더니, 이번에는 거짓이라서 2번째 for문을 나가게 된다. 

그리고 i가 1 증가(i = 1)가 된다. i < 2 이기 때문에 참이라서 다시 2번째 for문으로 들어온다.

여기서부터는 위에 내용이 반복되기 때문에 표를 보고 하나씩 해보길 바란다.

 

참고로 이렇게 중첩된 for문을 사용하게 되면, continue문과 break문을 활용해서 원하는 동작을 제어할 수 있다.

 

마무리

아무래도 for문 하나만 알면 반복문은 거의 다 아는 것이나 다름이 없다. 

추후 포스팅할 do ~  while문만 조금 다르고 while은 for문보다 쉽다.

그러니 for문 했으면, 자기에게 수고했다고 칭찬해줄 만하다.

반응형

'개발 > C, C++' 카테고리의 다른 글

[c/c++] do while문  (0) 2023.08.20
[c/c++] while문  (0) 2023.08.17
[c/c++] for문  (0) 2023.08.16
[c/c++] if 문  (0) 2023.08.14
[c/c++] 제어문 조건  (0) 2023.08.14