문제 정의
1 × 1부터 12 × 10까지의 곱셈표(구구단)를 아래 형식과 같이 화면에 출력하는 프로그램을 작성하는 것이 이번 글의 목표입니다.
1 2 3 4 5 6 7 8 9 10 2 4 6 8 ……………….20 3 6 9………………………30 4 8 12 16………………..40 - - - 12 24……………………..120
해결 방법
중첩(nested) 형태로 구성된 두 개의 do-while 루프를 사용하면 곱셈표를 간단하고 깔끔하게 출력할 수 있습니다.
곱셈표를 표시하는 핵심 로직은 다음과 같습니다.
- 외부 루프(바깥 루프): 변수 row에 의해 제어되며, 총 12번 반복 실행됩니다.
- 내부 루프(안쪽 루프): 변수 column에 의해 제어되며, 외부 루프가 한 번 실행될 때마다 10번씩 반복 실행됩니다.
do /*......외부 루프 시작........*/{
column = 1;
do /*.......내부 루프 시작.......*/{
y = row * column;
printf("%4d", y);
column = column + 1;
}
while (column <= COLMAX); /*... 내부 루프 끝 ...*/
printf("\n");
row = row + 1;
}
while (row <= ROWMAX);/*..... 외부 루프 끝 .....*/
전체 예제 코드
다음은 곱셈표를 출력하는 C 프로그램의 전체 소스 코드입니다.
#include<stdio.h>
#define COLMAX 10
#define ROWMAX 12
main(){
int row,column, y;
row = 1;
printf(" MULTIPLICATION TABLE \n");
printf("-----------------------------------------\n");
do /*......외부 루프 시작........*/ {
column = 1;
do /*.......내부 루프 시작.......*/ {
y = row * column;
printf("%4d", y);
column = column + 1;
}
while (column <= COLMAX); /*... 내부 루프 끝 ...*/
printf("\n");
row = row + 1;
}
while (row <= ROWMAX);/*..... 외부 루프 끝 .....*/
printf("-----------------------------------------\n");
}
실행 결과
위 프로그램을 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.
MULTIPLICATION TABLE ----------------------------------------- 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 11 22 33 44 55 66 77 88 99 110 12 24 36 48 60 72 84 96 108 120 -----------------------------------------
코드 핵심 포인트
#define COLMAX 10과#define ROWMAX 12처럼 매크로 상수를 사용하면 열과 행의 최대값을 한눈에 파악할 수 있고, 나중에 범위를 변경할 때도 유지보수가 쉽습니다.%4d서식 지정자는 숫자를 4칸 너비로 오른쪽 정렬하여 출력하기 때문에 표 형태의 결과물이 가지런히 정렬됩니다.- 내부 루프가 한 행의 출력을 모두 마치면
printf("\n")으로 줄을 바꾸고, 외부 루프 변수 row를 1 증가시켜 다음 단을 계산합니다. - do-while 문은 조건식을 검사하기 전에 본문을 먼저 실행하므로, 루프 본문이 최소 한 번은 반드시 실행된다는 특징이 있습니다.