Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2529356
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2010-08-20 12:05:34

    将一个5*5的矩阵中的最大元素放在中心,4个角分别放上4个最小的元素(顺序为从左到右,从上到下顺序依次从小到大存放),写一函数实现之。用main函数调用。
    我们遇到这道题,首先需要遍历整个矩阵,然后把最大元素,最小元素找到。然后将a[0][0]赋值为最小元素,将a[2][2]元素赋值为最大值。然后再依再找到第二小,第三小,第四小的元素。和剩下的三个角的元素进行替换。代码如下:
 

#include <stdio.h>

void operate(int *);
void print_data(int *);
int main(int argc,char *argv[])
{
    int arr[5][5] = {{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}},*p,i;
    p = arr;
    printf("the soure data:\n");
    print_data(p);
    operate(p);
    printf("the result is :\n");
    print_data(p);
    system("pause");
    return 0;
}

void operate(int *arr)
{
    int i,j,temp;
    int *p,*max,*min;
    p = arr;
    max = p;
    min = p;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5;j++)
        {
            if (*(p + 5 * i + j) > *max)
            {
               max = p + 5 * i + j;
            }
            if (*(p + 5 * i + j) < *min)
            {
               min = p + 5 * i + j;
            }
        }
    }
    
    p = arr;
    temp = *(p + 5 * 2 + 2);
    *(p + 5 * 2 + 2) = *max;
    *max = temp;
    
    p = arr;
    temp = *p;
    *p = *min;
    *min = temp;
    
    p = arr;
    min = p + 1;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5;j++)
        {
            if ((p + 5 * i + j != p) && *(p + 5 * i + j) < *min)
            {
               min = p + 5 * i + j;
            }
        }
    }
    p =arr;
    temp = *(p + 0 * 5 + 4);
    *(p + 0 * 5 + 4) = *min;
    *min = temp;
    
    p = arr;
    min = p + 1;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5;j++)
        {
            if ((p + 5 * i + j != p) && (p + 5 * i + j != (p + 0 * 5 + 4)) && *(p + 5 * i + j) < *min)
            {
               min = p + 5 * i + j;
            }
        }
    }
    p =arr;
    temp = *(p + 4 * 5 + 0);
    *(p + 4 * 5 + 0) = *min;
    *min = temp;
    
    p = arr;
    min = p + 1;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5;j++)
        {
            if ((p + 5 * i + j != p) && (p + 5 * i + j != (p + 0 * 5 + 4)) && (p + 4 * 5 + 0 != p + 5 * i + j ) && *(p + 5 * i + j) < *min)
            {
               min = p + 5 * i + j;
            }
        }
    }
    p =arr;
    temp = *(p + 4 * 5 + 4);
    *(p + 4 * 5 + 4) = *min;
    *min = temp;
}

void print_data(int *arr)
{
     int i,j,*p;
     p = arr;
     for (i = 0; i < 5; i++)
     {
         for (j = 0; j < 5; j++)
         {
             printf("%4d",*(p + 5 * i + j));
         }
         printf("\n");
     }
     
}


运行结果如下所示:
阅读(784) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~