题目如下
编写一个函数 void transpose(int (*matrix)[10], int n),实现对一个矩阵的前n行和前n列转置。先在主函数中初始化如下矩阵,然后输入n(n<10),调用transpose函数前n行n列的转置。
1 3 5 7 9 6 5 4 3 2
2 4 6 8 0 7 6 5 4 3
3 5 7 9 1 8 7 6 5 4
4 6 8 0 2 9 8 7 6 5
5 7 9 1 3 0 9 8 7 6
6 8 0 2 4 1 0 9 8 7
7 9 1 3 5 2 1 0 9 8
8 0 2 4 6 3 2 1 0 9
9 1 3 5 7 4 3 2 1 0
0 2 4 6 8 5 4 3 2 1
代码如下
在这里插入代码片
#include "stdio.h"
void transpose(int (*p)[10], int n)
{
int temp, i, j;
for( i=0;i<n;i++)
for(j=0;j<i;j++) //注意是j<i
{
temp=*(*(p+i)+j); //二维数组中元素的指针写法
*(*(p+i)+j)=*(*(p+j)+i);
*(*(p+j)+i)=temp;
}
}
int main()
{
//如何为二维数组赋初值
int a[10][10] ={
{1 ,3, 5, 7, 9, 6, 5, 4, 3, 2},
{2, 4, 6, 8, 0, 7, 6, 5, 4, 3},
{3, 5, 7, 9, 1, 8, 7, 6, 5, 4},
{4, 6, 8, 0, 2, 9, 8, 7, 6, 5},
{5, 7, 9, 1, 3, 0, 9, 8, 7, 6},
{6, 8, 0, 2, 4, 1, 0, 9, 8, 7},
{7, 9, 1, 3, 5, 2, 1, 0, 9, 8},
{8, 0, 2, 4, 6, 3, 2, 1, 0, 9},
{9, 1, 3, 5, 7, 4, 3, 2 ,1, 0},
{0, 2, 4, 6 ,8, 5, 4, 3, 2, 1}
};
int (*p)[10]; //定义数组p指向a
p = a;
int n;
scanf("%d", &n);
transpose(p, n);
for(int i=0; i<10; i++)
{
for(int j=0; j<10; j++)
{
printf("%d ", *(*(p+i)+j));
}
printf("\n"); //达到输出矩阵的目的
}
return 0;
}
哎,之前一直出错, 一直达到不了转置的效果, 结果后来发现是引用函数时前面多加了void, 难呀