当前位置:编程学习 > C/C++ >>

将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素

/*  
* 程序的版权和版本声明部分:  
* 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;  
  
  
}  
 
/*
运行结果:
 
 
*/
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,