芒果芭乐 2024-06-18 13:16 采纳率: 90.2%
浏览 1
已结题

怎么实现矩阵转置呢?

img

img


如图内容是题设要求,怎么可以实现矩阵转置的作用呢

#include <stdio.h>      //原本题目所给的代码!!!!!!!!!!!! 
#define ROW 3
#define COL 4
void Transpose(int* a, int* at, int row, int col);
void InputMatrix(int* s, int row, int col);
void PrintMatrix(int* s, int row, int col);
int main(void)
{
    int s[ROW][COL];                //s代表原矩阵
    int st[COL][ROW];                //st代表转置后的矩阵
//    printf("Please enter matrix:\n");
    /***********begin**********/
    //输入原矩阵,*s指向矩阵s的0行0列,是列指针


    /***********end**********/

    /***********begin**********/
    //对矩阵s进行转置,结果存放于st中

    /***********end**********/
//    printf("The transposed matrix is:\n");
    /***********begin**********/
    //输出转置矩阵,*st指向st的0行0列,是列指针


    /***********end**********/
    
    return 0;
}
//函数功能: 对任意row行col列的矩阵a转置,转置后的矩阵为at
void Transpose(int* a, int* at, int row, int col)
{
    /***********begin**********/
  



    /***********end**********/    

}
void InputMatrix(int* s, int row, int col)   //输入矩阵元素
{
    int i, j;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            scanf("%d", s + i * col + j);        //这里s+i*col+j等价于&s[i][j]
        }
    }
}
void PrintMatrix(int* s, int row, int col)  //输入矩阵元素
{
    int i, j;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            printf("%d\t", *(s + i * col + j));//这里*(s+i*col+j)等价于s[i][j]
        }
        printf(" \n");
    }
}




  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-18 13:16
    关注

    引自免费微信小程序:皆我百晓生

    为了实现矩阵转置,我们可以利用已经定义好的Transpose函数,并在main函数中调用InputMatrixPrintMatrix函数来输入和输出矩阵。以下是完整的代码实现:

    #include <stdio.h>
    #define ROW 3
    #define COL 4
    
    // 函数原型声明
    void Transpose(int* a, int* at, int row, int col);
    void InputMatrix(int* s, int row, int col);
    void PrintMatrix(int* s, int row, int col);
    
    int main(void)
    {
        int s[ROW][COL];                // 原始矩阵
        int st[COL][ROW];               // 转置后矩阵
    
        // 输入原始矩阵
        InputMatrix((int*)s, ROW, COL);
    
        // 调用Transpose函数进行矩阵转置
        Transpose((int*)s, (int*)st, ROW, COL);
    
        // 输出转置后的矩阵
        PrintMatrix((int*)st, COL, ROW);
    
        return 0;
    }
    
    // 实现矩阵转置功能
    void Transpose(int* a, int* at, int row, int col)
    {
        int i, j;
        for (i = 0; i < row; i++)
        {
            for (j = 0; j < col; j++)
            {
                // 矩阵元素交换位置实现转置
                *(at + j * row + i) = *(a + i * col + j);
            }
        }
    }
    
    // 输入矩阵元素
    void InputMatrix(int* s, int row, int col)
    {
        int i, j;
        for (i = 0; i < row; i++)
        {
            for (j = 0; j < col; j++)
            {
                scanf("%d", s + i * col + j);
            }
        }
    }
    
    // 输出矩阵元素
    void PrintMatrix(int* s, int row, int col)
    {
        int i, j;
        for (i = 0; i < row; i++)
        {
            for (j = 0; j < col; j++)
            {
                printf("%d\t", *(s + i * col + j));
            }
            printf("\n");
        }
    }
    

    这段代码首先定义了两个二维数组sst,分别用于存储原始矩阵和转置后的矩阵。在main函数中,首先调用InputMatrix函数输入原始矩阵s的元素,然后调用Transpose函数将s转置到st,最后通过PrintMatrix函数输出转置后的矩阵st

    Transpose函数实现了矩阵的转置操作,通过双重循环遍历原始矩阵的每个元素,并将其正确放置到转置矩阵中的对应位置。注意在访问一维数组sst时,使用了行优先的顺序,即i * col + j,这与二维数组的内存布局相匹配。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月18日
  • 创建了问题 6月18日

悬赏问题

  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘
  • ¥15 抖音直播广场scheme
  • ¥15 为什么我明明有这个文件调试器还显示错误?
  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41