Java和C语言的矩阵转置我用的不同的方法
Java:创建一个辅助矩阵,将原矩阵按列输出,存入辅助矩阵中,得到原矩阵的转置矩阵。
package 数组;
public class 矩阵转置 {
public static void main(String[] args) {
int[][] nums = {{1,2,3},{5,6,7},{9,10,11}};
//其实这些都相等,矩阵转置只对对于方正?
int rows = nums[0].length;//转置后的行,是转置前的列
int cals = nums.length;//转置后的列,是转置前的行
int[][] after = new int[rows][cals];
//转置
int k = 0;
int s = 0;
for(int j = 0; j < nums[0].length; j++) {
for(int i = 0; i < nums.length; i++) {
after[k][s++] = nums[i][j];
if(s == cals) {
k++;
s = 0;
}
}
}
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cals; j++) {
System.out.print(after[i][j] + " ");
}
System.out.println();
}
}
}
C语言:C语言写的转置矩阵,是在原矩阵上进行转置,前提是这个矩阵要是方阵,因为是依据【方阵】的矩阵转置,对角线元素不变,其余元素转置后沿对角线对称。
#include <stdio.h>
int main()
{
int nums[3][3] = {1,2,3,4,5,6,7,8,9,10,11,12};
//在原矩阵上修改
int i,j,temp;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
if(j < i) {
temp = nums[i][j];
nums[i][j] = nums[j][i];//主对角线上下方的元素交换位置
nums[j][i] = temp;
}
}
}
for(i = 0; i < 3; i++) {
for(j = 0; j < 3; j++) {
printf("%d",nums[i][j]);
}
printf("\n");
}
return 0;
}