在一本书中找到了以下代码:
if(a > b)
if(c > b) printf("one");
else if(c == a) printf("two");
else printf("three");
else printf("four");
问题是:
程序将永远不会打印
a. one
b. two
c. three
d. four
正确答案是b. two
在这里,我无法理解为什么它不会打印two
,因为在给定的条件下,c
可以等于a
,而c
可以大于b
同一时间
答案 0 :(得分:3)
如果a
大于b
,并且c
不大于b
,则c
永远不能等于a
。
您可以分配条件:
one
将在a > b && c > b
时打印。
two
将在a > b && c <= b && c == a
时打印。由于c == a
,这些条件等效于c > b && c <= b
,永远不可能成立。
答案 1 :(得分:0)
是因为其他原因。具体来说,要获取该子句,请使用a> b和c!> b(因为如果c> b,则将打印“ one”)。因此,由于c!> b,cb,则c!= a,因此无法打印“ 2”。
答案 2 :(得分:0)
另一种查看方式,如果您以逻辑方式重写代码:
a ≤ b
,则为“四个” a > b AND c > b
,则为“ one” a > b AND c ≤ b AND c = a
的情况为“两个” a > b AND c ≤ b AND c ≠ a
,则为“三” 您唯一可以重写的情况是第三个项目符号,因为使用c = a
您具有:
如果a> b AND c≤b AND c = a
在逻辑上等同于
如果a> b并且a≤b
对于a
和b
的任何值都不是真的
答案 3 :(得分:-3)
您在第4行和第5行中使用过else。 您不能两次使用else语句。