반복문
특정 조건을 주고 그 조건을 만족하는 동안, 특정 영역을 계속해서 반복하게 만드는 함수.
함수 안에서만 반복이 실행되기 때문에 이 점을 주의해야 한다.
반복문에서는 ' 초기식, 조건식, 증감식 ', 이 세 가지가 필수 요소이다.
ex) 초기식 : int num = 0, 조건식 : num<5, 증감식 : num++
그럼 반복문은 num이 0에서 5가 될 때까지 시행을 하게 되고, num == 5가 될 시엔 함수를 벗어나게 된다.
(0) 반복문 ' while '
// while문의 구조
<초기식>;
while(<조건식>) {
<증감식>
}
세 개의 반복문 중, 가장 단순하고 직관적이다. 초기식을 밖으로 빼고 증감식을 while문 안으로 집어넣은 형태.
while문 안에서만 반복이 되기 때문에 증감식은 반드시 함수 안에 있어야 한다.
// 예제 1
#include <stdio.h>
int main(void) {
int i = 0;
while (i < 5) {
printf("%d번 시행\n", i + 1);
i++;
}
return 0;
}
//실행 결과
1번 시행
2번 시행
3번 시행
4번 시행
5번 시행
처음에 초기 값을 i = 0으로 설정. 증감식에 의해 1씩 늘어나게 되고, i == 5가 되면 조건식에 의해 반복은 끝이 난다.
(1) 반복문 ' do~while '
// do~while문의 구조
<초기식>;
do {
<증감식>
}while(<조건식>);
구조를 보면 알 수 있듯이, while문과는 다르게 조건식이 제일 뒤에 존재한다.
조건식이 뒤에 있단 소리는 ' 반복조건을 뒷부분에서 검사한다. ' 는 소리.
간단히 말해, 앞에 있는 영역을 최소한 한번은 실행한다.
// 예제 2
#include <stdio.h>
int main(void) {
int i = 0;
do {
printf("i : [%d] 시행\n", i); // 실행하고 조건검사 시행
i++;
} while (i == 1 );
int k = 0;
while (k == 1) {
printf("k : [%d] 시행\n", k); // 조건검사 후 실행
k++;
}
return 0;
}
//실행 결과
i : [0] 시행
i : [1] 시행
do~while문은 조건검사를 마지막에 실시하기 때문에 영역 내에 있던 printf문이 실행되었다.
거기에 변수 i값도 연산자 ' ++ ' 로 인해 값이 1 올라 조건에 만족, 영역 내 printf문이 한 번 더 실행되었다.
하지만 while문은 조건검사를 먼저 실시하기 때문에 영역 내 printf가 실행되지 않고 종료된 것을 확인할 수 있다.
while문과 do~while문의 차이점은 ' 조건식의 위치 ' 이기 때문에 서로 변환해서 쓰는 것도 가능하다.
(2) 반복문 ' for '
// for문의 구조
for(<초기식>;<조건식;<증감식>>)
for문은 while문과 형태는 다르지만 성질은 비슷하다.
차이점은 while문은 증감식이 영역 내 함수보다 밑에 있는 반면 for문은 초기, 조건, 증감식을 한 줄로 적는 것.
초기, 조건, 증감식을 다른 반복문보다 편하게 구성할 수 있어서 자주 쓰이는 편이다.
// 예제 3
#include <stdio.h>
int main(void) {
int j = 1;
for (int i = 1; i < 10; i++) { // <초기식>;<조건식>;<증감식>
printf("%d * %d = %d\n", i, j, i*j);
j++;
}
return 0;
}
//실행 결과
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25
6 * 6 = 36
7 * 7 = 49
8 * 8 = 64
9 * 9 = 81
(3) 반복문 심화
(3) - 0 : 반복문의 중첩
반복문도 하나의 함수이므로, 반복문 영역 내에 반복문을 구성 할 수 있다.
// 예제 4
#include <stdio.h>
int main(void) {
int i;
int j;
for (i = 1; i < 10;i++) {
for (j = 1; j < 10;j++) {
printf("%d x %d = %-4d", j, i, i * j); // (1) 먼저 실행. 변수 j값이 10이 될 때까지 반복
}
printf("\n"); // (2) 줄 바꿈 실행 후 (1)로 올라가 반복시행. 변수 i값이 10이 될 때까지 반복
}
return 0;
}
//실행 결과
1 x 1 = 1 2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5 6 x 1 = 6 7 x 1 = 7 8 x 1 = 8 9 x 1 = 9
1 x 2 = 2 2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10 6 x 2 = 12 7 x 2 = 14 8 x 2 = 16 9 x 2 = 18
1 x 3 = 3 2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15 6 x 3 = 18 7 x 3 = 21 8 x 3 = 24 9 x 3 = 27
1 x 4 = 4 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20 6 x 4 = 24 7 x 4 = 28 8 x 4 = 32 9 x 4 = 36
1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45
1 x 6 = 6 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 7 x 6 = 42 8 x 6 = 48 9 x 6 = 54
1 x 7 = 7 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49 8 x 7 = 56 9 x 7 = 63
1 x 8 = 8 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64 9 x 8 = 72
1 x 9 = 9 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
(3) - 1 : 무한 루프
반복조건이 와야 할 위치에 0이 아닌 값이 올 경우, 소위 말해서 ' 무한 루프 ' 라 불리는 빠져나가지 않는 반복문이 형성된다.
// 예제 5
#include <stdio.h>
int main(void) {
int num = 1; // 0 (False)이 아닌 값 : 나머지 수 (True)
/*
True를 의미하는 값이 1인 것은 아니다!
False값인 0을 제외한 나머지는 모두 True가 된다
*/
while (1) { // 무한 반복
printf("%d번째 반복!\n", num++);
}
return 0;
}
//실행 결과
1번째 반복!
2번째 반복!
3번째 반복!
4번째 반복!
5번째 반복!
6번째 반복!
7번째 반복!
8번째 반복!
9번째 반복!
10번째 반복!
11번째 반복!
12번째 반복!
13번째 반복!
14번째 반복!
15번째 반복!
16번째 반복!
17번째 반복!
18번째 반복!
19번째 반복!
20번째 반복!
21번째 반복!
22번째 반복!
23번째 반복!
24번째 반복!
25번째 반복!
26번째 반복!
27번째 반복!
28번째 반복!
29번째 반복!
30번째 반복!
...
...
참고로 무한 루프에서 빠져나오고 싶으면 ' ctrl + c ' 를 입력하면 된다.
오타, 지적 환영합니다.
'Learn & Develop > C' 카테고리의 다른 글
C언어 - 상수의 종류와 자료형의 변환 (0) | 2021.09.03 |
---|---|
C언어 - 기본 자료형의 종류와 수의 표현방식 (0) | 2021.09.03 |
C언어 - 연산자(2) (0) | 2021.09.03 |
C언어 - 연산자(1) (0) | 2021.09.02 |
C언어 - 2진수와 16진수 (0) | 2021.09.02 |