用指向一维数组的指针变量即二维数组的行指针作为函数参数,实现矩阵转置。按如下函数原型编程计算并输出m×n阶矩阵的转置矩阵。其中,m和n的值由用户从键盘输入。已知m和n的值都不超过10。 void Transpose(int (*a)[N], int (*at)[M], int m, int n); void InputMatrix(int (*a)[N], int m, int n); void PrintMatrix(int (*at)[M], int n, int m); 输入提示信息:"Input m, n:" 输入格式:"%d,%d" 输入提示信息:"Input %d*%d matrix:\n" 输出提示信息和格式:"The transposed matrix is:\n" 输出格式:"%d\t" 程序测试用例: Input m, n:3,4 Input 3*4 matrix: 1 2 3 4 5 6 7 8 9 10 11 12 The transposed matrix is: 1 5 9 2 6 10 3 7 11 4 8 12
时间: 2024-03-26 21:39:33 浏览: 93
好的,我理解了你的问题。以下是实现矩阵转置的代码:
```c++
#include <stdio.h>
#define M 10
#define N 10
void Transpose(int (*a)[N], int (*at)[M], int m, int n);
void InputMatrix(int (*a)[N], int m, int n);
void PrintMatrix(int (*at)[M], int n, int m);
int main()
{
int a[M][N], at[N][M];
int m, n;
printf("Input m, n:");
scanf("%d,%d", &m, &n);
InputMatrix(a, m, n);
Transpose(a, at, m, n);
printf("The transposed matrix is:\n");
PrintMatrix(at, n, m);
return 0;
}
void Transpose(int (*a)[N], int (*at)[M], int m, int n)
{
int i, j;
for(i = 0; i < n; i++){
for(j = 0; j < m; j++){
at[i][j] = a[j][i];
}
}
}
void InputMatrix(int (*a)[N], int m, int n)
{
int i, j;
printf("Input %d*%d matrix:\n", m, n);
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
scanf("%d", &a[i][j]);
}
}
}
void PrintMatrix(int (*at)[M], int n, int m)
{
int i, j;
for(i = 0; i < n; i++){
for(j = 0; j < m; j++){
printf("%d\t", at[i][j]);
}
printf("\n");
}
}
```
输入格式为"%d,%d",表示以逗号隔开的两个整数,分别为矩阵的行数和列数。输入格式为"%d\t",表示每个元素输出后紧接着一个制表符。
阅读全文