矩阵的转置编程
㈠ 编写程序,实现矩阵(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'”,其中单引号(')是用于转置操作的。