이번 포스트에서는 구구단 출력, 별 출력 문제와 같은 다양한 for
문 사용 예제를 분석하고, 코드의 동작 방식을 한 줄씩 설명하겠습니다. 이러한 문제들은 반복문을 이해하고 활용하는 데 매우 유용합니다.
for (int i = 2; i < 10; ++i)
{
for(int j = 1; j < 10; ++j)
{
cout << i << "*" << j << " = " << i * j << "\n";
}
cout << endl;
}
for (int i = 2; i < 10; ++i)
):i
는 2에서 시작하여 9까지 증가합니다. 이 루프는 구구단의 단을 제어합니다.i
가 2일 때는 2단, i
가 3일 때는 3단을 출력합니다.for(int j = 1; j < 10; ++j)
):j
는 1에서 시작하여 9까지 증가합니다. 이 루프는 각 단의 곱셈 결과를 출력합니다.i
가 2일 때 j
는 1에서 9까지 반복되며, 2 1, 2 2, ..., 2 * 9의 결과를 출력합니다.cout << endl;
:for (int i = 2; i < 11; i += 3)
{
for (int j = 1; j <= 9; ++j)
{
cout << i << "*" << j << " = " << i * j << "\t";
cout << i + 1 << "*" << j << " = " << (i+1) * j << "\t";
cout << i + 2 << "*" << j << " = " << (i + 2) * j << endl;
}
cout << endl;
}
for (int i = 2; i < 11; i += 3)
):i
는 2에서 시작하여 3씩 증가합니다. 각 반복에서 3개의 단(예: 2단, 3단, 4단)을 동시에 출력합니다.for (int j = 1; j <= 9; ++j)
):j
에 대해 3개의 단(예: 2단, 3단, 4단)이 한 줄에 출력됩니다.cout << i << "*" << j << " = " << i * j << "\t";
:\t
)으로 정렬합니다.cout << i + 1 << "*" << j << " = " << (i+1) * j << "\t";
:cout << i + 2 << "*" << j << " = " << (i + 2) * j << endl;
:cout << endl;
:for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < i+1; ++j)
{
cout << "*";
}
cout << endl;
}
for (int i = 0; i < 5; ++i)
):i
는 0에서 4까지 증가하며, 각 줄에서 출력할 별의 개수를 결정합니다.for (int j = 0; j < i+1; ++j)
):j
는 0에서 i
까지 증가하며, 각 줄에서 i+1
개의 별을 출력합니다.i = 0
일 때 1개의 별, i = 1
일 때 2개의 별이 출력됩니다.cout << endl;
:출력 결과:
*
**
***
****
*****
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5 - i; ++j)
{
cout << "*";
}
cout << endl;
}
for(int i = 0; i < 5; i++)
):i
는 0에서 4까지 증가하며, 각 줄에서 출력할 별의 개수를 결정합니다.for(int j = 0; j < 5 - i; ++j)
):j
는 0에서 5 - i
까지 증가하며, 각 줄에서 5 - i
개의 별을 출력합니다.i = 0
일 때 5개의 별, i = 1
일 때 4개의 별이 출력됩니다.cout << endl;
:출력 결과:
*****
****
***
**
*
for (int i = 0; i < 4; ++i)
{
// 공백을 출력하기 위한 for문
for (int j = 0; j < 3-i; ++j)
{
cout << " ";
}
// *을 출력하기 위한 for문
for (int j = 0; j <2 * i + 1; ++j)
{
cout << "*";
}
cout << endl;
}
for (int i = 0; i < 4; ++i)
):i
는 0에서 3까지 증가하며, 각 줄에서 출력할 공백과 별의 개수를 결정합니다.for (int j = 0; j < 3-i; ++j)
):j
는 0에서 3-i
까지 증가하며, 줄의 시작 부분에 공백을 출력합니다. i = 0
일 때 3개의 공백, i = 1
일 때 2개의 공백이 출력됩니다.for (int j = 0; j <2 * i + 1; ++j)
):j
는 0에서 2 * i + 1
까지 증가하며, 각 줄에서 별을 출력합니다.i = 0
일 때 1개의 별, i = 1
일 때 3개의 별이 출력됩니다.cout << endl;
:출력 결과:
*
***
*****
*******
int iLine = 7; // 전체 줄 수를 나타내는 변수 (총 7줄)
int iCount = 0; // 현재 줄에서 사용할 별의 개수를 결정하기 위한 변수
for(int i = 0; i< iLine; ++i)
{
// 공백 : 3,2,1,0,1,2,3
// 별 : 1,3,5,7,5,3,1
iCount = i;
// i 값이 7줄 기준 4,5,6 즉 밑의 삼각형을 구성할 때만 if문에 들어감
if (i > iLine / 2) // i가 3을 넘는 경우, 즉 아랫부분 삼각형을 그릴 때
{
iCount = iLine - 1 - i; // iCount를 감소시키는 방식으로 역삼각형을 만듦
}
// 공백 출력하기 위한
for문
for (int j = 0; j < (iLine / 2) - iCount; ++j)
{
cout << " ";
}
// 별을 출력하기 위한 for문
for (int j = 0; j < iCount * 2 + 1; ++j)
{
cout << "*";
}
cout << endl;
}
iLine
은 전체 줄 수를 나타내며, 7로 설정되어 있습니다.iCount
는 현재 줄에서 출력할 별의 개수를 결정하는 변수입니다.for(int i = 0; i< iLine; ++i)
):i
는 0에서 6까지 증가하며, 각 줄에서 출력할 공백과 별의 개수를 결정합니다.if (i > iLine / 2)
조건문을 통해, 상단과 하단의 대칭을 구현합니다. i
가 중간 줄(여기서는 3번째 줄)을 넘어가면 iCount
가 감소하도록 설정됩니다.for (int j = 0; j < (iLine / 2) - iCount; ++j)
)**:j
는 0에서 (iLine / 2) - iCount
까지 증가하며, 현재 줄의 시작 부분에 공백을 출력합니다.for (int j = 0; j < iCount * 2 + 1; ++j)
)**:j
는 0에서 iCount * 2 + 1
까지 증가하며, 현재 줄에서 별을 출력합니다.cout << endl;
:출력 결과:
*
***
*****
*******
*****
***
*
do-while
문 코드 분석do-while
문은 반복문의 한 종류로, C++에서 사용됩니다. 이 반복문은 while
문과 유사하지만, 최소한 한 번은 코드 블록이 실행된다는 점에서 차이가 있습니다. 이번 포스트에서는 do-while
문을 예제로 사용하여 동작 방식을 자세히 분석하겠습니다.
/*
* do while 문 : 반복문의 한 종류
* do {} while(조건식); 의 형태로 구성된다.
* while문은 처음 진입 부터 조건식을 체크하지만 do while문은 처음 한번은 무조건 동작이 되고
* 그 후에 조건식을 체크하여 true일 경우 동작되는 반복문이다.
*/
int iNumber = 0;
do
{
cout << iNumber << endl;
} while (iNumber > 0);
do-while 문 기본 구조:
do-while
문은 다음과 같은 형태로 구성됩니다:do {
// 반복할 코드 블록
} while (조건식);
true
라면 코드 블록을 반복 실행하고, 조건식이 false
라면 반복을 종료합니다.변수 초기화:
int iNumber = 0;
iNumber
를 0
으로 초기화합니다. 이 변수는 반복문에서 조건식을 평가하는 데 사용됩니다.do 블록:
do
블록 안의 코드가 첫 번째로 실행됩니다:cout << iNumber << endl;
iNumber
의 값인 0
이 출력됩니다.do
블록 안의 코드는 iNumber
의 값에 관계없이 한 번은 실행됩니다.while 조건식:
while (iNumber > 0);
iNumber
는 0
이므로 iNumber > 0
은 false
가 됩니다.false
이므로 반복문이 종료됩니다.do
블록 내의 코드는 조건식과 관계없이 무조건 한 번 실행됩니다.iNumber > 0
이 평가됩니다.false
이면 반복문이 종료됩니다.0
이 출력되고, 반복문이 종료됩니다. 이는 do-while
문이 조건과 상관없이 첫 번째 실행을 보장하기 때문입니다.false
이면, 코드 블록이 한 번도 실행되지 않습니다.while (iNumber > 0) {
cout << iNumber << endl; // 이 코드는 실행되지 않음
}
false
이어도, 코드 블록이 최소 한 번은 실행됩니다.do {
cout << iNumber << endl; // 이 코드는 한 번 실행됨
} while (iNumber > 0);
do-while
문은 조건에 상관없이 반복문이 최소한 한 번은 실행되어야 하는 상황에서 매우 유용합니다. 이와 같은 반복문을 잘 이해하면, 다양한 프로그래밍 시나리오에서 적절하게 활용할 수 있습니다. 이번 예제에서는 iNumber
가 0
으로 초기화된 상태에서 do-while
문이 어떻게 동작하는지 살펴보았으며, 이를 통해 do-while
문이 일반적인 while
문과 어떤 점에서 다른지를 명확히 이해할 수 있습니다.
이 포스트에서는 for
문을 활용하여 다양한 형태의 구구단과 별 패턴을 출력하는 방법을 살펴보았습니다. 반복문을 사용한 이러한 문제들은 프로그래밍에서 자주 접하게 되는 기본적인 문제들로, 반복문과 조건문을 이해하고 연습하기에 매우 유용합니다. 각 코드의 설명을 통해 for
문의 흐름과 패턴 출력 방법을 잘 이해하고 응용할 수 있기를 바랍니다.