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을 할당해주면 됩니다.