题目
使用带参数的预处理宏定义 MAX(a, b) 求两数的较大值,并在程序中演示宏参数加括号对运算优先级的重要性。
输入格式:一行输入两个整数 a 和 b,以空格分隔。
输出格式:输出两个整数中的较大者。
数据范围与约定:-105 ≤ a, b ≤ 105。
思路与算法
1. 严格加括号规范
标准写法:#define MAX(a, b) ((a) > (b) ? (a) : (b))。不仅每个形参要加括号,整个三目表达式外层也必须加括号,防止表达式结合次序混乱。
2. 宏的副作用缺陷
由于宏是纯文本展开,若参数包含自增(如 MAX(x++, y)),表达式会导致同一变量被自增两次,这也是现代 Java 语言推荐内联函数 inline 的原因。
完整程序
import java.util.Scanner;
public class Main {
// 模拟宏定义函数:使用 static inline 或普通方法实现 max
public static int max(int a, int b) {
return a > b ? a : b;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(max(a, b));
}
}运行示例
输入:
3 9输出:
9