orer.h
/*****************************************************************************
* FileName : order.h
* Date : 2005/03/08
* Author : Liuzhimao
* Module :
* Description :
*
* Copyright (c) 2005 Neusoft Co. Ltd. All Rights Reserved.
*-----------------------------------------------------------------------------
* Edit History
* NO Date Modifier Modified Content
* 1 2005/03/08 troy Basic definition
*
*****************************************************************************/
#ifndef _ORDER_H
#define _ORDER_H
/*****************************************************************************
* Marco Definition *
*****************************************************************************/
#define M 5
/*****************************************************************************
* Function Definition *
*****************************************************************************/
void InputData( int Matrix[M][M] );
void OutputData( int Matrix[M][M] );
void Swap( int Matrix[M][M], /* 输入存放的二维数组 */
int value, /* 要交换的最小值和最大值 */
int pos, /* 在二维数组中的交换位置 */
int tmpTable[M*M], /* 一维临时数组,用于判断交换位置是否可用 */
int max /* 输入值中的最大值 */
);
void Order(int Matrix[M][M]);
#endif
order.c
/********************************************************************************
* 将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素 *
* (顺序从左到右,从上到下顺序依次从小到大存放),写一个函数实现之, *
* 用main函数调用。 *
* 例如原来矩阵: *
* 35 34 33 32 31 *
* 30 29 28 27 26 *
* 25 24 23 22 21 *
* 20 19 18 17 16 *
* 15 14 13 12 11 *
* 改变后的矩阵 *
* 11 34 33 32 12 *
* 30 29 28 27 26 *
* 25 24 35 22 21 *
* 20 19 18 17 16 *
* 13 23 15 31 14 *
*********************************************************************************/
/*****************************************************************************
* FileName : Order.c
* Date : 2005/03/08
* Author : troy
* Module :
* Description :
*
* Copyright (c) 2005 Neusoft Co. Ltd. All Rights Reserved.
*-----------------------------------------------------------------------------
* Edit History
* NO Date Modifier Modified Content
* 1 2005/03/08 troy Basic definition
* 2 2005/09/10 troy 修正了格式,以及一个bug
*****************************************************************************/
/*****************************************************************************
* Included header file(s) *
*****************************************************************************/
#include <stdio.h>
#include <string.h>
#include "order.h"
/****************************************************************************
* Function Name : InputData
* Description : Input data into Matrix
* Input Parameters : Matrix[M][M]
* Output Parameters: Matrix[M][M]
* Return Value : None
* Caller :
* Date : 2005/03/08
* Author : troy
*****************************************************************************/
void InputData( int Matrix[M][M] )
{
int i,j; /* 循环计数 */
printf( "/nPlease input data:/n" );
for(i=0; i<M; i++)
{
for(j=0; j<M; j++)
{
scanf( "%d", &(Matrix[i][j]) );
}
}
printf( "/nThe matrix you input is:/n" );
}
/****************************************************************************
* Function Name : OutputData
* Description : Output Matrix to screen
* Input Parameters : Matrix[M][M]
* Output Parameters: Matrix[M][M]
* Return Value : None
* Caller :
* Date : 2005/03/08
* Author : troy
*****************************************************************************/
void OutputData( int Matrix[M][M] )
{
int i,j; /* 循环计数 */
for( i=0; i<M; i++ )
{
for(j=0; j<M; j++)
{
printf( "%-2d ", Matrix[i][j] );
}
printf("/n");
}
}
/*****************************************************************************
* Function Name : Swap
* Description : Program entry
* Input Parameters : Matrix[M][M] 输入存放的二维数组
value 要交换的最小值和最大值
pos 在二维数组中的交换位置
tmpTable[M*M] 一维临时数组,用于判断交换位置是否可用
max 输入值中的最大值
* Output Parameters : Matrix[M][M]
tmpTable[M*M]
* Return Value : None
* Caller :
* Date : 2005/03/08
* Author : troy
*****************************************************************************/
void Swap(
int Matrix[M][M], /* 输入存放的二维数组 */
int value, /* 要交换的最小值和最大值 */
int pos, /* 在二维数组中的交换位置 */
int tmpTable[M*M], /* 一维临时数组,用于判断交换位置是否可用 */
int max /* 输入值中的最大值 */
)
{
int tmp; /* 数据交换时的临时变量 */
int i,j; /* 循环计数 */
/* 用找出的值与原表相应的位置进行交换 */
for (i = 0;i < M;i++)
{
for (j = 0;j < M;j++)
{
if( value == Matrix[i][j] && 0 == tmpTable[i*M + j] )
{
tmp = Matrix[pos/M][pos%M];
Matrix[pos/M][pos%M] = value;
Matrix[i][j] = tmp;
if(Matrix[i][j] != max)
{
tmpTable[i*5+j] = 1;
}
else
{
tmpTable[i*5+j] = 0;
}
tmpTable[pos] = 1;
return;
}
}
}
}
/*****************************************************************************
* Function Name : order
* Description : Program entry
* Input Parameters : Matrix[M][M]
* Output Parameters: Matrix[M][M]
* Return Value : None
* Caller :
* Date : 2005/03/08
* Author : troy
*****************************************************************************/
void Order(int Matrix[M][M])
{
int tmpTable[M*M]; /* 将二维数组变换成一维时的存储 */
int i,j; /* 循环计数 */
int tmp; /* 查找交换时的临时变量 */
int temp[5]; /* 存储4个最小值和一个最大值 */
/* 将原表复制到一维数组中 */
for(i = 0; i < M; i++)
{
for(j = 0; j < M; j++)
{
tmpTable[i*M + j] = Matrix[i][j];
}
}
/* 找出最大值,起泡到一维数组的最后 */
for(i = 0; i < M*M -1; i++)
{
if(tmpTable[i] > tmpTable[i + 1])
{
tmp = tmpTable[i];
tmpTable[i] = tmpTable[i + 1];
tmpTable[i + 1] = tmp;
}
}
/* 找出4个最小值,依次放到一维数组最前面四个数据域 */
for(i = 0; i < 4; i++)
{
for(j = i + 1; j < M*M; j++)
{
if(tmpTable[i] > tmpTable[j])
{
tmp = tmpTable[i];
tmpTable[i] = tmpTable[j];
tmpTable[j] = tmp;
}
}
}
/* 将4个最小值和一个最大值存入临时数组temp中 */
{
temp[0] = tmpTable[0];
temp[1] = tmpTable[1];
temp[2] = tmpTable[2];
temp[3] = tmpTable[3];
temp[4] = tmpTable[M*M-1];
}
for(i = 0; i < M*M; i++)
{
tmpTable[i] = 0;
}
/* 进行5轮位置交换 */
{
Swap( Matrix,temp[0],0,tmpTable,temp[4] );
Swap( Matrix,temp[1],M-1,tmpTable,temp[4] );
Swap( Matrix,temp[2],M*M-M,tmpTable,temp[4] );
Swap( Matrix,temp[3],M*M-1,tmpTable,temp[4] );
Swap( Matrix,temp[4],(M*M-1)/2,tmpTable,temp[4] );
}
/* 输出交换后的Matrix表 */
printf("/nYou result is:/n");
OutputData( Matrix );
}
/*****************************************************************************
* Function Name : main
* Description : Program entry
* Input Parameters : None
* Output Parameters: None
* Return Value : None
* Caller :
* Date : 2005/03/08
* Author : troy
*****************************************************************************/
void main()
{
int Matrix[M][M]; /* 存储输入的5*5数组 */
InputData( Matrix );
OutputData( Matrix );
Order( Matrix );
}