矩阵转置

community_1185 2021-10-29 18:41:50

基于二维数组实现矩阵转置,以下选项对应(1)处缺失的代码,请判断哪一项无法实现矩阵转置。

#include <stdio.h>
#define LEN 101

void print_matrix(int mat[][LEN], int row, int col)
{
    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)
            printf("%d\t", mat[i][j]);
        printf("\n");
    }
}

int main(int argc, char** argv)
{
    int i, j, row, col, num, m[LEN][LEN], t[LEN][LEN];

    printf("请输入矩阵的行数(<=100):");
    scanf("%d", &row);
    printf("请输入矩阵的列数(<=100):");
    scanf("%d", &col);
    num = row * col;
    printf("请输入矩阵的元素(共%d个,空格分隔):\n", num);
    for (i = 0; i < row; ++i)
        for (j = 0; j < col; ++j)
            scanf("%d", &m[i][j]);

    printf("转置前:\n");
    print_matrix(m, row, col);

    (_____1_____)

    printf("转置后:\n");
    print_matrix(t, col, row);

    return 0;
}

矩阵转置图示:

矩阵转置图示


返回练习题答题页面

...全文
1524 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

错误答案明显有问题

瑶池酒剑仙 2022-12-13
  • 打赏
  • 举报
回复 1

主页或者专栏有助于学习高效C语言 https://blog.csdn.net/gzplyx?type=blog

CSDN-Ada助手 2023-04-28
  • 举报
回复
@瑶池酒剑仙 谢谢分享,确实有很多优秀的博主在C语言方面分享了很多实用的经验和技巧。同时,我们也推荐您在CSDN论坛上参与讨论,与更多的C语言爱好者交流学习心得。
️黑桃️ 2022-10-18
  • 打赏
  • 举报
回复
有大佬吗?想知道这里的*是什么意思?谢谢
codeJinger 2022-11-12
  • 举报
回复 1
@️黑桃️ 哪个位置的*? 这个题里*的意思有:解引用指针变量,两数相乘,还有标志这个变量是指针变量的意思
发霉馒头 2023-02-21
  • 举报
回复 3
@️黑桃️ 我猜你想问的是*(*(t+i)+j)这一句,具体是不是原句我懒得看了,大致意思一样就可以,这里可以分两部分来看。首先*(t+i),这个前面的数组中遇到过,如果t是一维数组,那么它表示t[i]这个数据,不加*的话t+i表示t[i]这个数据的地址,很不幸它是二维数组,那么与一维有什么区别呢?没有区别,这里仍然存了一个数据,存的是t[i]这一整行的头地址,这么说可能不好理解,换一种说法,二维数组是多个一维数组,t[i][j]表示的是某个元素的值,即第i个一维数组的第j个值,所以可以联想到t[i]存储的其实是第i个一维数组的头地址,然后再用下标j锁定数据,所以*(t+i)得到的是第i行的头地址,然后(*(t+i)+j)得到第i行第j列元素的地址,*(*(t+i)+j)则得到这个元素的值。所以在这里,两个*号都是解引用,只不过是存储的值的用法不一样。
发霉馒头 2023-02-22
  • 举报
回复 3
@发霉馒头 不好意思,t[i]存的不是第i个一维数组的头地址,而是整个一维数组的地址,不影响理解,但是说是头地址不严谨,但没有区别,一维数组的地址与头地址等价,**arr得到的仍然是arr[0][0]。
胖小邓 2022-07-14
  • 打赏
  • 举报
回复 1
for (i = 0; i < row; ++i)                         
    for (j = 0; j < col; ++j)
        *(*(t + j) + i) = *(*(m + i) + j);    
艳芬呀 2022-05-12
  • 打赏
  • 举报
回复 4

    for (i = 1; i <= row; ++i)                         //数组下标从0开始
        for (j = 1; j <= col; ++j)
            *(*(t + j) + i) = *(*(m + i) + j);    
//越界,且第一个没转换
木板ly 2022-04-20
  • 打赏
  • 举报
回复

    for (i = 1; i <= row; ++i)
        for (j = 1; j <= col; ++j)
            *(*(t + j) + i) = *(*(m + i) + j);
PKDDD 2021-12-07
  • 打赏
  • 举报
回复

错在下标不从0开始吗?

ly_1115 2022-01-24
  • 举报
回复
@PKDDD 感觉是少交换了一行

8

社区成员

发帖
与我相关
我的任务
社区管理员
  • community_1185
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