C Program to Find Transpose of a Matrix

Updated on September 30, 2024
Find Transpose of a Matrix header image

Introduction

The transpose of a matrix is formed by flipping all elements of a matrix over its main diagonal, interchanging the row and column indices of the matrix. This operation is fundamental in various areas of computer science and mathematics, particularly in graphics transformations and solving systems of linear equations.

In this article, you will learn how to find the transpose of a matrix using a C program. Explore methods to develop a clear and efficient program that can handle matrices of variable sizes and apply it through practical examples.

Discovering the Transpose of a Matrix in C

Simple Example for a Static 3x3 Matrix

  1. Define a static 3x3 matrix.

  2. Initialize a 3x3 matrix for the transpose.

  3. Employ nested loops to swap the rows and columns.

    c
    #include <stdio.h>
    
    int main() {
        int A[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int transpose[3][3], i, j;
    
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                transpose[j][i] = A[i][j];
            }
        }
    
        printf("Transpose of the matrix:\n");
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                printf("%d ", transpose[i][j]);
            }
            printf("\n");
        }
    
        return 0;
    }
    

    This code snippet initializes a 3x3 matrix A and calculates its transpose by interchanging the indices in a nested loop. The result, transpose, is then printed row by row.

Handling a Dynamic-sized Matrix

  1. Use pointers to allocate memory dynamically for the matrix and its transpose.

  2. Prompt the user for matrix dimensions and elements.

  3. Implement nested loops to compute the transpose.

    c
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int **matrix, **transpose;
        int rows, cols, i, j;
    
        printf("Enter number of rows: ");
        scanf("%d", &rows);
        printf("Enter number of columns: ");
        scanf("%d", &cols);
    
        // Allocating memory for the matrix and transpose
        matrix = (int**)malloc(rows * sizeof(int*));
        transpose = (int**)malloc(cols * sizeof(int*));
        for (i = 0; i < rows; i++) {
            matrix[i] = (int*)malloc(cols * sizeof(int));
        }
        for (i = 0; i < cols; i++) {
            transpose[i] = (int*)malloc(rows * sizeof(int));
        }
    
        // Accepting values for the matrix
        printf("Enter elements of matrix:\n");
        for (i = 0; i < rows; i++) {
            for (j = 0; j < cols; j++) {
                scanf("%d", &matrix[i][j]);
            }
        }
    
        // Calculating the transpose
        for (i = 0; i < rows; i++) {
            for (j = 0; j < cols; j++) {
                transpose[j][i] = matrix[i][j];
            }
        }
    
        // Printing the transpose
        printf("Transpose of the matrix:\n");
        for (i = 0; i < cols; i++) {
            for (j = 0; j < rows; j++) {
                printf("%d ", transpose[i][j]);
            }
            printf("\n");
        }
    
        // Freeing allocated memory
        for (i = 0; i < rows; i++) {
            free(matrix[i]);
        }
        for (i = 0; i < cols; i++) {
            free(transpose[i]);
        }
        free(matrix);
        free(transpose);
    
        return 0;
    }
    

    In this example, dynamic memory allocation allows handling matrices of any size entered by the user. The transpose is computed and displayed, followed by freeing the allocated memory to prevent memory leaks.

Conclusion

Master the technique of computing the transpose of a matrix in C to deepen your understanding of array manipulations and memory management. The provided examples illustrate how to work with both static and dynamic matrices, ensuring you have the tools to handle varying scenarios in your programming tasks. By mastering these methods, you enhance your ability to develop efficient, flexible C programs for mathematical computations.