C語言矩陣轉置

2020-07-16 10:04:28
本範例是利用陣列解決線性代數中的矩陣轉置問題。

設有一矩陣為 m×n 階(即 m 行 n 列),第 i 行 j 列的元素是 a(i,j),需要將該矩陣轉置為 n×m 階的矩陣,使其中元素滿足 b(j,i)=a(i,j)。

演算法思想

由數學知識可知,將第一個矩陣的所有元素繞著一條從第一行第一列出發的右下角 45° 的射線做鏡面反轉,即可得到該矩陣的轉置。

程式程式碼

#include <stdio.h>
int main()
{
    int i,j,i1,j1,a[101][101],b[101][101];
    printf("please input the number of rows(<=100)n");
    scanf("%d",&i1);
    printf("please input the number of columns(<=100)n");
    scanf("%d",&j1);
    printf("please input the elementn");
    for(i=0;i<i1;i++)
        for(j=0;j<j1;j++)
            scanf("%d",&a[i][j]);
    printf("array a:n");
    for(i=0;i<i1;i++)
    {
        for(j=0;j<j1;j++)
            printf("t%d",a[i][j]);
        printf("n");
    }
    for(i=0;i<i1;i++)
        for(j=0;j<j1;j++)
            b[j][i]=a[i][j];
    printf("array b:n");
    for(i=0;i<j1;i++)
    {
        for(j=0;j<i1;j++)
            printf("t%d",b[i][j]);
        printf("n");
    }
    return 0;
}

偵錯執行結果

在本範例中,需要自定義第一個陣列(程式中的陣列即代表數學中的矩陣),也就是需要轉置運算的陣列 A,定義分三個步驟進行:第一步,定義該陣列的行數;第二步,定義該陣列的列數;第三步,定義該陣列的元素,然後被定義的陣列經過程式的運算,輸出轉置後的陣列 B。程式的執行結果如下所示:

please input the number of rows(<=100)
3
please input the number of columns(<=100)
4
please input the element
1 2 3 4 5 6 7 8 9 10 11 12
array a:
        1       2       3       4
        5       6       7       8
        9       10      11      12
array b:
        1       5       9
        2       6       10
        3       7       11
        4       8       12

總結

在本範例中,主要運用了二維陣列,二維陣列的使用說明如下:

① 二維陣列的第一個下標表示行數,第二個下標表示列數,每個下標都是從 0 開始;

② 型別說明符、陣列名和常數表示式的意義與一維陣列相同;

③ 二維陣列的元素在記憶體中是“按行存放”,即在記憶體中先順序存放第一行的元素,再存放第二行的元素,以此類推;

④ 可以把二維陣列看作一種特殊的一維陣列,其特殊之處在於它的每一個元素又是一維陣列。