C语言 用指针实现矩阵转置
题目如下 编写一个函数 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(" "); //达到输出矩阵的目的 } return 0; }
哎,之前一直出错, 一直达到不了转置的效果, 结果后来发现是引用函数时前面多加了void, 难呀
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
idea创建分支、合并分支、解决分支冲突