当前位置:首页 » 编程软件 » 矩阵的转置编程

矩阵的转置编程

发布时间: 2025-01-03 08:24:24

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

热点内容
服务器数据库类型 发布:2025-01-05 12:59:32 浏览:416
编译原理移植 发布:2025-01-05 12:49:16 浏览:318
android开屏 发布:2025-01-05 12:43:54 浏览:289
win7用户文件夹 发布:2025-01-05 12:42:30 浏览:621
java培训班南京 发布:2025-01-05 12:29:36 浏览:732
Idea自动编译是什么 发布:2025-01-05 12:28:02 浏览:527
考试笔试编程 发布:2025-01-05 12:15:45 浏览:157
变量配置是什么意思 发布:2025-01-05 12:15:42 浏览:280
行李箱装什么密码锁好 发布:2025-01-05 12:14:57 浏览:976
家用无线存储 发布:2025-01-05 12:14:47 浏览:620