8
社区成员




基于二维数组实现矩阵转置,以下选项对应(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;
}
矩阵转置图示:
错误答案明显有问题
主页或者专栏有助于学习高效C语言 https://blog.csdn.net/gzplyx?type=blog
for (i = 0; i < row; ++i)
for (j = 0; j < col; ++j)
*(*(t + j) + i) = *(*(m + i) + j);
for (i = 1; i <= row; ++i) //数组下标从0开始
for (j = 1; j <= col; ++j)
*(*(t + j) + i) = *(*(m + i) + j);
//越界,且第一个没转换
for (i = 1; i <= row; ++i)
for (j = 1; j <= col; ++j)
*(*(t + j) + i) = *(*(m + i) + j);