题目
当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的值不为0时,在下列选[1]项中能正确将c的值赋给变量a、b的是( )。
A.c=b=a;
B.(a=c)||(b=c);
C.(a=c)(b=c);
D.a=c=b;
A.c=b=a;
B.(a=c)||(b=c);
C.(a=c)(b=c);
D.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
的值,与题意相反,错误。