回 帖 发 新 帖 刷新版面

主题:[讨论]小女子求助,高手请进

各位高手,小女子求助大家各问题;请看下面
输入10个整数.将其中最小的数和第一个数对换,把最大的数和最后一个数对换,写三个函数;
1,输入10个数.2,进行处理.3输出10个数. 
我是这样写的;
#include "stdio.h"
main()
{ int number[10];
    intput (number);
    max_min_value(number);
    output(number);
    
}               
intput( int number[10])
{int i;
    printf("Intput 10 numbers:");
    for(i=0;i<10;i++)
    scanf("%d",&number[i]);
}                      
max_min_value( int array[10])
{       int max,min,*p,*array_end;
    array_end=array+10;
    max=min=*array;
    for( p=array+1;p<array_end;p++)
    if(*p> max)  max=*p;
    else if (*p< min)  min=*p; 
    *p=array[0];array[0]=  min;  min=*p;
    *p=array[9];array[9]= max ; max =*p; 
    return;
    
}      
output( int array[10])
{int i;
    printf("now ,they are: " ) ;
    for( i=0;i<10;i++ )
    printf("%d ",array[i]);
}
    运行结果:
Input 10 numbers: 8 9 7 6 5 4 3 2 0 1
now they are :0 9 7 6 5 4 3 2 0 9
本来正确的结果应该是:0 1 7 6 5 4 3 2 8 9 
我的程序错在哪里了,各位高手帮帮忙呀!
小女子先谢谢您了![em8][em8][em8][em8][em8]

回复列表 (共6个回复)

沙发

提示你一下
对于array_end=array+10;   调试一下看看array_end指向哪里了。 

板凳

大哥,我还是看不出来那里错了!
你给我讲清楚点,小女子有点笨呀!谢谢你了大哥!

3 楼


你交换的时候没有把最大数所在的数组位置更换.

4 楼

呵呵。。
我自己已经找到原因了
改好了:
#include "stdio.h"
main()
{ int number[10];
    intput (number);
    max_min_value(number);
    output(number);
    
}               
intput( int number[10])
{int i;
    printf("Intput 10 numbers:");
    for(i=0;i<10;i++)
    scanf("%d",&number[i]);
}                      
max_min_value( int array[10])
{int *max,*min,*p,*array_end;
     array_end=array+9;
    max=min=array;
    for( p=array+1;p<=array_end;p++)
    if(*p> *max)  max=p;
    else if (*p< *min)  min=p; 
    *p=array[0]; array[0]=*min; *min=*p;
    *p=array[9]; array[9]=*max ;*max=*p; 
    return;
    
}      
output( int array[10])
{int i;
    printf("now ,the now order is : " ) ;
    for( i=0;i<10;i++ )
    printf("%d ",array[i]);
}

经过验证,结果是正确的!

5 楼

恭喜下。

6 楼

哈哈,还是自己琢磨出来记的住吧。

我来回复

您尚未登录,请登录后再回复。点此登录或注册