/* * 程序的版權和版本聲明部分: * Copyright (c) 2012, 煙台大學計算機學院 * All rights reserved. * 文件名稱:將一個5*5的矩陣中最大的元素放在中心,4個角分別放4個最小的元素.cpp * 作 者:毛通 * 完成日期:2013 年 1月16 日 * 版 本 號:v1.0 * 對任務及求解方法的描述部分: * 輸入描述:輸入25個數 * 問題描述: * 程序輸出:“將一個5*5的矩陣中最大的元素放在中心,4個角分別放4個最小的元素” */ [cpp] /* 將一個5*5的矩陣中最大的元素放在中心,4個角分別放4個最小的元素(按從左到右、從上到下順序依次從小到大存放), 寫一個函數實現 */ # include <iostream> # include <iomanip> using namespace std; int main() { void change (int *p); int a[5][5],*p,i,j; cout<<"input matrix" << endl; for (i=0;i<5;i++) for (j=0;j<5;j++) cin>>a[i][j]; p=&a[0][0]; cout << "您輸入的矩陣是:" <<endl; for (i=0;i<5;i++) { for (j=0;j<5;j++) cout << setw(6) <<a[i][j]; cout << endl; } change (p); cout << "now matrix" << endl; for (i=0;i<5;i++) { for (j=0;j<5;j++) cout <<setw(6)<< a[i][j]; cout << endl; } return 0; } void change (int *p) { int i,j,temp; int *pmax,*pmin; pmax=p; pmin=p; for (i=0;i<5;i++) //找最大和最小數的地址,賦給pmax和pmin for (j=0;j<5;j++) { if (*pmax < *(p+5*i+j)) pmax=p+5*i+j; //*(p+5*i+j)當*p=a[0][0]時可以實現 數組的遍歷 if (*pmin > *(p+5*i+j)) pmin=p+5*i+j; }//最大最小值的地址找到了 temp =*(p+12); //將最大值與中心元素互換 *(p+12)=*pmax; *pmax=temp; temp=*p;//將最小元素與左上角元素互換 *p=*pmin; *pmin=temp; pmin=p+1; //將a[0][1]的地址賦給pmin,從該位置開始找最小的元素 for (i=0;i<5;i++) for (j=0;j<5;j++) if (((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) //兩個條件:元素小於*pmin;元素不是第一個元素 pmin =p+5*i+j; //將第二最小值的地址賦給pmin temp =*pmin;//將第二最小值與右上角元素互換 *pmin=*(p+4); *(p+4)=temp; pmin=p+1; //將a[0][1]的地址賦給pmin,從該位置開始找最小的元素 for (i=0;i<5;i++) for (j=0;j<5;j++) if (((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&(*pmin>*(p+5*i+j))) //兩個條件:元素小於*pmin;元素不是第一個元素 pmin =p+5*i+j; //將第三最小值的地址賦給pmin temp =*pmin;//將第三最小值與右上角元素互換 *pmin=*(p+20); *(p+20)=temp; pmin=p+1; //將a[0][1]的地址賦給pmin,從該位置開始找最小的元素 for (i=0;i<5;i++) for (j=0;j<5;j++) if (((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))) //兩個條件:元素小於*pmin;元素不是第一個元素 pmin=p+5*i+j; //將第四最小值的地址賦給pmin temp =*pmin;//將第四最小值與右上角元素互換 *pmin=*(p+24); *(p+24)=temp; } /* 運行結果: */