C 언어 중첩 반복문을 활용한 숫자 피라미드 출력 분석
이 글에서는 특정 형태로 숫자를 출력하는 C 언어 프로그램을 분석하고, 출력 결과를 예측하며, 코드의 각 부분이 어떤 역할을 하는지 해석해 봅니다. 특히 중첩 반복문과 조건문의 응용에 중점을 두고, 일부 코드 제거에 따른 출력 변화까지 살펴봅니다.
📘 문제 설명
다음은 특정 형태로 숫자를 출력하는 C 프로그램입니다. 코드를 실행한 뒤 입력값에 따라 어떤 결과가 출력되는지 분석하고, 특정 부분을 제거한 경우의 결과도 확인합니다.
코드: patterned-numeric-pyramid.c
#include <stdio.h>
int main(void) {
int i, k, m, row, n = 0;
printf("층수를 입력하세요:");
scanf("%d", &row);
for (i = 0; i < row; k = 0, i++) {
// ㉠
for (k = 0; k < row - i - 1; k++)
printf("*");
for (m = 0; m < (2 * i) + 1; m++) {
printf("%d", n);
n++;
if (n >= 10)
// ㉡
n = 0;
}
// ㉢
for (k += m; k < 2 * row - 1; k++)
printf("*");
printf("\n");
}
return 0;
}
🧠 코드 구조 분석
🔹 반복문 구성
i
: 전체 줄 수 조절k
: 좌우 별(*) 출력용m
: 중앙 숫자 출력용n
: 출력할 숫자 (0부터 시작, 9까지 출력 후 0으로 초기화)
🔹 전체 줄의 길이
각 줄마다 출력되는 전체 문자 수는 항상 2 * row - 1
로 고정됩니다.
예를 들어 row = 3
이면 한 줄에 총 5개의 문자가 출력됩니다.
✍️ 문제 풀이
1️⃣ ㉡
이 실행되는 횟수 (row = 4
)
전체 숫자 출력 개수
i | 숫자 출력 수 (2*i + 1 ) |
---|---|
0 | 1 |
1 | 3 |
2 | 5 |
3 | 7 |
합계 | 16개 |
n
은 0부터 시작하여 총 16번 증가하므로 n = 10
일 때 한 번만 if(n >= 10)
조건을 만족하여 ㉡
실행.
✅ 정답: 1회
2️⃣ row = 3
일 때의 출력 결과
i | 왼쪽 별 | 숫자 | 오른쪽 별 | 출력 |
---|---|---|---|---|
0 | ** |
0 |
** |
**0** |
1 | * |
123 |
* |
*123* |
2 | 없음 | 012345 |
없음 | 012345 |
✅ 출력:
**0**
*123*
012345
3️⃣ ㉠
제거 시 출력 결과 (row = 3
)
왼쪽 별을 제거한 결과입니다. 오른쪽 별은 남아 있습니다.
✅ 출력:
0****
123**
012345
4️⃣ ㉠
과 ㉢
모두 제거 시 출력 결과 (row = 3
)
좌우의 모든 별을 제거하여 숫자만 출력합니다.
✅ 출력:
0
123
012345
📊 시각화 요약표
조건 | 왼쪽 * (㉠ ) |
오른쪽 * (㉢ ) |
숫자 출력 | 전체 줄 길이 | 특징 |
---|---|---|---|---|---|
기본 | 있음 | 있음 | 가운데 정렬 | 고정 (2*row-1) | 중심 피라미드 형태 |
㉠ 제거 |
없음 | 있음 | 왼쪽 정렬 | 동일 | 숫자가 왼쪽으로 치우침 |
㉠ , ㉢ 제거 |
없음 | 없음 | 숫자만 출력 | 줄마다 다름 | 비정형 정렬 |
🧩 학습 포인트
for (i = 0; i < row; k = 0, i++)
: 반복마다k
를 초기화하는 문법n >= 10
조건: 숫자 0~9 순환 구조k += m
: 오른쪽 별 출력 계산 시 이전 숫자 개수 반영- 전체 줄 수와 출력 폭 조절:
2 * row - 1
규칙
✅ 요약 정답 정리
항목 | 정답 |
---|---|
㉡ 실행 횟수 (row = 4 ) |
1회 |
기본 출력 (row = 3 ) |
**0** , *123* , 012345 |
㉠ 제거 시 출력 |
0**** , 123** , 012345 |
㉠ , ㉢ 제거 시 출력 |
0 , 123 , 012345 |
📘 마무리
이 문제는 중첩 반복문, 조건문, 숫자 순환 로직, 정렬 패턴 등 다양한 C 언어 기초 문법을 종합적으로 연습할 수 있는 좋은 예제입니다. 특히 출력 결과를 예측하고, 코드 수정에 따른 결과 차이를 비교하는 능력을 기르기 좋습니다.
추천 자료: ASP.NET Core 인증 및 권한 부여
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!