언어/C

[C언어] 반복문 _ Nested While 문 (while문의 중첩)

SOo • 2023. 1. 18. 22:39

'while 문의 중첩'은 말 그대로 while 문 안에 while문이 포함된 상황을 의미한다. 

대표적인 예시가 구구단의 전체 출력이다. 2단부터 9단까지 출력을 하는 예제를 살펴보도록 하겠다. 

 

먼저 예시로 구구단 2단을 떠올리면 2*1 = 2 처럼 2부터 9와, 1부터 9까지를 나타내주는 각각의 변수들이 필요하다. 즉 각각 변수를 설정하여 while 문을 이용해 2부터 9, 또 while 문을 이용해 1부터 9를 반복하게끔 하면 된다. 

 

#include <stdio.h>

int main(void)
{
	int cur=2; // 2단부터 9단까지 출력하기 위한 변수 설정 
    int is=0; // 1부터 9까지 출력하기 위한 변수 설정 
    
    while(cur<10) // cur이 2부터 9까지 나와야하므로 10보다 작게 조건문 
    {
    	is=1; 
        while(is<10)
        {
			printf("%d * %d = %d \n", cur, is, cur*is);
            is++;
        }
        cur++; // 다음 단으로 넘어가기 위한 증가
    }
    return 0;
 }

 

RESULT:

 

예제를 풀어보도록 하겠다. 

 

문제 1) 프로그램 사용자로부터 총 5개의 정수를 입력 받아서 , 그 수의 합을 출력하는 프로그램을 작성해보자. 단 한가지의 조건이 있다. 정수는 반드시 1이상이어야 한다. 만약에 1 미만의 수가 입력되는 경우에는 이를 입력으로 인정하지 않고 재 입력을 요구해야한다. 그래서 결국 1이상의 정수 5개를 모두 입력받을 수 있도록 프로그램을 완성해야 한다. 

 

나는 먼저 1) 사용자에게 수를 5개만큼 물어보고 합을 출력할 수 있는 while 문을 설정하고  2) while 문안의 while 문을 이용하여 정수는 반드시 1 이상이어야 한다는 조건을 만들면 되겠다라는 생각을 하였다.   

 

내가 만든 코드

#include <stdio.h>

int main()
{
	int i = 0; //정수의 개수
	int sum = 0;

	while (i < 5)
	{
		int num; // 입력한 정수의 수
		printf("정수를 입력하시오 (0은 무효처리):  ");
		scanf("%d",&num);
		i++;

		while (num < 1)
		{
			printf("정수가 1보다 작아 무효처리 되었습니다. \n");
			i--;
			break; // break를 하지 않을 시에 무한하게 반복된다
		}
		sum = sum + num;
	}
	printf("정수 5개의 총 합은 %d 입니다.", sum);
}

 

문제 답안 

#include <stdio.h>

int main(void)
{
	int sum=0, num=0, i=0;
    
    while(i<5) //총 5개의 변수를 받기위함
    {
    	while(num<=0) //0이하의 값이 입력되면 재입력을 요구
        {
        	printf("0보다 큰 수를 입력(%d번째:  ",i+1);
            scanf("%d",&num);
        }
        sum=sum+num;
        num=0;
        i++;
    }
    printf("총 합: %d \n",sum);
    return 0;
 }

 

큰 차이는 i++을 2번째 while 문의 위치이다.