标题:指针问题,思考了很久,不知道哪里错了
只看楼主
chgtx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-9-13
结帖率:100%
已结贴  问题点数:20 回复次数:13 
指针问题,思考了很久,不知道哪里错了
//程序功能是将输入的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
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:10 
sort方法一个嵌套for就够了,然后再将特殊元素归位。

剑栈风樯各苦辛,别时冰雪到时春
2015-09-13 10:50
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:10 
程序代码:
#include <stdio.h>

main()
{
    void sort(int (*p)[5]);
    void swap(int &a,int &b);
    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函数
    
    for(i = 0; i < 5 ; i++){                                 //打印交换过后的行列式;
        for(j = 0; j < 5; j++){
            printf("%4d", *(*(a + i) + j));
        }
        printf("\n");
    }
    printf("\n");
}
void swap(int &a,int &b){
    a=a^b; b=a^b; a=a^b;
}
void sort(int (*p)[5])
{
    int i, j, maxIn=0,tm=24;                             
    for(i = 0; i < 4; i++){
        for(j = 0; j < 25-i-1; j++){
            if(*(*(p + j/5) + j%5)< *(*(p + j/5) + j%5+1)){
                swap(*(*(p + j/5) + j%5)=*(*(p + j/5) + j%5),*(*(p + j/5) + j%5+1)); 
            }
        }
    }
    for(j = 0; j < 25; j++){
        if(*(*(p + j/5) + j%5)>*(*(p + maxIn/5) + maxIn%5)){
            maxIn=j;
        }
    }
    swap(*(*(p+(tm/2)/5)+(tm/2)%5),*(*(p+maxIn/5)+maxIn%5));
    for(int i=0;i<4;i++){
        swap(*(*(p+(i%2)*4)+(i/2)*4),*(*(p+tm/5)+tm%5-i));
    }
}


[ 本帖最后由 林月儿 于 2015-9-13 19:58 编辑 ]

剑栈风樯各苦辛,别时冰雪到时春
2015-09-13 13:07
chgtx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-9-13
得分:0 
回复 3楼 林月儿
编译不过,25个错误,6个提醒;
2015-09-13 23:09
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
为什么我可以?我就问问为什么我可以?
你考虑过我们用的编译器可能不一样?
然后 要我按你的编译器改?

编译信息
General: MinGW GCC 4.7.2 32-bit Release
Executing g++.exe...
g++.exe "C:\Users\Administrator\Desktop\test.cpp" -o "C:\Users\Administrator\Desktop\test.exe" -g3   -static-libstdc++ -static-libgcc -g3
Compilation succeeded in 1.19 seconds


[ 本帖最后由 林月儿 于 2015-9-14 07:13 编辑 ]

剑栈风樯各苦辛,别时冰雪到时春
2015-09-14 07:12
chgtx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-9-13
得分:0 
回复 5楼 林月儿
不要那么激动,我没那个意思,也有想过可能是编译器的事,不过上次忘了问,我写的那段你在你的编译器上能不能编译过?
2015-09-14 08:02
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
以下是引用chgtx在2015-9-14 08:02:45的发言:

不要那么激动,我没那个意思,也有想过可能是编译器的事,不过上次忘了问,我写的那段你在你的编译器上能不能编译过?


也想过还贴什么编译不通过的截图。。。
都说了编译器不一样还放什么代码,直接看就知道代码有待优化。

剑栈风樯各苦辛,别时冰雪到时春
2015-09-14 10:02
chgtx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-9-13
得分:0 
回复 7楼 林月儿
一看代码就知道我刚学,截图是想让你看看有没解决办法,你水平很高,看了一会才看懂你写的代码
2015-09-14 10:15
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
以下是引用chgtx在2015-9-14 10:15:42的发言:

一看代码就知道我刚学,截图是想让你看看有没解决办法,你水平很高,看了一会才看懂你写的代码


来这里就是贴代码是为了解决问题收获经验,不是找什么我刚学的借口。
面试官会关心你是不是刚学吗?会的,然后开低一点的工资。

剑栈风樯各苦辛,别时冰雪到时春
2015-09-14 10:17
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.597166 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved