C語言矩陣轉置
本實例是利用數組解決線性代數中的矩陣轉置問題。
設有一矩陣為 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 element\n");
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 開始;
② 類型說明符、數組名和常量表達式的意義與一維數組相同;
③ 二維數組的元素在內存中是“按行存放”,即在內存中先順序存放第一行的元素,再存放第二行的元素,以此類推;
④ 可以把二維數組看作一種特殊的一維數組,其特殊之處在于它的每一個元素又是一維數組。
- C語言兔子生兔子問題
- 假設一對兔子的成熟期是一個月,即一個月可長成成兔,那么,如果每對成兔每個月都生一對小兔
- 03-09 關注:0
- C語言矩陣轉置
- 本實例是利用數組解決線性代數中的矩陣轉置問題。
- 03-09 關注:0
- C語言求回文素數
- 任意的整數,當從左向右讀與從右向左讀是相同的,且為素數時,稱為回文素數。求 1000 以內的所有回文素數。
- 03-09 關注:0