c語言函數矩陣轉置
① c語言矩陣轉置
//#include "stdafx.h" //////////////VC中沒有該頭文件
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
void shuru( int a[5][5]);
void zhuan(int a[5][5]);
int main(int argc, char* argv[])
{
int a[5][5];
shuru(a);//////////////////a[5][5]改成a
zhuan(a);///////////////a[5][5]改成a
return 0;
}
void shuru( int a[5][5])
{
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{a[i][j]=rand()%101;}/////////////random(101)改成rand()%101,取0-101的隨機數
}
printf("chushi:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
void zhuan(int a[5][5])
{
int t,i,j;
for(i=0;i<5;i++)
{
for(j=i;j<5;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
printf("wancheng:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
② 用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;
}
③ C語言-矩陣轉置
①目標
將一個二維數組表示的矩陣轉置
~
②命令行
#include<stdio.h>
#include< stdlib.h>
~
③定義函數
void fun(int array[3][3])
{int i,j,t;
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)
/*注意:只遍歷了矩陣的右上半部分。
如果for(j=0;j<3;j++,表示遍歷矩陣全部元素,右上與左下交換,左下又與右上交換,導致重復轉置,矩陣沒有變化。*/
{t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;}
/*交換語句,矩陣右上半部分,與對應左下半部分,元素交換,完成轉置*/
}
~
④主函數(調用)
void main()
{int i,j;
int array[3][3]={{1,2,3},{4,5,6},{7,8,9}};
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
/*輸出原矩陣,遍歷全部*/
printf("%7d",array[i][j]);
printf("\n");}
fun(array);
/*利用fun函數完成轉置*/
printf("converted array:\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");}
}
④ C語言 ,求轉置矩陣
根據數學定義可以知道,對於矩陣P,其第m行n列上的元素,是其轉置矩陣的n行m列元素。
從此可以得出程序如下:
#defineM10
#defineN5
//以10行5列為例,可以任意修改。
voidconvert(inta[M][N],intb[N][M])//求a的轉置矩陣,結果存於b中。
{
inti,j;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
b[j][i]=a[i][j];//轉置運算。
}
⑤ c語言如何通過定義函數來轉置矩陣
#include <stdio.h>
int main()
{ struct aaa
{ int x;
int y;
};
struct aaa t,a[3][3]= {0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2};
int i,j;
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
printf("after: ");
for(i=0; i<3; i++)
for(j=0; j<i; j++)
{ t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
return 0;
}
或:
#include <stdio.h>
struct aaa
{ int x;
int y;
};
void zhuan(struct aaa a[][3])
{ struct aaa t;
int i,j;
for(i=0; i<3; i++)
for(j=0; j<i; j++)
{ t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
void prt(struct aaa a[][3])
{ int i,j;
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
}
int main()
{ struct aaa a[3][3]= {0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2};
prt(a);
zhuan(a);
printf("after: ");
prt(a);
return 0;
}