解题思路注意事项:


找出三个数的最大值,三目运算符可以很简单的做到:

(x>y?x:y)>z?(x>y?x:y):z

首先x和y比较,接着x和y间的最大值和z比较,如果大于z则输出x和y之间较大的指,如果x和y之间的较大值小于z,则输出z。


参考代码:

#include<stdio.h>
#define MAX(x,y,z) (x>y?x:y)>z?(x>y?x:y):z

double max(double x,double y,double z)
{
	return (x>y?x:y)>z?(x>y?x:y):z;
}

int main()
{
	double x,y,z,max1,max2;
	scanf("%lf%lf%lf",&x,&y,&z);
	max1 = MAX(x,y,z);
	max2 = max(x,y,z);
	printf("%.3lf\n%.3lf\n",max1,max2);
	return 0;
}


点赞(14)
 

0.0分

40 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 13 条评论

倔强的椰子炮 5月前 回复TA
#include<stdio.h>
#include<math.h>
#define maxabc(m,n,p)      (m>n?m:n)>p?(m>n?m:n):p
                           
int main()
{
    float a,b,c,max1;
    scanf("%f %f %f",&a,&b,&c);
    max1 = fmaxf(fmaxf(a,b),c);
    printf("%.3f\n",max1);
    printf("%.3f",maxabc(a,b,c));
    return 0;
}
Alexis 3年前 回复TA
#include<stdio.h>
#define maxNum1(a,b,c) (a>b?(a>c?a:c):(b>c?b:c))

float maxNum2(float a,float b,float c);

int main()
{
    float a,b,c;
    scanf("%f %f %f",&a,&b,&c);
    printf("%.3f\n%.3f\n",maxNum2(a,b,c),maxNum1(a,b,c));
    return 0;
}

float maxNum2(float a,float b,float c){
    return (a>b?(a>c?a:c):(b>c?b:c));
}
DARLING·02 5年前 回复TA
@手残 作者的意思应该是,如果x大于y,则输出其中较大的一项,然后再跟z比较,如果比z大,那么再判断x,y的关系,如果比z小,那肯定z就是最大的咯
DARLING·02 5年前 回复TA
@手残 a>b? (a>c? a : c) : (b>c? b : c)  这个逻辑清晰一些
一阳花开 5年前 回复TA
#include<stdio.h>
double max(double x,double y,double z);
#define MAX(x,y) x>y ? x:y    //如果x>y,那么MAX(x,y)的值就是x,否则就是y

int main()
{
    double a,b,c,maxi,maxj;
    scanf("%lf %lf %lf",&a,&b,&c);             
    max(a,b,c);                   //依次比较
 //   printf("%.3lf",maxj);    
    return 0;
}
double max(double a,double b,double c)
{
double maxa,maxb;
    maxa=MAX(a,b);
    maxb=MAX(maxa,c);
    printf("%.3lf",maxb);  
    //return maxa;
}
杨少 5年前 回复TA
@神经韫Hacker 应该改成这样(a>b?a:b)>z?(a>b?a:b):z(而且你的宏定义后面还加了分号)
杨少 5年前 回复TA
@神经韫Hacker 你的宏定义是错的
神经韫Hacker 5年前 回复TA
#include<stdio.h>
#define MAX(a,b,c) max1=a,((max1<b?:max1=b)>c?:max1=c);
int main()
{
	double max2(double a,double b,double c);
	double a,b,c,max1;
	scanf("%lf%lf%lf",&a,&b,&c);
	max2(a,b,c);
	MAX(a,b,c);
	printf("%.3lf\n",max1);
}
double max2(double a,double b,double c)
{
	double max=a;
	if(max<b)
	{
		max=b;
	}
	if(max<c)
	{
		max=c;
	}
	printf("%.3lf\n",max);
	return 0;
}
哪里错误了呢,这个典型的问题有助于提高大家C语言编程能力
编程cxk 5年前 回复TA
@手残 你把x>y?x:y当做你问题中的x      类比第一个式子
手残 5年前 回复TA
x>y? x : y为条件表达式,若x>y成立则这个表达式的值为后面x,否则表达式的值是y,
z?(x>y?x:y):z     这个是什么东西