在学C语言 2021-10-31 11:13 采纳率: 86.4%
浏览 16
已结题

矩阵内元素处理 我的代码有问题


#include<stdio.h>
void swap(int*,int*);
void process(int *,int);
void arry(int*,int);
int main()
{   int a[5][5],i,j;
    for(i=0; i<5; i++)
    {   for(j=0; j<5; j++)
            scanf("%d",&a[i][j]);
    }
    process(*a,5);
    arry(*a,5);
    return 0;
}
void process(int *a,int n)
{   int i,max,min,max_i,min0,min1,min2,min3;
    max=min=a[0];
    max_i=min0=min1=min2=min3=0;
    for(i=0; i<n*n; i++)
        if(a[i]>max)
        {   max=a[i];
            max_i=i;
        }
    if(a[i]<min)
    {   min=a[i];
        min3=min2;
        min2=min1;
        min1=min0;
        min0=i;
    }
    swap(&a[n*n/2],&a[max_i]);
    swap(&a[0],&a[min0]);
    swap(&a[n-1],&a[min1]);
    swap(&a[(n-1)*n],&a[min2]);
    swap(&a[(n*n-1)],&a[min3]);
}
void swap(int*p,int*q)
{   int t=*p;
    *p=*q;
    *q=t;
}
void arry(int*a,int n)
{   for(int i=0; i<n; i++)
    {   for(int j=0; j<n; j++)
            printf("%5d",*(a+i*n+j));
        printf("\n");
    }
}

img

  • 写回答

1条回答 默认 最新

  • Autumn0923 2021-10-31 14:06
    关注

    我看了一下,你这个代码的选四个最小数有问题,当然你能把二维数组当成一维数组来处理,这确实是个不错的方法,我试了一个样例5 8 10 12 11 6 之后都输入100,你看看你这个还能选出最小的四个数据吗,所以我觉得你这个有点问题,而且你要遍历所有的数据的的话应该放到循环里,我看你没有放到循环里,可能是忘了加括号,当然你这个想法肯定是好的,但是简单的赋值是肯定没法选出最小值的,我想的办法就是,你先把这些数据都排序,但是不放到你创建的二维数组里,整一个新的二维数组,排序好之后存进去,存进去之后再把四个角的值一换,当然这样一改就出现问题了,就是你原本的数据还在里面,是替换,不是交换,所以你可以再搞一个把他们原本的数据位置都记下来,这样就可以实现很多的功能,当然我不知道还有没有别的方法,这可能有点麻烦

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月31日
  • 已采纳回答 10月31日
  • 创建了问题 10月31日

悬赏问题

  • ¥15 livecharts wpf piechart 属性
  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置