언어/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 문의 위치이다.