64.5 연습문제: 단위행렬 만들기
다음 소스 코드를 완성하여 단위행렬을 만드세요. 단위행렬은 왼쪽 위부터 오른쪽 아래까지의 대각선(주대각선)이 1이며 나머지는 모두 0인 행렬입니다.
practice_identity_matrix.c
#include <stdio.h> ___________________________________________ ... ___________________________________________ int main() { float matrix[4][4] = { 0.0f, }; int n = sizeof(matrix[0]) / sizeof(float); setIdentityMatrix(matrix, n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%f ", matrix[i][j]); } printf("\n"); } return 0; }
실행 결과
1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000
정답
void setIdentityMatrix(float m[][4], int n) 또는 void setIdentityMatrix(float (*m)[4], int n) { for (int i = 0; i < n; i++) { m[i][i] = 1.0f; } }
해설
함수에서 행렬(2차원 배열)을 매개변수로 사용하려면 매개변수 뒤에 대괄호를 두 개 붙이거나 배열의 포인터로 만들고 가로 크기를 지정해야 합니다. 여기서 행렬은 float형이고 가로 크기가 4이므로 매개변수는 float m[][4] 또는 float (*m)[4]가 됩니다. 그리고 행렬의 크기 n 매개변수도 함께 지정해줍니다.
단위행렬은 주대각선의 행과 열의 위치가 서로 같으며 0부터 1씩 증가합니다. 따라서 setIdentityMatrix 함수 안에서 반복문으로 n만큼 반복하면서 배열의 가로 인덱스와 세로 인덱스에 i를 지정한 뒤 1.0을 할당해주면 됩니다.