qq_39701753 2022-12-09 21:13 采纳率: 100%
浏览 77
已结题

c语言矩阵变换用指针和函数编写

请问,这个关卡怎么写啊,C语言指针-矩阵变幻相关的。写个思路或者交换函数比如这种类型的

img


关卡要求

img

img

  • 写回答

2条回答 默认 最新

  • 关注

    swap那么写没问题,其他几个操作和可以封装成函数。
    运行结果:

    img

    代码:

    #include <stdio.h>
    
    int A[105][105];
    void swap(int *a,int* b)
    {
        int t = *a;
        *a = *b;
        *b = t;
    }
    
    //行翻转
    void row_invers(int x,int l,int r)
    {
        int i=l-1,j=r-1,t;
        x--;
        for(;i<j;i++,j--)
        {
            t = A[x][i];
            A[x][i] = A[x][j];
            A[x][j] = t;
        }
    }
    //列翻转
    void col_inverse(int y,int l,int r)
    {
        int i=l-1,j=r-1;
        int t;
        y--;
        for(;i<j;i++,j--)
        {
            t = A[i][y];
            A[i][y] = A[j][y];
            A[j][y] = t;
        }
    }
    
    //大小排序
    void sort(int x1,int y1,int x2,int y2,int x3,int y3)
    {
        int a = A[x1-1][y1-1];
        int b = A[x2-1][y2-1];
        int c = A[x3-1][y3-1];
    
        int max = a>(b>c?b:c)?a:(b>c?b:c);
        int min = a<(b<c?b:c)?a:(b<c?b:c);
        int mid = (a+b+c)-max-min;
    
        A[x1-1][y1-1] = min;
        A[x2-1][y2-1] = mid;
        A[x3-1][y3-1] = max;
    
    }
    
    
    
    int main()
    {
        int i,j;
        int n,m,q;
        int op,x,y,l,r;
        int x1,y1,x2,y2,x3,y3;
        scanf("%d %d %d",&n,&m,&q);
        //读取n*m个数
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
                scanf("%d",&A[i][j]);
        }
        //输入q次操作
        for(i=0;i<q;i++)
        {
            scanf("%d",&op);
            if(op == 1)
            {
                scanf("%d %d %d",&x,&l,&r);
                row_invers(x,l,r);
            }else if(op == 2)
            {
                scanf("%d %d %d",&y,&l,&r);
                col_inverse(y,l,r);
            }else if(op == 3)
            {
                scanf("%d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3);
                sort(x1,y1,x2,y2,x3,y3);
            }
        }
        //输出
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                if(j<m-1)
                    printf("%d ",A[i][j]);
                else
                    printf("%d\n",A[i][j]);
            }
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月17日
  • 已采纳回答 12月9日
  • 创建了问题 12月9日

悬赏问题

  • ¥15 对于这个复杂问题的解释说明
  • ¥50 三种调度算法报错 采用的你的方案
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败