编写以下三个子函数,完成矩阵转置:
(1) inputline(...),按行输入NX(NX=5)个整数,形成一行;
(2) reverse(...),对矩阵进行转置。
(3) outputline(...),输出一行的数据;
输入样例:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
在这里给出相应的输出。例如:
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
代码如下:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define NX 5
void inputline(int *p, int n)
{
int i;
for (i = 0; i < n; i++)
{
scanf("%d",p + i);
}//for
}//inputline
void reverse(int (*p)[NX], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (j > i)
{
int t = *(*(p + i) + j);
*(*(p + i) + j) = *(*(p + j) + i);
*(*(p + j) + i) = t;
}
}//for
}//for
}//reverse
void outputline(int *p, int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ", *(p + i));
}//for
}//outputline
int main()
{
int data[NX][NX];
// 输入
for (int i = 0; i < NX; i++) {
inputline(data[i], NX);
}
// 转置
reverse(data, NX);
// 输出
for (int i = 0; i < NX; i++) {
outputline(data[i], NX);
printf("\n");
}
return 0;
}