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("\n");  //达到输出矩阵的目的
    }
     return 0;

}



哎,之前一直出错, 一直达到不了转置的效果, 结果后来发现是引用函数时前面多加了void, 难呀

  • 12
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值