为何MIT作业认为(x=1)&&(y=0)有误?实际运行却正常?
问题解析:为什么作业判定
alliszero=(x=1)&&(y=0)错误? 你的代码语法合法,编译器不会报错,运行后alliszero也确实输出0,但作业判定错误的核心原因是代码意图完全偏离题目要求,本质是混淆了赋值运算符=和相等比较运算符==:
先拆解你写的代码执行逻辑:
x=1是赋值操作,把x的初始值0改成1,同时这个表达式的返回值是赋值后的x(即1,在逻辑判断中视为真)。- 由于
&&是短路逻辑运算符,第一个表达式为真时会执行第二个表达式y=0——这同样是赋值操作,把y保持为0,返回值是0(逻辑假)。 - 最终
1 && 0的运算结果为0,赋值给alliszero,所以输出0。
但结合题目给出的变量名
alliszero、初始值(x=0、y=0、alliszero=1),题目的意图显然是判断x和y是否满足某个相等条件,而非修改x、y的原始值。参考答案要求把=换成==,就是要将赋值操作改为相等比较:
正确语句应为alliszero=(x==1)&&(y==0),逻辑是:- 检查x是否等于1(初始x=0,结果为假,即0)。
- 因
&&短路特性,第二个表达式y==0不会执行(不影响最终结果)。 - 最终
0 && ...的结果为0,赋值给alliszero。
虽然两个语句最终alliszero的结果一致,但你的代码修改了x的原始值,完全违背了题目的考察目的——作业的核心考点就是区分“赋值”与“相等比较”,误用赋值运算符属于逻辑错误,因此作业判定该语句错误。
内容的提问来源于stack exchange,提问作者Bhargav Patil
相关产品推荐
相关产品推荐

