Developer

14.(C언어) 반복문_for,while 본문

Programming Language/C

14.(C언어) 반복문_for,while

DPhater 2020. 8. 1. 21:20

반복문은 같은 코드를 여러번 수행하기위해 사용한다.

for

for(초기식; 조건식; 변화식)

{

코드

}

for(초기식;조건식;변화식) 부분을 루프 선언문이라 하고

중괄호 부분을 루프 본체라고 부른다. 만약 반복할 코드가 한 줄이라면 괄호는 생략 가능하다.

for 반복문이 반복을 수행하는 동작 절차는 다음과 같다.

1.초기식과 조건식을 비교

2.참이라면 코드 실행 / 거짓이라면 루프 본체 아래의 코드 진행

3.변화식 적용

4.조건식 비교 2번 으로 돌아감

#include<stdio.h>
int main(){
	int i;
	for(i=0;i<100;i++){
		printf("%d ",i);
	}
    return 0;
}

코드1 실행 결과

코드1의 루프 선언문을 보자 미리 선언된 변수 i에 0을 할당한다는데 이 부분이 초기식이다. i<100; 부분이 조건식이고 i++부분이 변화식 이다. 말로 풀어서 쓰면 i가 0부터 100보다 작을 때까지 반복하며 한 번의 반복마다 i는 1씩 증가시키는 것이다. 반복할 코드는 i값을 출력 하는 코드이다. i가 0부터 99까지 반복되며 출력되는 것을 볼 수 있다.

#include<stdio.h>
int main(){
	int i;
	int input;
	scanf("%d",&input);
	for(i=input;i>0;i--){
		printf("%d ",i);
	}
}

코드2 실행 결과

코드 2와 같이 i를 입력받은 값부터 시작할 수도있고,초기값을 감소시키며 반복할 수도있다. 다만 조건식을 항상 신경써서 작성하여야 한다. 만약 i가 줄어드는 방향으로 반복할 때 조건식이 i<100 처럼 되어있으면 input이 100미만 이라면 항상 조건식이 참이기 때문에 계속 줄어들며 반복할 것이다.

for반복문에서 꼭 i를 사용하지 않아도 되고, 초기식을 작성하지 않아도 된다. 하지만 초기식을 작성하지 않아도 세미콜론은 작성해 줘야한다.

#include<stdio.h>
int main(){
	int input;
	scanf("%d",&input);
	for(;input>0;input--){
		printf("%d ",input);
	}
    return 0;
}

코드3 실행 결과

외부에서 입력으로 input값을 받고 for 루프 선언문에 초기식은 작성하지 않았다.

입력받은 input부터 1씩 줄여가며 input이 0보다 클 때까지 반복하는 것이다.

또한 하나의 루프 선언문에 여러 개의 변수를 작성할 수 있다.

int i,j;

for(i=0, j=1; i<50; i++,j*=2)

루프 선언문이 위와 같이 작성되었다면 i는 0부터 1씩 증가하고 j는 1부터 2배씩 증가하게 된다. 그리고 i가 50보다 작을 동안만 반복하는 것이다.

또 for(;;) 와 같이 모두 생략한다면 코드를 무한히 반복시킬 수 있다. 이러한 루프를 무한 루프라고 하며 프로그램이 종료되지 않는다. 이러한 경우 CTRL+C 키를 눌러 프로그램을 종료시킬 수 있다.

for반복문에 반복시킬 코드로 다시 for 반복문을 작성할 수 있다.

#include<stdio.h>
int main(){
	int i,j;
	for(i=1;i<10;i++){
		for(j=1;j<10;j++){
			printf("%d * %d = %d\n",i,j,i*j);
		}
		printf("\n");
	} 
	return 0;
}

코드4 실행 결과

바로 위와 같이 코드를 작성할 수 있다. 위의 코드는 구구단 1단부터 9단까지 출력해주는 프로그램이다. 외부의 for문이 한번 반복 될때마다 내부의 for문이 j가 1부터 9까지 반복되는 것이다.

풀어서 말하면

i가 1일때 j가 1~9까지 반복하고

i가 2일때 j가 1~9까지 반복하고

......

i가 9일때 j가 1~9까지 반복하고

i가 10이되면 외부의 for문 조건식이 거짓이 되므로 종료된다.

while

while 반복문은 for 반복문과 매우 유사하다.

초기식

while(조건식)

{

코드

변화식

}

동작 절차 또한 for문과 마찬가지로 우선 초기식과 조건식을 비교해 참이라면 중괄호 내부의 코드를 실행한다(이때 변화식도 수행). 그 후 다시 조건식과 비교를 하며 결과가 참이면 계속 반복을 한다.

