Programming/C

C언어 - 반복문(while문, do~while문, for문)

JunsuKim 2021. 9. 15.
728x90

"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;
}

프로그래밍을 하다 보면 반복문을 사용해야 하는 상황이 많이 있을 것이다. 반복문을 어떻게 어떤 문법으로 사용할지

연습하다 보면 금방 익힐 수 있을 것이라 생각한다.

728x90

댓글