当前位置:首页 » 编程语言 » c语言函数矩阵转置

c语言函数矩阵转置

发布时间: 2022-12-22 15:51:53

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;

}

热点内容
警苑饭店wifi密码多少 发布:2024-05-16 18:04:51 浏览:449
致炫x自豪版有哪些配置 发布:2024-05-16 17:04:12 浏览:670
关掉密码要往哪里关 发布:2024-05-16 16:46:03 浏览:370
网站源码查杀 发布:2024-05-16 16:02:53 浏览:834
服务器不用导轨怎么办 发布:2024-05-16 15:49:09 浏览:180
如何查看pppoe密码 发布:2024-05-16 15:38:02 浏览:174
云服务器成本价大概多少 发布:2024-05-16 15:33:42 浏览:446
正式服海岛冰茶怎么配置 发布:2024-05-16 15:25:39 浏览:290
安卓怎么注销探探 发布:2024-05-16 15:24:38 浏览:960
ata72x是多大的压缩机 发布:2024-05-16 15:07:59 浏览:95