题目
当c的值不为0时,在下列选[1]项中能正确将c的值赋给变量a、b的是( )。A. c=b=aB. (a=c)||(b=c)C. (a=c)(b=c)D. a=c=b
当c的值不为0时,在下列选[1]项中能正确将c的值赋给变量a、b的是( )。
A. c=b=a
B. (a=c)||(b=c)
C. (a=c)(b=c)
D. a=c=b
题目解答
答案
C. (a=c)(b=c)
解析
本题考查赋值运算符的优先级与结合性以及逻辑运算符的短路特性。关键在于理解不同选项中表达式的执行顺序和实际效果。
核心思路:
- 赋值运算符从右向左结合,例如
a = b = c等价于a = (b = c)。 - 逻辑或运算符
||具有短路特性:若左侧表达式为真,右侧表达式不会执行。 - 正确赋值方式需确保
a和b均被赋值为c的值,且不依赖c的初始值。
选项分析
选项A:c = b = a;
- 执行顺序:先执行
b = a,再执行c = b。 - 结果:
c和b均被赋值为a的值,而非将c的值赋给a和b,错误。
选项B:(a = c) || (b = c);
- 逻辑或运算:若
a = c的结果为真(即c非零),则右侧(b = c)不会执行。 - 结果:仅
a被赋值为c的值,b未被赋值,错误。
选项C:(a = c)(b = c);
- 语法分析:此写法不符合C语言语法规则,两个赋值表达式之间缺少运算符,导致编译错误。
- 可能意图:题目可能存在排版错误,实际应为
(a = c, b = c);(使用逗号运算符),此时两个赋值均会执行,正确赋值a和b。 - 结论:假设题目实际为
(a = c, b = c);,则正确;否则原题选项C存在语法错误。
选项D:a = c = b;
- 执行顺序:先执行
c = b,再执行a = c。 - 结果:
a和c均被赋值为b的值,与题意相反,错误。