mingye1234
mingye1234
采纳率60%
2016-03-20 07:41

C语言新手问题...老鸟莫嫌弃``

已采纳

编写函数(无返回有三个参数), 向函数传递三个浮点数, 函数中实现(指针完成):1) 求得最大值和最小值(2) 交换最大值和最小值(3) 打印三个数

void MaxMinChangeEachOtherNew(float a,float b,float c){
    float *max;
    float *min;
    max = &(a > b ? a : b > c ? a > b ? a : b : c);         //这两行报错```为什么呢??
    min = &(a < b ? a : b < c ? a < b ? a : b : c);

    float s = *max;
    *max = *min;
    *min = s;

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • cxsmarkchan cxsmarkchan 5年前

    前一个答案没解决交换问题,附上新答案。注意和原先程序的区别。要实现函数外的交换,重点是函数定义里面的参数列表要用指针。

    #include <stdio.h>
    void MaxMinChangeEachOtherNew(float *a,float *b,float *c){ //注意这里的参数用的是指针类型,这样才能修改a/b/c的值
        float *max;
        float *min;
        max = min = a;
        if(*b > *max) max = b;
        if(*c > *max) max = c;
        if(*b < *min) min = b;
        if(*c < *min) min = c;
    
        float s = *max;
        *max = *min;
        *min = s;
    }
    
    int main(){
        //测试代码
        float a = 1.2, b = 3.0, c = 2.1;
        MaxMinChangeEachOtherNew(&a, &b, &c);
        printf("%f\n%f\n%f\n", a, b, c);
        return 0;
    }
    
    点赞 评论 复制链接分享
  • cxsmarkchan cxsmarkchan 5年前

    在g++编译器中没有报错。
    不过写这么长的条件表达式,可读性不太好啊。建议改写成if/else的形式,如下:

    void MaxMinChangeEachOtherNew(float a,float b,float c){
        float *max;
        float *min;
        max = min = &a;
        if(b > *max) max = &b;
        if(c > *max) max = &c;
        if(b < *min) min = &b;
        if(c < *min) min = &c;
    
        float s = *max;
        *max = *min;
        *min = s;
    }
    
    点赞 评论 复制链接分享
  • ZLK961543260 我就是我--不一样的烟火 5年前

    你这个max = &(a > b ? a : b > c ? a > b ? a : b : c);什么意思,?:这个的格式是a>b?a:b,a>b结果真返回a,假返回b,你要是想连续判断也应该是max = &(a > b ? a : b > c ? a : b > a ? b : c);这样吧!意思是a与b中大的与c比较,其中大的在与a比较,你这个程序是不是想找a,b,c的最大值啊,max=&(a > b ? a : b > c ? (a > b ? a : b) : c);程序应该是这样的吧,下面那个跟这个同理!!

    点赞 评论 复制链接分享

为你推荐