二级C语言 程序设计题

按题目要求编写完整功能代码,参考答案点击按钮展开

77程序设计题:二维数组转置(行列互换)

编写函数 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 个数组。