"Hello World!"라는 문자열을 10번 출력한다고 하자. 반복문이 없다면 printf 함수 호출문을 열 번 실행시켜야 한다.
이를 간단명료하게 표현할 수 있도록 해주는 것이 반복문이다.
반목문에는 총 3가지의 종류가 있다.
- while문
- do~while문
- for문
1. while문
while문은 특정 조건을 주고 그 조건을 만족하는 동안 특정 영역을 계속해서 반복하는 구조이다.
#include<stdio.h>
int main(){
int num = 10;
while(num != 0) printf("%d ", num--);
return 0;
}
// 출력: 10 9 8 7 6 5 4 3 2 1
위의 코드를 보면 while문 내에서 num--를 통해 num의 값을 1씩 줄이다 num의 값이 0이 됐을 때 반복문을 벗어나게 된다.
무한루프 구성하는 방법
반복조건이 와야 할 위치에 0이 아닌 값('참'을 의미하는 값)이 올 경우 무한루프(빠져나가지 못하는 반복문)가 형성된다.
#include<stdio.h>
int main(){
int num = 0;
while(1) printf("%d\n", num++); // 1은 '참'을 의미하는 대표적인 수이다.
return 0;
}
while문의 중첩
while문 안에 while문이 포함되는 상황을 뜻한다.
#include<stdio.>
int main(){
int n1 = 2;
int n2 = 1;
while(n1 < 10){
n2 = 1;
while(n2 < 10){
printf("%d * %d = %d\n", n1, n2, n1 * n2);
n2++;
}
n1++;
}
return 0;
}
2. do~while문
do~while문과 while문의 차이점은 "반복의 조건을 검사하는 시점"이다. while문은 조건을 맨 앞에서 검사한다면, do~while문은 맨 뒤에서 검사한다. 따라서 처음부터 반복 조건을 만족하지 못한다 하더라도 최소한 한 번은 실행하게 되는 구조이다.
#include<stdio.h>
int main(){
int num = 0;
do{
printf("%d\n", num);
num++;
} while(num < 3);
return 0;
}
while문과 do~while문은 매우 유사하기 때문에 상황에 따라 변환하여 쓸 수 있다.
while(num < 10){
printf("%d * %d = %d", n1, n2, n1 * n2);
num++;
}
do{
printf("%d * %d = %d", n1, n2, n1 * n2);
num++;
} while(num < 10);
보통은 while문을 사용하지만 반복영역이 무조건 한 번 이상 실행이 되어야 할 때는 do~while문이 더 자연스럽다.
3. for문
반복문을 실행하기 위해서는 필수요소 3개가 있다.
앞에서 봤던 while문으로 코드를 보여주겠다.
#include<stdio.h>
int main(){
int num = 0; // 필수요소 1 : 반복을 위한 변수의 선언
while(num < 3){ // 필수요소 2 : 반복의 조건검사
printf("Hello World\n");
num++; //필수요소 3 : 반복의 조건을 '거짓'으로 만들기 위한 연산
}
return 0;
}
위의 코드를 보면
- 필수요소 1 - 초기식(반복을 위한 변수의 선언 및 초기화에 사용)
- 필수요소 2 - 조건식(반복의 조건을 검사하는 목적으로 선언)
- 필수요소 3 - 증감식(조건을 '거짓'으로 만드는 증가 및 감소연산
이러한 요소들이 적용되는 것을 볼 수 있다.
for문을 사용하면 필수요소들을 한 줄에 묶을 수 있다.
for(초기식; 조건식; 증감식){
// 반복대상이 되는 문장들
}
#include<stdio.h>
int main(){
int num = 0;
for(int i=0; i<3; i++){
printf("Hello\n");
num++;
}
return 0;
}
이와 같이 while문에선 여러 줄을 통해 필수요소들을 표기했던 것과 달리 for문에선 한 줄로 간략하게 표시 가능하다.
그럼 for문이 while문보다 더 좋은 것인가?
반복의 횟수가 딱 정해져 있는 경우라면 for문을 쓰는 것이 좋다. 하지만 반복의 횟수가 명확히 정해져 있지 않고,
사용자가 임의의 값을 입력하기를 기다린다면 while문을 사용하는 것이 더 자연스러울 것이다.
for문의 중첩
이미 앞에서 while문의 중첩을 보았듯이, for문의 중첩도 다르지 않다. for문 안에 for문이 있는 것이다.
#include<stdio.h>
int main(){
for(int i=2; i<10; i++){
for(int j=1; j<10; j++){
printf("%d * %d = %d\n", i, j, i*j);
}
}
return 0;
}
프로그래밍을 하다 보면 반복문을 사용해야 하는 상황이 많이 있을 것이다. 반복문을 어떻게 어떤 문법으로 사용할지
연습하다 보면 금방 익힐 수 있을 것이라 생각한다.
'Programming > C' 카테고리의 다른 글
C언어 - 함수(Function) (0) | 2021.09.22 |
---|---|
C언어 - 흐름의 분기(if, else, continue, break, switch) (0) | 2021.09.17 |
C언어 - 상수, 자료형 (0) | 2021.09.14 |
C언어 - 변수(Variable)와 연산자(Operator) (0) | 2021.09.13 |
C언어 - 헤더파일, printf, scanf (0) | 2021.09.12 |
댓글