' [C/C++] 9.3강 - 제어문, 조건 관리하기 (for 사용법)

Programming/C & C++

[C/C++] 9.3강 - 제어문, 조건 관리하기 (for 사용법)

mdisprgm 2021. 8. 17. 14:40
728x90
728x90

(1) for문이란

특정 조건이 성립하는 동안 계속 반복하는 while을 이용해

 

같은 코드를 N번 반복하는 코드를 짤 수 있다.

 

그러나 while이 꼭 그러한 용도로만 사용되는 것은 아니다.

 

반면 for는 N회 반복에 거의 쓰이는 제어문이라고 할 수 있다.

 

적어도 N회 반복에 대해서는 while보다 간결하고 읽기도 쉽다.

 

while과 비교하면서 for의 사용법을 확인해보자

 

(2) for의 사용법

#include <stdio.h>

int main() {
  int i;

  i = 0;
  //반복문에서는 관례적으로 i를 많이 사용한다.
  while (i < 10) {
    printf("i is %d\n", i);
    i++;
  }
}

 

위 코드는 printf를 while로 10번 반복하는 코드이다.

실행 결과

이 코드에 주석을 조금 추가해보겠다.

 

#include <stdio.h>

int main() {
	int i;
	
	i = 0;//초기화식
	//반복문에서는 관례적으로 i를 많이 사용한다.
	while(i < 10/*조건식*/) {
		printf("i is %d\n", i);
		i++;//증감식
	}
}

i = 0; 은 초기화식, i < 10; 은 조건식, i++; 은 증감식이라고 할 수 있는데,

 

이 세 가지가 for문에서 요구하는 식들이다.

 

for문에 이렇게 적어주면 더 간편하게 10번 반복할 수 있다.

 

#include <stdio.h>

int main() {	
	for(/*초기화식*/;/*조건식*/;/*증감식*/) {
		//실행할 코드
	}
}

각 자리에 식을 넣어주면 이렇게 된다.

 

#include <stdio.h>

int main() {
	int i;
	
	for(i = 0;i<10;i++) {
		printf("i is %d\n", i);
	}
}

각 식은 ; 으로 구분하며 증감식 뒤에는 ; 을 붙이지 않는다.(;을 두 개만 쓴다)

 

 

당연스럽게도 실행 결과는 완전히 똑같다.

 

그런데 이렇게 하면 다른 용도로 i 라는 이름의 변수를 사용하기 애매해진다.

 

매번 초기화식을 0으로 적어준다 하더라도 for문이 작동한 후에 i의 값이 원래 값으로 복구되지 않기 때문에

 

i 같은 변수는 for문에서만 사용하는 것이 좋다.

 

 

그런데 C에서 이걸 해결하는 방법이 있다.

 

초기화식에서 바로 변수를 선언해서 사용할 수 있다.

 

무슨 말이냐면..

#include <stdio.h>

int main() {	
	for(int i = 0/*초기화식에서 변수를 선언함*/;i<10;i++) {
		printf("i is %d\n", i);
	}
    
    
	for(int i = 0/*초기화식에서 변수를 선언함*/;i<10;i++) {
		printf("i times 10 is %d\n", i * 10);
	}
}

 

이렇게 하면 for문이 시작할 때 i가 생성되고 for문이 끝날 때 i가 소멸되어 오직 해당 for문에서만 접근할 수 있는

 

반복용 변수를 사용할 수 있다.

 

코드에서 보이다시피 모든 for문에서 i를 사용할 수 있게 된다.

 

 

for문은 나중에 배울 배열을 사용할 때 굉장히 자주 사용하기 때문에 잘 익혀두는 게 좋다.

 

연습 예제 :... 1부터 100까지 정수의 제곱을 출력하는 코드를 작성하라.

 

꼭 미리 코드를 작성해보고 정답을 확인하기 바란다.

 

▼ 정답 보기
#include <stdio.h>

int main() {	
	for(int i = 0;i<10;i++) {
		printf("i times i is %d\n", i * i);
	}
}

 

 

다음 강좌에서는 swtich에 대해 알아볼 것이다.

728x90
728x90
'