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;

}

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

#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;
}

你这个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);程序应该是这样的吧,下面那个跟这个同理!!

在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;
}