[C언어 소스] 행렬의 행과 열의 합계 및 평균 구하기

안녕하세요. 언제나 휴일에 언휴입니다. 이번 실습은 행렬의 행과 열의 합계 및 평균을 구하는 실습입니다. 사용자로부터 정방 행렬의 n값을 입력받고 행렬의 원소 값을 입력받습니다. 그리고 행렬의 각 행의 합계 및 열의 합계를 구하고 평균을 구하여 출력하는 실습입니다.
/* https://ehpub.co.kr
   언제나 C언어 예제 Center
   행렬의 행과 열의 합계 및 평균 구하기
*/

#include //memset. 
#include //malloc,free 
#include //printf,scanf_s 
int main()
{
    int n;    
    printf("정수 n을 입력 : ");
    scanf_s("%d", &n);//scanf_s는 scanf의 safe 버전입니다. 
    int* matrix;//동적으로 할당받은 메모리 주소를 기억할 변수     
    printf("행렬입력\n");
    //n*n 행렬의 값을 보관하기 위해 int 형식 크기* n*n 의 메모리 동적 할당 
    matrix = (int*)malloc(sizeof(int) * n * n);
    int row, col;    
    for (row = 0; row < n; row++)//0~n-1 까지 반복(n행) 
    {
        for (col = 0; col < n; col++)//0~n-1 까지 반복(n열) 
        {
            //matrix에서 row*n + col은 row,col의 값을 기억할 메모리 주소 
            scanf_s("%d", matrix + row * n + col);
        }
    }
    int row_sum;//행렬의 하나의 행의 합계를 기억할 변수     
    int* base_sum;//행렬의 각 열의 합계를 기억할 배열     
    printf("행렬의 합과 평균\n");
    //열의 합계를 기억하기 위한 메모리 동적 할당 
    //n*n 행렬이므로 n개의 열 값을 기억할 메모리 크기를 할당함 
    base_sum = (int*)malloc(sizeof(int) * n);
    memset(base_sum, 0, sizeof(int) * n);//할당한 메모리에 값을 0으로 초기화 
    for (row = 0; row < n; row++)//0~n-1 까지 반복(n행) 
    {
        row_sum = 0;
        for (col = 0; col < n; col++)//0~n-1 까지 반복(n열) 
        {
            //행렬의 row, col의 값을 출력 
            printf("%d \t", *(matrix + row * n + col));
            //행의 합계를 구하기 위해 행렬의 row, col의 값을 row_sum에 더함 
            row_sum += *(matrix + row * n + col);
            //열의 합계를 구하기 위해 행렬의 row,col의 값을 base_sum+col 이 가리키는 곳에 더함 
            *(base_sum + col) += *(matrix + row * n + col);
        }
        //행의 합계와 평균을 출력 
        //평균을 실수로 연산하기 위해 나누기 연산의 최소 하나는 실수형이어야 합니다. 
        //이를 위해 n을 double 형식으로 명시적으로 형변환하였습니다. (double)n 
        printf("%d\t %.1lf\n", row_sum, row_sum / (double)n);
        //%.1lf는 소수점 이하 1자리까지 출력하기 위한 포멧 사양입니다. 
    }
    int sum = 0;//행렬의 전체 합계를 기억할 변수, 0으로 초기화    
    for (col = 0; col < n; col++)
    {
        //sum에 행렬의 col행의 합계를 더함 
        sum += *(base_sum + col);
        printf("%d \t", *(base_sum + col));
    }
    printf("%d\t %.1lf\n", sum, sum / (double)n);

    double aver_sum=0;//행렬의 열의 평균의 합계를 기억할 변수 ,0으로 초기화 
    for (col = 0; col < n; col++)
    {
        //aver_sum에 각 열의 평균을 더함 
        aver_sum += *(base_sum + col) / 3.0;
        printf("%.1lf\t", *(base_sum + col) / 3.0);
    }
    printf("%.1lf\t %.1lf\n", aver_sum, aver_sum / n);
    return 0;
}
실행 결과
정수 n을 입력:3
행렬 입력
1 1 1 
2 2 2
3 3 3
행렬의 합과 평균
1 	1 	1 	3	 1.0
2 	2 	2 	6	 2.0
3 	3 	3 	9	 3.0
6 	6 	6 	18	 6.0
2.0	2.0	2.0	6.0	 2.0