标题:指针问题,思考了很久,不知道哪里错了
取消只看楼主
chgtx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-9-13
结帖率:100%
已结贴  问题点数:20 回复次数:4 
指针问题,思考了很久,不知道哪里错了
//程序功能是将输入的5阶行列式中最大的数字放在中间,按照从上到下,从左到右的顺序,四个角分别放最小,第二小,第三小,第四小的值;

#include <stdio.h>

void main()
{
    void sort(int (*p)[5]);
   
    int a[5][5], i, j;
   
    printf("please input 5*5 array: \n");
   
    for(i = 0; i < 5; i++)                              //一个一个输入行列式的每一个值;
    {
        for(j = 0; j < 5; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
   
    printf("\nThe 5*5 array is: \n");                   //将行列式打印出来;
   
    for(i = 0; i < 5; i++)
    {
        for(j = 0; j < 5; j++)
        {
            printf("%4d", a[i][j]);
        }
        
        printf("\n");
    }
   
    printf("\nNow they are: \n");
   
    sort(a);                                           //调用sort函数
   
    printf("\n");
}

void sort(int (*p)[5])
{
    int i, j, temp;

    int *Max, *Min;   
   
    Max = p;                                 //将行列式第一个地址赋给Max,赋给Min
   
    Min = p;                              
   
    for(i = 0; i < 5; i++)                           //找出最大值地址;
    {
        for(j = 0; j < 5; j++)
        {
            if(*Max < *(*(p + i) + j))
            {
                Max = *(p + i) + j;
            }
            if(*Min > *(*(p + i) + j))             //找出最小值地址;
            {
                Min = *(p + i) + j;
            }
            
        }
    }
   
    temp = *(*(p + 2) + 2);                      //最大值与中间值交换;
    *(*(p + 2) + 2) = *Max;
    *Max = temp;
   
    temp = *Min;                                 //最小值与第一行第一列的值交换;
    *Min = p[0][0];
    p[0][0] = temp;
   
    Min = p + 1;
    for(i = 0; i < 5; i++)
    {
        for(j = 0; j < 5; j++)
        {
            if(*(*(p + i) + j) != p[0][0]) && (*Min > *(*(p + i) + j)))   //判断条件为循环值不等于最小值,且大于*Min;
            {
                Min = *(p + i) + j;                                   //找出第二小值地址;
            }
        }
    }

    temp = *Min;                                                      //将第二小值与第一行第五列值交换;
    *Min = p[0][4];
    p[0][4] = temp;
   
    Min = p + 1;
    for(i = 0; i < 5; i++)                                             //找出第三小值;
    {
        for(j = 0; j < 5; j++)
        {
            if(*(*(p + i) + j) != p[0][0]) && (*(*(p + i) + j) != p[0][4]) && (*Min > *(*(p + i) + j)))
            {
                Min = *(p + i) + j;
            }
        }
    }

    temp = *Min;                                                     //第三小值与第五行第一列值交换;
    *Min = p[4][0];
    p[4][0] = temp;

    Min = p + 1;                                                     //找出第四小值地址;
    for(i = 0; i < 5; i++)
    {
        for(j = 0; j < 5; j++)
        {
            if((*(*(p + i) + j) != p[0][0]) && (*(*(p + i) + j) != p[0][4]) && (*(*(p + i) + j) != p[4][0]) && (*Min > *(*(p + i) + j)))
            {
                Min = *(p + i) + j;
            }
        }
    }

    temp = *Min;                                                       //第四小值与第五行第五列值交换;
    *Min = *(*(p + 4) + 4);
    *(*(p + 4) + 4) = temp;

    for(i = 0; i < 5 ; i++)                                 //打印交换过后的行列式;
    {
        for(j = 0; j < 5; j++)
        {
            printf("%4d", *(*(p + i) + j));
        }

        printf("\n");
    }
   
   
}
搜索更多相关主题的帖子: include please 行列式 最大的 
2015-09-13 08:47
chgtx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-9-13
得分:0 
回复 3楼 林月儿
编译不过,25个错误,6个提醒;
2015-09-13 23:09
chgtx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-9-13
得分:0 
回复 5楼 林月儿
不要那么激动,我没那个意思,也有想过可能是编译器的事,不过上次忘了问,我写的那段你在你的编译器上能不能编译过?
2015-09-14 08:02
chgtx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-9-13
得分:0 
回复 7楼 林月儿
一看代码就知道我刚学,截图是想让你看看有没解决办法,你水平很高,看了一会才看懂你写的代码
2015-09-14 10:15
chgtx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-9-13
得分:0 
回复 9楼 林月儿
打嘴仗没意思,浪费时间,不能解决就算了
2015-09-14 10:28



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




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

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