37.8 연습문제: 행렬의 주대각선 성분 구하기
다음 소스 코드를 완성하여 정사각행렬의 주대각선 성분이 출력되게 만드세요. 주대각선 성분은 왼쪽 위부터 오른쪽 아래까지 이어지는 대각선에 위치한 값을 말합니다.
practice_principal_diagonal_of_matrix.c
#include <stdio.h> int main() { int matrix[8][8] = { { 1, 2, 3, 4, 5, 6, 7, 8 }, { 9, 10, 11, 12, 13, 14, 15, 16 }, { 17, 18, 19, 20, 21, 22, 23, 24 }, { 25, 26, 27, 28, 29, 30, 31, 32 }, { 33, 34, 35, 36, 37, 38, 39, 40 }, { 41, 42, 43, 44, 45, 46, 47, 48 }, { 49, 50, 51, 52, 53, 54, 55, 56 }, { 57, 58, 59, 60, 61, 62, 63, 64 } }; ____________________________________________________________ ... ____________________________________________________________ return 0; }
실행 결과
1 10 19 28 37 46 55 64
정답
for (int m = 0; m < sizeof(matrix) / sizeof(matrix[0]); m++) { printf("%d ", matrix[m][m]); }
해설
먼저 행렬의 주대각선에 위치한 값들의 규칙을 살펴봅니다. 1 10 19 28 37 46 55 64의 행, 열 위치값은 서로 같으며 0부터 1씩 증가한다는 것을 알 수 있습니다.
따라서 반복문으로 행(m)을 출력하면서 배열의 세로 인덱스와 가로 인덱스에 m값을 넣어주면 됩니다(행렬의 세로 크기(행)는 배열이 차지하는 전체 공간을 가로 크기(열)로 나눠주면 됩니다).