矩陣的轉置編程
㈠ 編寫程序,實現矩陣(3行3列)的轉置(即行列互換)。
#include<stdio.h>
#define N 3
int arry[N][N],b[N][N];
int main(){
void merg(int arry[3][3]);
int a[3][3],i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++){
scanf("%d",&arry[i][j]);
}
printf("原始的矩陣為: ");
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%d ",arry[i][j]);
}
printf(" ");
}
printf(" ");
merg(arry);
printf("變換後的矩陣為: ");
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%d ",b[i][j]);
}
printf(" ");
}
}
void merg(int arry[3][3]){
int i,j,temp;
for(i=0;i<N;i++)
for(j=0;j<N;j++){
b[j][i]=arry[i][j];
}
}
(1)矩陣的轉置編程擴展閱讀:
for循環:
語句的一般形式為:
for (表達式1; 表達式2; 表達式3)
{
語句;
}
表達式1、表達式2和表達式3之間是用分號;隔開的,千萬不要寫成逗號。
for(表達式1;表達式2;表達式3)的後面千萬不要加分號。
執行過程:
求解表達式1。
求解表達式2。若其值為真,則執行 for 語句中指定的內嵌語句,然後執行第3步;若表達式2值為假,則結束循環,轉到第5步。
求解表達式3。
轉回上面第2步繼續執行。
循環結束,執行 for 語句下面的語句。
多層 for 循環:
執行過程與單個 for 循環的執行過程是一模一樣的。多層 for 循環將單個 for 循環大括弧中的「語句」換成了 for 循環。
㈡ 矩陣的快速轉置--數據結構
在進行矩陣快速轉置的過程中,首先需要定義一些基礎的數據結構。這里我們使用pot數組來記錄每一列的第一個元素在b數組中的位置。pot數組初始化如下:
pot[1]=0
pot[2]=1
pot[3]=2
接下來是矩陣M的定義,其中coL1、coL2、coL3分別表示列1、列2、列3。矩陣M如下:
row1 1 0 4
row2 0 2 3
對應的num數組用於記錄每個元素的值:
num[1]=1
num[2]=1
num[3]=2
轉置過程如下:
1. 初始化a數組,b數組用於存儲轉置後的矩陣。
2. 對於每一行進行遍歷,根據pot數組找到對應列的第一個元素在b數組中的位置,然後進行元素的賦值。
3. 第一次操作:b[pot[1]],pot[1]++
b[0] 1 1 1
4. 第二次操作:b[pot[3]],pot[3]++
b[1] 2 2 2
5. 第三次操作:b[pot[2]],pot[2]++
b[2] 3 1 4
6. 第四次操作:b[pot[3]],pot[3]++
b[3] 3 2 3
最終得到的b數組即為矩陣M的轉置結果:
a.data
b.data
㈢ 用C語言編寫一個矩陣轉置的函數,矩陣的行數和列數在程序中由用戶輸入,請問怎麼寫,非常感謝
我的代碼邏輯是:
矩陣行指針初值指向每行首地址,迭代依次取所有行指針指向值組成新行,所有行指針自增。最終組合新的矩陣。
#include<stdio.h>
#include<malloc.h>
int**getList(introw,intclo);//獲取矩陣地址空間
voidsetNum(int**nList,intn);//填寫數值
voidprtList(int**nList,introw,intclo);//列印矩陣
int**zz(int**nList,introw,intclo);//轉置函數
intmain()
{
introw,clo,**nList=NULL,**nListSave=NULL;
printf("輸入矩陣行列數:");
scanf("%d%d",&row,&clo);
nList=getList(row,clo);
setNum(nList,row*clo);
printf("輸入的矩陣為:
");
prtList(nList,row,clo);
printf("轉置後的矩陣為:
");
nListSave=zz(nList,row,clo);
free(nList);
nList=nListSave;
prtList(nList,clo,row);
return0;
}
int**zz(int**nList,introw,intclo)
{
int*nSave=NULL,**listSave=NULL,**listp=nList,*p=NULL,i,j;
nSave=(int*)malloc(sizeof(int)*row*clo);
listSave=(int**)malloc(sizeof(int*)*clo);//倒置後的矩陣
p=nSave;
for(j=0;j<clo;j++)
{
for(i=0;i<row;i++)
{
*p++=*listp[i];
listp[i]=listp[i]+1;
}
}
for(i=0;i<clo;i++)
listSave[i]=&nSave[i*row];
for(i=0;i<row;i++)
free(nList[i]);//釋放原矩陣行空間
returnlistSave;
}
voidprtList(int**nList,introw,intclo)
{
inti,j;
for(i=0;i<row;i++)
{
for(j=0;j<clo;j++)
printf("%d",nList[i][j]);
printf("
");
}
}
voidsetNum(int**nList,intn)
{
int*p=nList[0];
printf("填寫矩陣中%d個數值:
",n);
while(n-->0)
scanf("%d",p++);
}
int**getList(introw,intclo)
{
int*nums,**nList,i;
nums=(int*)malloc(sizeof(int)*row*clo);
nList=(int**)malloc(sizeof(int*)*row);
for(i=0;i<row;i++)
nList[i]=&nums[i*clo];
returnnList;
}
㈣ matlab的矩陣怎麼轉置
1、在命令行窗口中輸入「r = [ 1 2 3 4 ];tr = r'」,其中單引號(')是用於轉置操作的。