题目描述
分别用函数和带参的宏,从三个数中找出最大的数。
输入格式
3个实数
输出格式
最大的数,输出两遍,先用函数,再用宏。 保留3位小数。
样例输入
1 2 3
样例输出
3.000 3.000
代码解析
-
包含标准输入输出库:
#include <stdio.h>
这一行代码是预处理指令,它告诉编译器在实际编译之前包含标准输入输出库(stdio.h)。这个库提供了进行输入输出操作的功能,比如printf
和scanf
函数。#include <stdio.h>
-
定义宏
max
:#define max(a,b,c) (a > b ? a : b) > c ? (a > b ? a : b) : c
这一行代码定义了一个宏max
,它接受三个参数a
、b
和c
。#define max(a,b,c) (a > b ? a : b) > c ? (a > b ? a : b) : c
- 这个宏使用三元运算符
?:
来进行条件判断和返回值的选择。 - 首先比较
a
和b
,如果a
大于b
,则取a
的值,否则取b
的值。 - 接着,将上一步得到的较大值与
c
进行比较,如果这个较大值大于c
,则返回这个较大值,否则返回c
。 - 通过这种方式,宏
max
能够找出三个数中的最大值。
- 这个宏使用三元运算符
-
定义函数
choose_max
:double choose_max(int a, int b, int c)
这个函数接受三个整数参数a
、b
和c
,并返回这三个数中的最大值。- 函数内部的逻辑与宏
max
的逻辑相同,使用嵌套的三元运算符?:
来实现比较和返回最大值。double choose_max(int a, int b, int c)
- 函数内部的逻辑与宏
-
主函数:
int main(void)
是C程序的入口点,void
表示这个函数不接受任何参数。int main(void)
-
定义变量:
double a, b, c;
定义了三个double
类型的变量,用于存储用户输入的三个数。double a, b, c;
-
输入三个数:
scanf("%lf%lf%lf", &a, &b, &c);
这个函数调用用于从标准输入(通常是键盘)读取三个双精度浮点数并将其存储在变量a
、b
和c
中。scanf("%lf%lf%lf", &a, &b, &c);
-
输出最大值:
printf("%.3lf\n", choose_max(a, b, c));
这个函数调用用于输出choose_max
函数的返回值,即三个数中的最大值。%.3lf
是格式化字符串,表示输出一个保留三位小数的双精度浮点数。printf("%.3lf\n", max(a, b, c));
这个函数调用用于输出宏max
计算得到的最大值,同样保留三位小数。printf("%.3lf\n", choose_max(a, b, c)); printf("%.3lf\n", max(a, b, c));
-
函数返回:
return 0;
表示main
函数执行成功并返回0。在C语言中,main
函数的返回值通常用于表示程序的退出状态,其中0表示成功。return 0;
源代码
#include <stdio.h>
#define max(a,b,c) (a > b ? a : b) > c ? (a > b ? a : b) : c
double choose_max(int a, int b, int c)
{
return (a > b ? a : b) > c ? (a > b ? a : b) : c;
}
int main(void)
{
double a, b, c;
scanf("%lf%lf%lf", &a, &b, &c);
printf("%.3lf\n", choose_max(a, b, c));
printf("%.3lf\n", max(a, b, c));
return 0;
}