首页 > 试题广场 >

下面C程序的输出结果:int i=0,a=1,b=2,c=3

[单选题]
下面C程序的输出结果是()
int i = 0, a = 1, b = 2, c = 3;
i = ++a || ++b || ++c;
printf("%d %d %d %d", i, a, b, c);


  • 1 2 2 3
  • 1 2 3 4
  • 3 2 3 4
  • 3 3 3 4
见谭浩强《C程序设计第四版》第95页上边,这个题我做错了。
发表于 2021-12-14 20:10:43 回复(0)
++a为真,后面的语句直接屏蔽不执行
发表于 2018-12-24 17:00:37 回复(0)
短路原则,逻辑或运算时,只要有一方成立,后面的就不会执行。 ++a || ++b,因为非零即为真。所以++a为真,则后面的++a之后的代码不会执行。
发表于 2022-03-03 00:31:48 回复(0)
i不应该是2吗。。
发表于 2019-04-12 22:22:42 回复(2)
||运算同样存在短路
发表于 2020-11-18 17:44:50 回复(0)
事实证明C语言同样有短路行为
发表于 2021-03-13 16:28:02 回复(0)
++a为真,短路所以直接结束,i=1,a=2,b=2,c=3
发表于 2019-09-15 18:11:00 回复(0)
惰性运算
发表于 2023-11-16 10:52:23 回复(0)
这题考的是三个知识点: 1 优先级,=优先级比||低,||优先级比++低,优先运算++结果为真,然后运算||,为真后后面不再执行,最后将真,即1赋值给i 2 结合方向,=右结合,||左结合,所以先运算||左边的表达式,而不是最右边的。 3 ||运算符的特点,从左到右逐条表达式运算,只有出现真值就不再执行后面的语句
发表于 2023-04-05 12:58:03 回复(1)
||的短路原则
编辑于 2023-03-06 11:00:19 回复(0)
这题考的是三个知识点: 
  1. 优先级,=优先级比||低,||优先级比++低,优先运算++结果为真,然后运算||,为真后后面不再执行,最后将真,即1赋值给i 
  2. 结合方向,=右结合,||左结合,所以先运算||左边的表达式,而不是最右边的。 
  3.  ||运算符的特点,从左到右逐条表达式运算,只有出现真值就不再执行后面的语句
如果定义时,a=1,b=-1,c=-1,仍然输出 1 2 -1 -1
先自增参与或运算,逻辑为真后,实际执行的自增又只有左边一个
发表于 2024-04-15 12:08:12 回复(0)
短路原理

发表于 2023-08-02 08:46:58 回复(0)
短路原则,逻辑或运算时,只要有一方成立,后面的就不会执行。 ++a || ++b,因为非零即为真。所以++a为真,则后面的++a之后的代码不会执行。 03-03 00:31 0 3  牛客730553614号 福州大学 
发表于 2022-10-09 10:07:19 回复(0)
逻辑或||的判断结果为真假,所以只执行++a,因为i为真,所以i=1

发表于 2022-09-23 19:00:04 回复(0)
只计算了||之前的,如果||之前的为真,则后面的不用计算,同时返回||之前的值
发表于 2022-02-24 15:25:35 回复(0)
||是逻辑运算,结果为真假
发表于 2022-01-13 11:43:47 回复(0)
我以为只有一层作用,没想到多层也是一样的是我做的少
发表于 2021-10-04 10:10:20 回复(0)
++运算优先级不是比||要高吗.....
发表于 2021-06-23 10:50:37 回复(0)