Как я сказал в комментариях и как указано в ответе 4386427, ваше отображение неверно.
Для демонстрации:
#include <stdio.h>
#define ROW (2)
#define COLUMN (3)
void transpose(double m[], size_t rows, size_t cols, double r[])
{
for (size_t i = 0; i < rows; i += 1)
{
for (size_t j = 0; j < cols; j += 1)
{
printf("i = %zu, j = %zu --- Interchanging %lf with %lf\n", i, j, r[j * rows + i], m[i * cols + j]);
r[j * rows + i] = m[i * cols + j];
}
}
}
int main(void)
{
double m[ROW*COLUMN] = { 1, 2, 3, 4, 5, 6 };
double n[COLUMN*ROW] = { 7, 8, 9, 10, 11, 12 };
/*
* m -> 1 2 3
* 4 5 6
*
* n -> 7 8
* 9 10
* 11 12
*/
transpose(m, ROW, COLUMN, n);
printf("\nTranspose of matrix m is (in 1D form):\n");
for(int i = 0; i < ROW*COLUMN; i++)
{
printf("%lf ", n[i]);
}
printf("\n");
return 0;
}
Я также инициализировал вторую матрицу, чтобы увидеть, какое число идет куда.
Выход:
[root@localhost little_programs]# gcc -Wall -std=c99 -o matrix_T matrix_T.c
[root@localhost little_programs]# ./matrix_T
i = 0, j = 0 --- Interchanging 7.000000 with 1.000000
i = 0, j = 1 --- Interchanging 9.000000 with 2.000000
i = 0, j = 2 --- Interchanging 11.000000 with 3.000000
i = 1, j = 0 --- Interchanging 8.000000 with 4.000000
i = 1, j = 1 --- Interchanging 10.000000 with 5.000000
i = 1, j = 2 --- Interchanging 12.000000 with 6.000000
Transpose of matrix m is (in 1D form):
1.000000 4.000000 2.000000 5.000000 3.000000 6.000000
Тщательно осмотрите, что происходит на каждом шаге цикла, и вы увидите, что пошло не так.