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