闰年的定义:
下面程序是判断是否是闰年的正确程序
cin >> n;
cout << ((n % 4 == 0 && n % 100 != 0) || (n % 400 == 0)) ? 1 : 0;
return 0;答案A。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。
位运算追踪时建议把数字写成二进制形式再逐位计算。
【考点】取模运算|逻辑表达式|运算符优先级
🎯 考纲定位:本题在《GESP 三级大纲》"基础语法与数据类型"模块,重点考察取模运算与逻辑表达式的综合应用。命题人刻意设置此题,卡住大量考生对"闰年规则"这一经典逻辑条件的转化能力——他们往往能背出规则,却难以将其精准映射为 C++ 条件表达式。这是入门阶段最常见的"规则到代码"断层,正是三级考查的核心能力。
🧠 解题思维:看到题先识别"闰年"的两个分支条件(普通闰年、世纪闰年),分别转化为取模判断(%4==0 && %100!=0 与 %400==0),再用逻辑或连接。通法:将自然语言条件拆解为若干布尔子条件,用取模判断整除性,用 &&/|| 组合,最后用括号确保运算符优先级正确。本题无需额外判断,直接对应规则即可。
🪤 陷阱拆解:A 选项为正确。命题人最阴险的陷阱在于括号位置——若误写为 n % 4 == 0 && n % 100 != 0 || n % 400 == 0,因 && 优先级高于 ||,实际会先计算 (n % 4 == 0 && n % 100 != 0) 再与 n % 400 == 0 进行或运算,逻辑上正确,但考生易因过度怀疑代码复杂度而误判。绝对化表述"是 4 的倍数就是闰年"是典型误区,本题代码已完整覆盖世纪闰年规则,没有任何多余判断。
🔄 反命题思维:若将定义改为"年份能被 5 整除且不是 100 的倍数则为闰年",代码需调整为 (n % 5 == 0 && n % 100 != 0) || (n % 5 == 0 && n % 400 == 0);若增加"公元 1582 年前无闰年"的限制,则需在条件前加年份范围判断。刷到类似题时,先问自己"命题人想考我什么",才能跳出代码细节,直击逻辑本质。