#include<stdio.h>
int main(){
	int i=0;
	while(i<5){
		printf("%d ",i);
		i++;
	}
    return 0;
}

코드5 실행 결과

코드5 에서 초기식은 int i=0;이고 조건식은 i<5, 변화식은 i++이다.

정수형 변수 i를 선언 및 0으로 초기화 한 후 while을 만나면 조건식을 확인한다.

조건식이 참이면 while문의 코드를 실행시키고 다시 조건식을 확인한다.

위에 처럼 변화식을 while문 내부에 넣을수도 있지만 조건식 부분을 잘 처리하면 변화식을 내부에 작성하지 않아도 된다.

#include<stdio.h>
int main(){
	int i=5;
	while(i--){
		printf("%d ",i);
	}
    return 0;
}

코드6 실행 결과

i는 5로 초기화 되어있고 조건식은 i--로 되어있다. C는 0이면 거짓 0이 아니면 참 인걸 생각하면 왜 이렇게 동작하는지 유추할 수 있다. 처음 while을 만났을때 i--가 참인지 확인한다. 후위 연산자 이므로 우선 5를 보고 참인것을 파악한다. 그후 후위 연산자가 수행되어 i는 1감소되고 4가 출력된다.

....(반복)

1까지 출력이 되었다고 생각해보자! 방금 1이 출력되었으므로 i에는 1이 들어있다.

i--가 참인지 확인을 한다. 역시 후위 연산자 이므로 값을 줄이기전에 i값이 1이기 때문에 조건식 결과는 참이다. 그 후 후위 연산자가 실행되어 i는 0이되고 while문 내부의 printf함수를 통해 0이 출력된다.

그후 i는 0인 상태로 참인지 파악한다 0은 거짓이므로 반복을 그만두고 종료한다.

while문 또한 무한 루프를 만들 수 있다.while(1)과 같이 조건식으로 항상 참인 값을 넣어주면된다.

while문은 조건식이 거짓이라면 한번도 반복을 안할 수 있다.

반면에 이번에 나오는 do while문은 최소 한번은 반복을 수행한다.

초기식

do

{

코드

변화식

}while(조건식);

#include<stdio.h>
int main(){
	int i=5;
	do{
		printf("%d ",i);
	}while(i--);
    return 0;
}

코드7 실행 결과

do while문의 경우 처음 조건식을 확인하지 않고 내부 코드를 우선 한번 수행한다.

그런 후 조건식을 확인하여 반복을 결정하게된다. 최초 조건식 확인없이 한번을 수행하는것과 while뒤에 ;(세미콜론)을 붙혀주는것만 빼면 while문과 동일 하다.

break, continue

break와 continue를 통해 조건문을 중간에 빠져나갈 수 있고, 중간을 생략할 수 있다.

#include<stdio.h>
int main(){
	int i;
	for(i=0;i<50;i++){
		if(i==20)break;
		printf("%d ",i);
	}
	return 0;
}

코드8 수행 결과

for문은 i가 0부터 50보다 작을때까지 반복하도록 작성되어 있다. 하지만 수행 결과는 0~19까지만 출력되었다. i가 20일때 break를 통해 반복문을 빠져나왔기 때문이다. 반복문은 중괄호 내부의 모든 코드를 반복 수행하므로 매 반복마다 i가 20인지 if문을 통해 비교한다. 그리고 i가 20인 순간에 break를 만나 더 이상 반복하지 않고 반복문을 빠져나가는 것이다.

#include<stdio.h>
int main(){
	int i;
	for(i=0;i<50;i++){
		if(i%2==0)continue;
		printf("%d ",i);
	}
	return 0;
}

코드9 수행 결과

마찬가지로 for문은 i가 50보다 작을때 까지 반복하도록 되어있다.

그럼 매 반복마다

if(i%2==0) continue;

printf("%d ",i);

가 수행되는 것이다.

i%2는 i를 2로 나누었을때 나머지를 말하고 이 값이 0과 같은경우라면 2의 배수일때 즉 짝수일때 if문 조건식이 참이된다. 따라서 i가 짝수면 continue;를 수행하게된다.

continue는 continue 이래의 코드는 수행하지 않고 다음 반복으로 넘어 가라는 뜻이다.

'Programming Language > C' 카테고리의 다른 글

16.(C언어) 배열  (0) 2020.08.01
15.(C언어) 포인터  (0) 2020.08.01
13.(C언어) 조건문_if,switch  (0) 2020.08.01
12.(C언어) 논리 연산자,비트 연산자  (0) 2020.08.01
11.(C언어) 형 변환  (0) 2020.08.01
Comments