编写函数(无返回有三个参数), 向函数传递三个浮点数, 函数中实现(指针完成):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;
}