# 반복문(loops)
<div class="embed-responsive embed-responsive-16by9">
<iframe src="https://www.youtube.com/embed/PNJ7Gv1Gf-M" frameborder="0" allowfullscreen></iframe>
</div>
## 목차
1. 반복문이란
2. for문
3. while문
4. 분기문
4.1 break
4.2 continue
## 1. 반복문이란
반복문이란, 반복적인 코드를 단축시키는 문법이다.
예를들어 1부터 10000까지 출력하는 프로그램을 반복문 없이 작성하면 아래와 같다.
```
#include <stdio.h>
int main()
{
printf("1\n");
printf("2\n");
printf("3\n");
...
printf("10000\n");
return 0;
}
```
이를 반복문을 통해 개선하면 단 몇 줄로 작성 가능하다.
```
#include <stdio.h>
int main()
{
for (int i = 1; i <= 10000; i++)
printf("%d\n", i);
return 0;
}
```
## 2. for문
### 2.1 정의
for문은 대표적 반복문으로서, 반복 횟수가 명확한 경우 사용한다.
### 2.2 형식
for문의 형식은 아래와 같다.
```
for ( 초기식 ; 조건식 ; 갱신 )
{
반복내용
}
```
### 2.3 실행 흐름
for문은 다음 흐름으로 동작한다. 반복문 시작 전 (1) 초기식을 수행한다. 다음으로 (2) 조건식을 검사하고, 참인경우 (3) 반복내용을 수행한다. 반복내용이 끝나면, (4) 갱신을 한 뒤 다시 조건식을 검사한다. 이러한 과정을 조건식이 거짓이 될 때 까지 반복한다.
### 2.4 예제: 총합 구하기
아래는 1부터 10까지 총합을 구하는 코드이다.
```
/* for: 반복횟수가 명확한 경우 */
int sum = 0;
for (int i = 1; i <= 10; i++)
{
sum += i;
}
printf("%d\n", sum); // 55 = 1 + 2+ 3 + ... + 9 + 10
```
## 3. while문
### 3.1 정의
while문은 또 다른 반복문으로서, 반복 횟수가 조건에 따라 다른경우 사용한다.
### 3.2 형식
while문의 형식은 아래와 같다.
```
while ( 조건식 )
{
반복내용
}
```
### 3.3 실행 흐름
while문의 실행흐름은 간단하다. (1) 조건식이 참인 경우, (2) 반복내용을 수행한다. 이를 조건식이 거짓이 될 때까지 반복한다.
### 3.4 예제: 두 정수의 최소 공배수
아래는 두 정수 a와 b의 최소 공배수를 구하는 코드이다.
```
/* while: 반복횟수가 상황따라 다른 경우 */
int a = 3, b = 4, n = 1;
while (!(n % a == 0 && n % b == 0))
{
n++; // n을 1 증가
}
printf("\n최소 공배수: %d\n", n);
```
## 4. 분기문
분기문은 break와 continue가 있다.
### 4.1 break문
break문은 실행 흐름을 반복문에서 탈출시킨다.
다음 코드는 오이 알러지로 식사를 마무리하지 못한 예이다.
```
/* break: 반복문 강제 탈출 > 예제3-오이 알레르기 */
char foods[][100] = {"피자", "곱창", "오이", "치킨"};
for (int i = 0; i < 4; i++)
{
printf("%s > ", foods[i]);
if (strcmp(foods[i], "오이") == 0)
{
printf("알러지 발생! > ");
break;
}
}
printf("식사 종료!\n");
```
### 4.2 continue문
continue문은 실행 흐름을 다음 반복으로 강제 이동시킨다.
다음 코드는 1부터 7까지의 합을 구하는데, 3의 배수는 제외시키는 예이다.
```
/* continue: 다음 반복으로 강제 이동 > 1부터 7 곱(3의 배수 제외) */
int result = 1;
for (int i = 1; i <= 7; i++)
{
if (i % 3 == 0)
continue;
result *= i;
}
printf("결과: %d\n", result);
```