31.4 대각선으로 별 출력하기
이번에는 출력 부분을 수정하여 별을 대각선으로 그려보겠습니다.
star_diagonal.c
#include <stdio.h> int main() { for (int i = 0; i < 5; i++) // 5번 반복. 세로 방향 { for (int j = 0; j < 5; j++) // 5번 반복. 가로 방향 { if (j == i) // 세로 방향 변수와 같을 때 printf("*"); // 별 출력 } printf("\n"); // 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감 } return 0; }
가로 방향 변수와 세로 방향 변수가 같을 때만 별을 출력하면 왼쪽 위에서 오른쪽 아래 방향으로 별이 출력될 것입니다. 하지만, 별을 출력해보면 다음과 같이 세로로 출력이 됩니다.
실행 결과
* * * * *
콘솔에서는 문자 출력을 하지 않으면 다음 문자는 이전 위치에 출력되므로 모두 왼쪽으로 몰리게 됩니다. 따라서 다음과 같이 별을 출력하지 않는 부분에서 printf로 공백을 출력해주어야 별이 원하는 위치에 오게 됩니다.
star_diagonal.c
#include <stdio.h> int main() { for (int i = 0; i < 5; i++) // 5번 반복. 세로 방향 { for (int j = 0; j < 5; j++) // 5번 반복. 가로 방향 { if (j == i) // 세로 방향 변수와 같을 때 printf("*"); // 별 출력 else // 세로 방향 변수와 다를 때 printf(" "); // 공백 출력 } printf("\n"); // 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감 } return 0; }
실행 결과
* * * * *
별이 왼쪽 위에서 오른쪽 아래 방향인 대각선 모양으로 그려졌습니다. 가로 방향과 세로 방향의 변수 값이 같을 때 별을 출력하고, 같지 않을 때는 공백을 출력하였습니다.
지금까지 중첩 루프와 조건문을 활용하는 방법을 배웠는데 내용이 조금 어렵고 복잡했습니다. 사실 머리속으로 상상해서 조건식을 만들어내기는 쉽지 않습니다. 실제로는 <, >, <=, =>를 번갈아서 넣어보며 결과를 확인하는 경우가 많으므로 이해가 되지 않는다고 해서 걱정할 필요는 없습니다. 여기서 바깥쪽 루프는 세로 방향, 안쪽 루프는 가로 방향을 처리한다는 점만 기억하면 됩니다.