下面的 C++ 代码用于求 $M$ 天后是星期几,两处横线处分别应填入的代码是( )。
int N, M, D;
cout << "当前星期几?"; // 星期日是0
cin >> N;
cout << "求多少天后?"; // 输入正整数
cin >> M;
D = ____________;
if (___________)
printf("%d天后是星期日", M);
else
printf("%d天后是星期%d", M, D);A.
(N + M) / 7
D == 0B.
(N + M) % 7
D == 0C.
(N + M) / 7
D <= 0D.
(N + M) % 7
D = 0答案B。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。
将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。
【考点】取余运算|条件分支|赋值与比较
💯 考纲定位 本题考查 GESP 一级"基本运算与逻辑判断"模块。命题人设这道题就是卡住那些"背了取余公式却分不清运算优先级"的考生,以及把赋值符当比较符用的初学者。
🧠 解题思维 第一空求 M 天后的星期数:当前星期 N 加上 M 天,7 天一个循环,用取余(N+M)%7即可得到 0-6 的新星期值。第二空判断是否为星期日,必须用比较运算符D==0,因为只有相等时才执行打印。
🪤 陷阱拆解 A 项的除法(N+M)/7算出的是完整周数,不是星期几,直接排除。C 项同样用除法,且D<=0对本题毫无意义——D 取值范围本身就是 0-6,不存在≤0 的判断场景。D 项最阴险:D=0是赋值操作,会把 D 强制改成 0,然后条件永远为真,程序会无脑输出"星期日是星期 0",这明显违背题意。
🔄 反命题思维 如果题目改成"求 M 天后是星期几,若为周六(6)则特殊输出",第一空不变,第二空就得改成D==6。这类题的核心就是:先确定运算逻辑(取余),再精准匹配比较条件(==)。