10.10 将一个5×5的矩阵中最大的元素放在中心,4个角分别放在4个最小的元素(按从左到右,从上到下的顺序,依次从小到大存放),写一个函数实现之,并用main函数调用。


10.10 将一个5×5的矩阵中最大的元素放在中心,4个角分别放在4个最小的元素(按从左到右,从上到下的顺序,依次从小到大存放),写一个函数实现之,并用main函数调用。

#include <stdio.h>

int main(){
    void change(int * p);
    int num[5][5];
    int i,j,* p;
    p=&num[0][0];
    printf("请输入矩阵的值:\n");
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            scanf("%d",&num[i][j]);
        }
    }
        //输出原来的矩阵
        printf("所输入的矩阵为:\n");
        for(i=0; i<5; i++){
            for(j=0; j<5; j++){
                printf("%3d",num[i][j]);
            }
            printf("\n");
        }
    //调用函数
    change(p);
        //输出调整后的矩阵
        printf("按要求调整后的矩阵为:\n");
        for(i=0; i<5; i++){
            for(j=0; j<5; j++){
                printf("%3d",num[i][j]);
            }
            printf("\n");
        }
    return 0;
}

void change(int * p){
    //printf("%d\n",p[3]);
    //找到最大值,并放到中间
    int i,j,t,* max=p;
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            if(* max < * (p+i*5+j)) max=p+i*5+j;
        }
    }
    t=*(p+2*5+2);
    *(p+2*5+2)=*max;
    *max=t;

    int * min=p;
    //找到最小的值
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            if(*min > * (p+i*5+j)){
                min=p+i*5+j;
            }
        }
    }
    //最小的值和第一个元素交换
    t=*min;
    *min=*p;
    *p=t;
    
    min=p+1;//从第二个元素开始

    //找到次小的值
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            if(i==0 && j==0) continue;
            else if(*min > *(p+i*5+j)){
                    min=p+i*5+j;
                }
            }
    }
    //次小的值和第5个元素交换
    t=*min;
    *min=*(p+4);
    *(p+4)=t;
    min=p+1;//从第二个元素开始

    //找到第三小的值
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            if((i==0 && j==0) || (i==0 && j==4)) continue;
            else if(*min > *(p+i*5+j)){
                    min=p+i*5+j;
                }
            }
    }
    //第三小的值和第21个元素交换
    t=*min;
    *min=*(p+20);
    *(p+20)=t;
    min=p+1;//从第二个元素开始

    //找到第四小的值
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            if((i==0 && j==0) || (i==0 && j==4) || (i==4 && j==0)) continue;
            else if(*min > *(p+i*5+j)){
                    min=p+i*5+j;
                }
            }
    }
    //第四小的值和第25个元素交换
    t=*min;
    *min=*(p+24);
    *(p+24)=t;
}

 

结果:


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用 将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用 实验9 指针1 1、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。 实验9(1)程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。 Leetcode练习(Python):二分查找类:第240题:搜索二维矩阵 II:编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二维数组中的查找:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 在一个C程序中,main()函数可以放在哪?
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM