C언어 반복문과 조건문 while

    2018-02-06 13:43:16 작성

    반복문이란 특정 조건을 만족할때 까지 반복하는 제어문으로 while, do while, for가 있습니다.

    while

    while (조건식) {
        반복 실행될 문장
    }

    조건식이 참이면 중괄호 안의 내용(블록스코프)을 반복적으로 수행하고
    조건식이 거짓이면 중괄호 안의 내용을 수행하지 않습니다.

    #include <stdio.h>
    
    int main(void) {
        int i = 0; // 변수 i를 초기화
        printf("반복문 시작!\n");
        while (i < 5) { // i가 5보다 작으면
            printf("while문에 의한 반복 : %d \n", i);
            i++; // i 1증가
        }
        printf("반복문 종료!\n");
        return 0;
    }

    위의 코드는 다음과 같이 작성할 수 있습니다.

    #include <stdio.h>
    
    int main(void) {
        int i = 0;
        printf("반복문 시작!\n");
        while (i < 5)
            printf("while문에 의한 반복 : %d \n", i++);
        printf("반복문 종료!\n");
        return 0;
    }

    두 예제를 비교해보면 while문 다음 반복할 명령문이 1행 뿐이라면 중괄호로 감싸지 않아도 실행이 된다는 것 입니다.
    코딩 스타일이 서로 다를 뿐 기능상의 문제는 없습니다.
    (개인적으로) 가독성이나 확장성을 고려해 중괄호로 반복할 내용을 감싸는것이 좋은 코딩 스타일로 보여집니다.

    또다른 while문을 보겠습니다.
    사용자에게 한자리 정수값을 입력받아 구구단을 출력하는 예제입니다.

    #include <stdio.h>
    
    int main(void) {
        int dan, i = 1;
    
        printf("몇단? : ");
        scanf("%d", &dan); // 사용자로부터 입력
        while (i <= 9) {
            printf("%d x %d = %d\n", dan, i, dan*i); // 구구단을 출력
            i++;
        }
        return 0;
    }


    무한 루프

    조건식에 거짓값이 오지 않게 되면 무한 반복하게 되는데 이런 경우를 무한루프라 합니다.
    C언어에서는 0(거짓)을 제외한 모든 수는 참입니다. 심지어 음수의 경우도 참입니다.

    while (1) {
        printf("%d x %d = %d\n", dan, i, dan*i);
        i++;
    }

    위의 코드에서 보듯이 조건식에 1(참을 의미하는 대표적인 값)이 왔음으로 이는 무한루프에 빠지게 됩니다.
    물론 위와 같은 경우에도 break문을 이용하면 빠져나갈수 있으며,
    실제로 특정기능을 완성하기 위해 break문과 함께 무한루프를 구성하여 사용하기도 합니다.
    break에 대해서는 기타제어문에서 다루도록 하겠습니다.


    while문의 중첩

    while문의 중첩이란 while문 안에 while문이 포함된 상황을 뜻하게 됩니다.
    코드를 보면 더 쉽게 이해 하실 수 있습니다.
    다음 코드는 2단부터 9단까지의 구구단을 출력합니다.

    #include <stdio.h>
    
    int main(void) {
        int i=2;
        while (i < 10) { // 2~9단 까지
            int j = 1;
            while (j < 10) { // 각단의 1~9까지
                printf("%d x %d = %d\n", i, j, i*j);
                j++;
            }
            i++; // 다음단으로 넘어가기
            putchar('\n');
        }
        return 0;
    }


    연습문제

    1. 사용자로부터 정수 하나를 입력받아 그 수많큼 "Hello World!"를 출력하는 프로그램 작성


    2. 1~100까지의 홀수의 합을 구하세요.


    3. 사용자에게 출력할 문자열의 개수를 입력받아 다음과 같은 형태로 출력하는 프로그램 작성


    4. 3번의 코드를 가지고 오른쪽 정렬이 되게 바꿔보세요.