按题目要求编写完整功能代码,参考答案点击按钮展开
编写函数 fun,将 N×N 矩阵转置(行列互换),结果仍存于原数组。例如 1 2 3 / 4 5 6 / 7 8 9 → 1 4 7 / 2 5 8 / 3 6 9。
#include <stdio.h>
#define N 3
/* 函数功能:将 N×N 矩阵 a 转置(行列互换),结果仍存于 a。
请在下方编写 fun 函数体。 */
void fun(int a[][N])
{
/* 请在这里编写代码 */
}
int main()
{
int a[N][N] = {{1,2,3},{4,5,6},{7,8,9}};
int i, j;
fun(a);
for(i=0; i<N; i++)
{
for(j=0; j<N; j++) printf("%d ", a[i][j]);
printf("\n");
}
return 0;
}
void fun(int a[][N])
{
int i, j, t;
for(i=0; i<N; i++)
{
for(j=i+1; j<N; j++)
{
t = a[i][j];
a[i][j] = a[j][i];
a[j][i] = t;
}
}
}
考点:二维数组 + 元素交换。转置就是 a[i][j] 与 a[j][i] 互换。关键:内层循环 j 从 i+1 开始(只换上三角),不能从 0 开始,否则会换两次回到原样。用临时变量 t 做三方交换。N×N 方阵才能原地转置,M×N 需要 2 个数组。