for 문
for문은 정해진 횟수만큼 반복할 때 사용하는 반복 구조이다. for 루프 라고도한다. for문은 반복 구조 중에서 가장 많이 사용되는데 장점이 많기 때문이다.
흐름도
for문은 초기식, 조건식, 증감식의 3부분으로 구성된다. 이들 3부분은 세미콜론으로 분리되어있다.
1 2 3 4 | for (i = 0; i < 5; i++) { printf("Hello World!"); } | cs |
for 루프의 작동 순서는 다음과 같다.
초기식 ==> 조건식 ==> 반복되는 문장 ==> 증감식 ==> 조건식 ==> 반복되는 문장 ==> 증감식 ==> 조건식 ==> 반복되는 문장 ==> 증감식
초기식
초기식은 반복 루프를 시작하기 전에 한번만 실행된다. 주로 변수 값을 초기화 하는 용도로 사용된다. 위의 예에서는 변수값을 0으로 초기화 하였다. 여기에 int i = 0등 선언과 동시에 초기화도 가능하다.
조건식
반복의 조건을 검사하는 수식이다. 이 수식의 값이 거짓이 되면 반복이 종료된다.
증감식
한 번의 루프 실행이 끝나면 증감식이 실행된다. 위의 예제에서는 i++가 여기에 해당하고 변수 i의 값을 증가시키는 역할을 한다.
//for문 예제1
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main() { int i; for (i = 0; i < 5; i++) printf("Hello world\n"); return 0; } | cs |
실행결과
과정을 설명해보자면.
1. i = 0 으로 초기화한다.
2. 조건식 i < 5 가 만족하는지 확인한다. 만족하지않으면 종료한다.
3. Hello World를 출력한다.
4. 증감식 i를 1씩 올린다.
5. 2번으로 돌아간다.
반복을 이용한 정수합 프로그램
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> int main() { int sum; // 정수들의 합을 저장 sum = 0; for (int i = 1; i <= 10; i++) // i가 1부터 10과 같을때 까지 반복된다. i가 11이 되면 반복 루프는 종료된다. { sum += i; // sum에 i의 값이 더해진다. } printf("1부터 10까지 더한값은 = %d\n", sum); // for문이 끝나면 실행된다. return 0; } | cs |
실행 결과
for문에서 첫 번째 단계인 초기식은 i = 1이다.
for문의 두 번째 단계는 조건식 i <= 10이다. 이것은 변수 i가 10보다 작거나 같은지를 검사한다. i 는 1로 초기화 되어있으므로, 조건은 참이 되고 i의 값은 2가 된다. 다시 조건 i <= 10이 검사되고 참이므로 다시 sum += 1; 문장이 실행되어 sum에 2가 더해진다.
for문은 조건식이 거짓이 될 때 가지 계속 실행되고 i가 11이 되면 조건식이 거짓이 된다. 조건식이 거짓이 되면 for문은 끝나게 되고 for문 아래에 있는 printf 문이 실행되어서 화면에 sum의 값이 출력된다.
반복을 이용한 세제곱값구하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> int main() { int n; printf("값을 입력해주세요 : "); scanf("%d", &n); printf("===============\n"); printf(" i i의 제곱근\n"); printf("===============\n"); for (int i = 1; i <= n; i++) { printf("%5d %5d\n", i, i * i * i); } return 0; } | cs |
실행결과
for루프를 이용하여 변수 i 를 1부터 n까지 1씩 증가시키면서 printf함수를 이용하여 화면에 출력을 한다
%5d는 정수를 10진수 형태로 출력하고 출력필드의 폭은 5글자라는 것을 의미한다.
팩로리얼 값 구하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> int main() { long fact = 1; // 정수를 전부 곱해야하므로 0이 되면 안된다 int n; printf("값을 입력해주세요 :"); scanf("%d", &n); for (int i = 1; i <= n; i++) fact = fact * i; printf("%d! 의값은 %d 입니다.. \n", n, fact); return 0; } | cs |
for루프를 사용하여 fact에 i의 값을 곱한 결과값을 다시 fact에 저장한다. i의 초기값도 0이 아닌 1이어야 한다. n까지 곱해져야 하므로 for루프가 끝나는 값도 n이 된다.
n이 5라고 하면 다음과 같이 반복이 진행된다
|
i의 값 |
i <= 5 |
반복 여부 |
fact의 값 |
1번째 반복 |
1 |
1 <= 5 (참) |
반복 |
1*1 |
2번째 반복 |
2 |
2 <= 5 (참) |
반복 |
1*1*2 |
3번째 반복 |
3 |
3 <= 5 (참) |
반복 |
1*1*2*3 |
4번째 반복 |
4 |
4 <= 5 (참) |
반복 |
1*1*2*3*4 |
5번째 반복 |
5 |
5 <= 5 (참) |
반복 |
1*1*2*3*4*5 |
6번째 반복 |
6 |
6 <= 5 (거짓) |
중단 |
|
while루프와 for루프의 관계
for 루프는 while루프로도 변환이 가능하다.
대신, 루프 제어를 초기화 하는 문장, 루프 제어 변수를 검사하는 문장, 증가시키는 문장이 모두 필요하다.
다음 장에서는 for문의 증감 수식의 형태, 다양한 for 루프, 중첩 반복문에 대해서 알아보겠다.
'C 프로그래밍 > 5. 반복문' 카테고리의 다른 글
5-5-2 for 문 2 (0) | 2019.05.21 |
---|---|
5-4 do_while문 (0) | 2019.05.21 |
5-3 반복 루프에서 보초값 사용하기 (0) | 2019.05.21 |
5-2 while문 (0) | 2019.05.19 |
5-1 반복의 개념 (0) | 2019.05.18 |