引自免费微信小程序:皆我百晓生
首先,让我们针对第一个程序进行分析:
程序内容如下:
int main()
{
int x=5, a=0, b=0;
if (x = a + b) printf("* * **\n");
else printf("# # # #\n");
}
在这个程序中,使用了赋值操作符 =
而非比较操作符 ==
。在 if
语句中,应该检查 x
是否等于 a + b
的结果,但由于使用了赋值操作符,实际上是将 a + b
的结果赋值给 x
,并且赋值操作的结果是 a + b
的值,而非一个布尔值。因此,无论 a
和 b
的值是多少,条件始终为真。因为 a + b
的结果总是非零的(即使 a
和 b
都为0),所以 if
语句中的条件判断为 true
,程序将输出 "* * *"。因此,对于第一个程序,正确的答案是 C. 输出 " * *" 。
接下来分析第二个程序:
程序内容如下:
int main()
{
int x=5, a=0, b=3;
if (x = a + b) printf("* * **\n");
else printf("# # # #\n");
}
在这个程序中,由于 a + b
的结果是3(因为 a
是0而 b
是3),所以赋值操作后 x
的值变为3。然而由于赋值操作本身的结果就是赋值的值(这里是3),在C语言中,非零值被视为真(true)。因此,即使 x
的值是后来改变的,if
语句的条件仍然判断为 true
,程序仍然输出 "* * *"。所以,对于第二个程序,答案也是 C. 输出" * *" 。对于这两个程序都没有语法错误或连接问题,所以选项 A 和 B 都是不正确的。