본문 바로가기
Programming/C

[C언어] 동적 2차원 배열, 행렬 곱 연산

by 고간디 2024. 3. 25.

[동아리] A반 6차 2일 과제 (2024.03.22)

동적 2차원 배열

동적 2차원 배열을 만들고 배열에 값을 넣은 후 출력하기

프로그램이 끝나기 전 꼭 남김없이 free 해주기

#include <stdio.h>
#include <stdlib.h>

int main() {
    int row, col;
    
    printf("행의 수를 입력하세요: ");
    scanf("%d", &row);
    
    printf("열의 수를 입력하세요: ");
    scanf("%d", &col);
    
    int** matrix = (int**)malloc(sizeof(int*) * col);
    
    for (int i=0;i<row;i++) {
        matrix[i] = (int*)malloc(sizeof(int) * row);
    }
    
    for (int x=0;x<row;x++) {
        for (int y=0;y<col;y++) {
            printf("matrix[%d][%d]: ", x, y);
            scanf("%d", &matrix[x][y]);
        }
    }
    
    for (int h=0;h<row;h++) {
        for (int z=0;z<col;z++) {
            printf("%d ", matrix[h][z]);
        }
        printf("\n");
        free(matrix[h]);
    }
    free(matrix);
    
    

    return 0;
}

 

행렬 곱 연산

선형대수학의 행렬 곱 연산을 구현하기

유저에게서 두 개의 행렬의 행과 열 값을 받아 두 행렬 만들고

두 행렬을 곱하여 나온 행렬 출력

프로그램이 끝나기 전 남김없이 모두 free해주기

 

행렬 곱 연산을 할 수 없을 경우 연산 불가 메세지 출력하기

#include <stdio.h>
#include <stdlib.h>

int main() {
    int row1, row2, col1, col2;
    
    printf("첫 번째 행렬의 행의 수를 입력하세요: ");
    scanf("%d", &row1);
    
    printf("첫 번째 행렬의 열의 수를 입력하세요: ");
    scanf("%d", &col1);
    
    printf("두 번째 행렬의 행의 수를 입력하세요: ");
    scanf("%d", &row2);
    
    printf("두 번째 행렬의 열의 수를 입력하세요: ");
    scanf("%d", &col2);
    
    // 첫 번째 행렬
    int** matrix1 = (int**)malloc(sizeof(int*) * col1);
    int** matrix2 = (int**)malloc(sizeof(int*) * col2);
    for (int i1=0;i1<row1;i1++) matrix1[i1] = (int*)malloc(sizeof(int) * row1);
    for (int i2=0;i2<row2;i2++) matrix2[i2] = (int*)malloc(sizeof(int) * row2);
    
    printf("첫 번째 행렬의 값을 입력하세요 (%d * %d)\n", row1, col1);
    for (int x1=0;x1<row1;x1++) for (int y1=0;y1<col1;y1++) scanf("%d", &matrix1[x1][y1]);
    printf("두 번째 행렬의 값을 입력하세요 (%d * %d)\n", row2, col2);
    for (int x2=0;x2<row2;x2++) for (int y2=0;y2<col2;y2++) scanf("%d", &matrix2[x2][y2]);
    
    if (col1 != row2) {
        printf("두 행렬의 곱셈이 불가능합니다.");
    }  
    else {
        printf("행렬 곱셈 결과: \n");
        for (int u=0;u<row1;u++) {
            for (int t=0;t<col2;t++) {
                int result = 0;
                for (int r=0;r<row1;r++) {
                    result += matrix1[r][u] * matrix2[t][r];
                }
                printf("%d ", result);
            }
            printf("\n");
        }
    }
    for (int q=0;q<row1;q++) {
        free(matrix1[q]);
        free(matrix2[q]);
    }
    free(matrix1);
    free(matrix2);

    return 0;
}
728x90
반응형

댓글