标题:函数问题,交换最大值和最小值
只看楼主
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
结帖率:95.45%
已结贴  问题点数:5 回复次数:9 
函数问题,交换最大值和最小值
要求定义三个函数,功能是找到最小值,最大值,交换最大值和最小值的位置
这个代码错哪了?

#include <stdio.h>
int min(int array[],int n);
int max(int array[],int n);
void change(int array[]);
int main()
{
    int n=10;
    int i;
    int array[10]={1,2,3,4,5,6,7,8,9,10};
    for(i=0;i<n;i++)
    printf("%d\t",array[i]);
    min(array,n);
    max(array,n);
    change(array);
    for(i=0;i<n;i++)
    printf("%d\t",array[i]);
    return 0;
}
int min(int array[],int n)
{
    int i;
    int min=0;
    for(i=1;i<n;i++)
    {
        if(array[i]<array[min])
            min=i;
    }
    return min;   
}
int max(int array[],int n)
{
    int i;
    int max=0;
    for(i=1;i<n;i++)
    {
        if(array[i]>array[max])
            max=i;
    }
    return max;   
}
void change(int array[])
{
    int temp;
    temp=array[min(array,10)];
    array[min(array,10)]=array[max(array,10)];
    array[max(array,10)]=temp;
}
搜索更多相关主题的帖子: include change return 最大值 
2016-11-17 15:58
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:2 
change函数用的是传值方式,对函数体外的array数组没有影响
2016-11-17 16:05
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:2 
程序代码:
void change(int array[])
{
    int temp = array[min(array, 10)];  // 无错
    array[min(array, 10)] = array[max(array, 10)];  // array[0] 被赋值为 10
    array[max(array, 10)] = temp;  // array已经改变,max(array, 10) = 0,array[0]被 temp 覆盖
}


[fly]存在即是合理[/fly]
2016-11-17 16:08
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
得分:0 
回复 2楼 yangfrancis
我这个不是引用传递吗?怎么才能改变传入数组?

Code is my life.
2016-11-17 16:22
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
得分:0 
回复 3楼 azzbcc
array[0] 被赋值为 10 这句话的array指的是哪个数组?为什么是赋值为10?

Code is my life.
2016-11-17 16:23
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:2 
void change(int &array[]),

早知做人那么辛苦!  当初不应该下凡
2016-11-17 21:19
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:0 
回复 4楼 bjut_Allen
不是我先前说的原因。问题在这里
void change(int array[])
{
    int temp;int ma,mi;
    ma=max(array,10);
    mi=min(array,10);
    temp=array[mi];
    array[mi]=array[ma];
    array[ma]=temp;
}
//这样就行了
2016-11-17 21:44
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:0 
你一共就那么一个array啊

这么说呢?
程序代码:
void display(int array[], int n) {
    int i;

    printf("\nArray:\n");
    for (i = 0; i < n; i++) {
        printf("%d\t", array[i]);
    }
    printf("\n");
    printf("min(array, %d) = %d\n", n, min(array, n));
    printf("max(array, %d) = %d\n", n, max(array, n));
}

void change(int array[]) {
    int temp = array[min(array, 10)];  // 无错
    display(array, 10);
    array[min(array, 10)] = array[max(array, 10)];  // array[0] 被赋值为 10
    display(array, 10);
    array[max(array, 10)] = temp;  // array已经改变,max(array, 10) = 0,array[0]被 temp 覆盖
    display(array, 10);
}


[fly]存在即是合理[/fly]
2016-11-18 09:18
纵横阳仔
Rank: 7Rank: 7Rank: 7
来 自:自学成才的火星人儿
等 级:贵宾
威 望:26
帖 子:147
专家分:698
注 册:2016-10-20
得分:2 
#include <stdio.h>
int min( const int array[],int n);
int max(const int array[],int n);
void change(int array[],int n);

int main()
{
    int n=10;
    int i,m,p;
    int array[10]={1,2,3,4,5,6,7,8,9,10};
    for(i=0;i<n;i++)
    printf("%d\t",array[i]);
    change(array,n);
    for(i=0;i<n;i++)
    printf("%d\t",array[i]);
    return 0;
}
int min(const int array[],int n)/*不改变数组,只找到最小值所对应的标号*/
{
    int i;
    int min=0;
    for(i=1;i<n;i++)
    {
        if(array[i]<array[min])
            min=i;
    }
    return min;   
}
int max(const int array[],int n)/*不改变数组,只找到最大值所对应的标号*/
{
    int i;
    int max=0;
    for(i=1;i<n;i++)
    {
        if(array[i]>array[max])
            max=i;
    }
    return max;   
}
void change(int array[],int n)/*改变数组,将最大值与最小值进行交换*/
{
    int temp=0,m,p;
    m=min(array,n);
    p=max(array,n);
    temp=array[m];
    array[m]=array[p];
    array[p]=temp;
}

3楼说的很正确

[此贴子已经被作者于2016-11-18 10:38编辑过]

2016-11-18 10:36
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
得分:0 
回复 9楼 纵横阳仔
对,我把最大最小,用m,p记录下来就可以了!

Code is my life.
2016-11-21 23:18



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




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

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