下列 C++ 代码执行后,其输出为 $10\ 20$,即 a == b 和 b == a 对 $a$ 和 $b$ 的值没有任何影响。( )
int a = 10, b = 20;
a == b;
b == a;
cout << (a, b);答案B。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】逗号运算符|运算符优先级|C++表达式求值
看到逗号运算符,第一反应是"它是不是赋值"?错,a == b 是关系表达式,返回布尔值;b == a 同理。关键是 (a, b),逗号运算符性质:先算左表达式(丢弃结果),再算右表达式(返回其值)。所以整个表达式等价于 b,cout 只输出 b 的值 20。
A 选项陷阱在于利用考生对 == 的视觉惯性误判为赋值,或把 (a, b) 当成序列输出。命题人特意用 == 而非 =,就是卡住"符号混淆"弱点;逗号运算符在 C++ 优先级表里最低,若学生没掌握,会以为它像 a, b 那样分别输出,完全违背语法规范。
若把 == 换成 =,则 a 变为 20,输出 20 20;若去掉括号写成 cout << a, b;,则先输出 a 再输出 b。刷到此类题先问自己:这个逗号是运算符还是分隔符?