标题:将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从 ...
只看楼主
zql5666641
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-3-8
结帖率:83.33%
已结贴  问题点数:13 回复次数:11 
将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一个函数实现 用main函数 指针实现
将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一个函数实现   用main函数   指针实现指针实现!!!!
搜索更多相关主题的帖子: main 函数 指针 元素 矩阵 
2010-06-16 21:59
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
得分:0 
给个示例
2010-06-16 22:05
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:13 
#include<stdio.h>
void main()
{
    int CJ(int *);/*函数声明*/
    int a[5][5],i,j,*p;
    p=&a[0][0];
    for(i=0;i<5;i++)/*构造数组方阵*/
        for(j=0;j<5;j++)
            scanf("%d",&a[i][j]);
        CJ(p);/*函数调用*/
        for(i=0;i<5;i++)/*输出调整后的方阵*/
        {
            for(j=0;j<5;j++)
                printf("%4d",a[i][j]);
            printf("\n");
        }
}
int CJ(int *q)/*函数定义*/
{
    int i,j,*qmax,*qmin,t;
    qmax=q;
    qmin=q;
    for(i=0;i<5;i++)/*找到最大值和最小值*/
        for(j=0;j<5;j++)
        {
            if(*qmax<*(q+5*i+j))
                qmax=q+5*i+j;
            if(*qmin>*(q+5*i+j))
                qmin=q+5*i+j;
        }
        t=*(q+12);/*把最大值和中间的值交换*/
        *(q+12)=*qmax;
        *qmax=t;
        t=*q;/*把最小值和左上角元素交换*/
        *q=*qmin;
        *qmin=t;
        /*以下是找第二小的元素*/
        qmin=(q+1);
        for(i=0;i<5;i++)
            for(j=0;j<5;j++)
                if((q+5*i+j)!=q&&*qmin>*(q+5*i+j))
                    qmin=q+5*i+j;
            t=*(q+4);/*把第二小元素和右上角元素互换*/
            *(q+4)=*qmin;
            *qmin=t;
            /*再找第三小元素*/
            qmin=(q+1);
            for(i=0;i<5;i++)
                for(j=0;j<5;j++)
                    if((q+5*i+j)!=q&&(q+5*i+j)!=(q+4)&&*qmin>*(q+5*i+j))
                        qmin=(q+5*i+j);
                    printf("第三小元素为%3d\n",*qmin);/*验证找没找对*/
                    t=*(q+20);/*把第三小元素和左下角元素交换*/
                    *(q+20)=*qmin;
                    *qmin=t;
                    /*最后找第四小元素*/
                    qmin=(q+1);
                    for(i=0;i<5;i++)
                        for(j=0;j<5;j++)
                            if((q+5*i+j)!=q&&(q+5*i+j)!=(q+4)&&(q+5*i+j)!=(q+20)&&*qmin>*(q+5*i+j))
                                qmin=(q+5*i+j);
                            printf("第四小元素为%3d\n",*qmin);/*验证第四个元素是否找对*/
                            t=*(q+24);/*把第四小元素和右下角元素互换*/
                            *(q+24)=*qmin;
                            *qmin=t;
                            return 0;
}


这是谭浩强第三版的题目吧
2010-06-16 22:26
zql5666641
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-3-8
得分:0 
回复 3楼 遮天云
恩   不会做
2010-06-17 07:52
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
回复 4楼 zql5666641
那我的你就当参考吧
2010-06-17 08:26
kioking
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-6-12
得分:0 
我比较笨拙```
看不明白...
原本的中间值不参加第二次以后的比较吗???
第一次的最左上角,第二次的最右上角,第三次的左下角,第四次的最右下角...
都不参加之后的比较吗???
2010-06-17 13:21
kioking
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-6-12
得分:0 
第一次的最左上角,第二次的最右上角,第三次的左下角,第四次的最右下角...
是指原本的值````
2010-06-17 13:23
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
回复 6楼 kioking
原来中间的那个值已经与最大的值交换!会参见第二次比较的,其他的已经定了,程序中的if语句已经控制了他们不再参加比较,你可以根据运行结果仔细分析的  ,这个题只有会找到最大最小值,其他的控制相应条件就行了
2010-06-17 19:05
zql5666641
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-3-8
得分:0 
还有没更简易的
2010-06-21 10:53
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
回复 9楼 zql5666641
这个就不晓得了!不知道论坛里的高手们有没有
2010-06-21 18:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-310415-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.357222 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved