C语言-矩阵转置

Python027

C语言-矩阵转置,第1张

①目标

将一个二维数组表示的矩阵转置

②命令行

#include<stdio.h>

#include<stdlib.h>

~

③定义函数

void fun(int array[3][3])

{int i,j,t

for(i=0i<3i++)

for(j=i+1j<3j++)

/*注意:只遍历了矩阵的右上半部分。

如果for(j=0j<3j++,表示遍历矩阵全部元素,右上与左下交换,左下又与右上交换,导致重复转置,矩阵没有变化。*/

{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=0i<3i++)

{for(j=0j<3j++)

/*输出原矩阵,遍历全部*/

printf("%7d",array[i][j])

printf("\n")}

fun(array)

/*利用fun函数完成转置*/

printf("converted array:\n")

for(i=0i<3i++)

{for(j=0j<3j++)

printf("%7d",array[i][j])

printf("\n")}

}

c不可以用变量来声明数组吧,你定义int cp那里就不对。

要么数组大小是常值(自己定一个可能的最大值,多余的部分不用就是了)

要么自己写malloc申请空间

要么出门右转c++

其次cp的下标不能等于row/column,也就是前面for里面应该是<而不是<=,那a/b就应该从0开始。

暂时看了这么多,下面你自己再改改吧

二维数组的第一维(就是后面一个[])作为行,第二维(就是前面一个[])作为列,这是一种惯用理解方式。你的理解恰好把行和列反了一下。

这种理解方式也不是没有原因的,一维数组我们叫一行,可以用元素指针自增自减的方式遍历整个行,但我们不能用元素指针自增自减来遍历二维数组的整个列。