你说的是矩阵转换吧,先说转一维这个方法
我先给你讲一下原理:
二维数组可以看成一位数组的集合,比如x[3][3],就可以看做,三个x[3]的集合
这种可以看成军训时站队,第一行第一列就x[0][0],那么第二行第一列,就是x[1][0];
如果我直接进行编号 我放弃二维数组的编号,第一行数完我接着数,第二行第一列,就变成x[3]也就是第四个。
我先给你看个比较容易理解的
int i,j,k=0;
for(i=0;ifor(j=0;j b[k++]=a[i][j];//两次循环把所有的数按顺序赋值到一维数组b里面,矩阵转置要改变位置
就以小键盘为例,行列转换,753不动,19,48,26,互换,最后就变成了741,852,963,
我给你加一下代码注释:
#include
int at(int a[],int n)
{
int i,j,t;
for(i=0; ifor(j=i+1; j {
t=a[i*n+j];//把a[1](8)的值给了t
a[i*n+j]=a[j*n+i];//把a[3](4)给了a[1],a[1]变成了4
a[j*n+i]=t;//8赋值给a[3],经过第一次转换,第一行变成了7,4,9,第二行变成了8,5,6
}/*
看不懂代码就用笨办法把数值带进去走一遍
这个代码一共要进行6次循环,其中三次都是多余
真正实现了转置的只有48,19,26三次。
所以你有兴趣可以继续学习快速转置。
*/
}
int main(void)
{
int x[3][3]= {7,8,9,4,5,6,1,2,3},i,j;
at(x,3);
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
printf("%d ",x[i][j]);
}
printf("\n");
}
return 0;
}
而且你截图里的部分代码出现了错误,我已帮你改正