본문 바로가기
Development/C

(C언어 기초) 9. 반복문 활용

by eoieiie 2023. 8. 30.

반복문에 대해서 배워봤으니, 한 번 활용해보겠습니다. 먼저 종이 위에 별을 5개씩 줄지어 3줄을 그리는 프로그램을 예제로 확인해보겠습니다.

 

#include <stdio.h>

int main(void)
{
    int i, j;

    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 5; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}


//실행 결과

*****
*****
*****

 

두번째 for문을 그냥 printf("*****")로 해도 되지만, 중첩 for 문의 사용법을 알아보기 위해서 그냥 넣어 봤습니다. 이번에는 구구단을 출력하는 코드를 만들어보겠습니다. 

 

#include <stdio.h>

int main(void)
{
    int i,j;

    for (i = 1; i < 10; i++)
    {
        for (j = 1; j < 10; j++)
        {
            printf("%d X %d : %d\n",i,j,i*j);
        }       
    }

    return 0;
}


//실핼결과

1 X 1 : 1
1 X 2 : 2
1 X 3 : 3

.
.
.

9 X 7 : 63
9 X 8 : 72
9 X 9 : 81

 

break와 continue 분기문


break는  반복문 앞에서 반복을 즉시 끝낼 때 사용합니다. 모든 반복문은 조건식이 거짓을 때 반복이 끝나지만, 중간에서 임의로 반복을 끝내고 싶을 때 break를 사용합니다. 

 

다음 예제는 1부터 10까지 더하는 도중 총합이 30이 넘으면 중단하는 예제입니다. 이 예제를 통해 break의 사용법을 살펴보겠습니다.

 

#include <stdio.h>

int main(void)
{
    int i,j;
    i = 0;
    j = 0;
    
    for (i = 1; i <= 10; i++)
    {
        j += i;
        if (j > 30) break;

    }

    printf("누적한 값 : %d\n", j);
    printf("마지막으로 더한 값 : %d\n", i);

    
    return 0;
}


//실행 결과

누적한 값 : 36
마지막으로 더한 값 : 8

 

반복문의 조건식이 항상 참이면 무한 반복문이 됩니다. 무한 반복문을 끝내기 위해서 break를 사용할 수 있습니다. 

무한 반복문을 만들 때는 대표적으로 while (1)과 for (;;)를 사용합니다. 

 

#include <stdio.h>

int main(void)
{
    int count = 1;

    while (1) //
    {
        printf("happy ");
        count++;
        if (count == 4) break;
    }
    
    return 0;
}


//실행 결과

happy happy happy

 

이번에는 continue에 대해서 알아봅시다. continue는 반복문의 일부를 건너뜁니다. 반복문 안에서 continue를 실행하면 다음 실행 위치가 반복문의 블록 끝이 됩니다. 블록을 탈출하는 것은 아닙니다. 따라서 조건에 따라 반복문의 일부를 제외하고 반복할 수 있습니다. 예를 들어 3의 배수를 빠고 1부터 100까지의 합을 구해 보겠습니다. 

 

#include <stdio.h>

int main(void)
{
    int i;
    int j;

    i = 0;
    j = 0;

    for (i = 0; i <= 100; i++)
    {
        if ((i % 3) == 0) 
        {
            continue;
        }

        j += i;
    }

    printf("%d",j);

    return 0;
}


//실행 결과

3367

 

continue에 의해서 제어가 블록의 끝으로 이동한 후에는 다시 반복이 시작됩니다. for (~) 부터 다시 시작한다는 뜻이죠. 그렇다면 for 문 말고 while문으로도 continue를 위와 같이 사용할 수 있을까요?

 

int main(void)
{
    int i;
    int j;

    i = 0;
    j = 0;

    while (i < 100)
    {
        if ((i % 3) == 0) 
        {
            continue;
        }
        j += i;
        i++;
    }

    printf("%d",j);

    return 0;
}

 

continue는 if 반복문의 끝으로 바로 이동시키기에, j += i와 i++를 실행할 수 없게 됩니다. i++가 실행되지 않는다는 것은 while문이 종료될 조건인 i < 100을 결국 충족시키지 못한다는 것으로, 무한 반복하게 됩니다. 

 

확인 문제


별로 사각형을 그리는 프로그램을 작성하세요.

더보기
#include <stdio.h>

int main(void)
{

    int i, j, N;
    N = 10;
    
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
        {
            printf("* ");
        }
        printf("\n");
    }
    return 0;
}


//실행 결과

* * * * * * * * * * 
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *

 

별로 피라미드를 그리는 프로그램을 작성하세요. 

더보기
#include <stdio.h>
#define N 20

int main(void)
{
    int i, j;

    for (i = 0; i < N; i++) //20번 반복
    {
        for(j = N - i -1; j > 0; j--) //별을 찍기 전 빈칸의 개수를 정하는 줄
        {
            printf(" ");
        }
        for (j = 0; j < i; j++)
        {
            printf("*");
        }
        for (j = 0; j < i - 1; j++)
        {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}


//실행 결과


                  *
                 ***
                *****
               *******
              *********
             ***********
            *************
           ***************
          *****************
         *******************
        *********************
       ***********************
      *************************
     ***************************
    *****************************
   *******************************
  *********************************
 ***********************************
*************************************

 

숫자와 수식을 입력하면 값을 출력하는 계산기 프로그램을 작성하세요. 

더보기
#include <stdio.h>

int main(void)
{
    int x,y;
    char o;
    while(1)
    {
        printf("수식을 입력하세요 : ");
        scanf("%d %c %d", &x, &o, &y);
        if (o == '+')
        {
            printf("%d %c %d = %d\n", x, o, y, x+y);
        }
        else if (o == '-')
        {
            printf("%d %c %d = %d\n", x, o, y, x-y);
        }
        else if (o == '*')
        {
            printf("%d %c %d = %d\n", x, o, y, x*y);
        }
        else if (o == '/')
        {
            printf("%d %c %d = %d\n", x, o, y, x/y);
        }
        else if (o == '%')
        {
            printf("%d %c %d = %d\n", x, o, y, x%y);
        }
        else
        {
            printf("잘못된 계산입니다.\n");
        }
        getchar(); //엔터까지 문자로 인식하지 말라고 넣는 문자입니다. 
        printf("프로그램을 종료하시겠습니까? (y/n)");
        scanf("%c", &o);
        if (o == 'n' || o == 'N')
        {
            continue;
        }
        else if (o == 'y' || o == 'Y')
        {
            break;
        }
        else
        {
            printf("입력이 잘못되었습니다.\n");
        }       
    }
    return 0;

}

댓글