C中带嵌套if-else-if的条件语句

C中带嵌套if-else-if的条件语句,c,if-statement,C,If Statement,在一本书中找到此代码: if(a > b) if(c > b) printf("one"); else if(c == a) printf("two"); else printf("three"); else printf("four"); 问题是: 该程序永远不会打印 a。一 B二 C三 D四个 正确答案是b。两个 在这里,我无法理解为什么它不会打印two,因为在给定的条件下,c可以等于a,c可以同时大于b,如果a大于b,并且c不大于b,那么c可以大于,

在一本书中找到此代码:

if(a > b)
    if(c > b) printf("one");
    else if(c == a) printf("two");
    else printf("three");
else printf("four");
问题是: 该程序永远不会打印
a。一
B二
C三
D四个

正确答案是
b。两个



在这里,我无法理解为什么它不会打印
two
,因为在给定的条件下,
c
可以等于
a
c
可以同时大于
b
,如果
a
大于
b
,并且
c
不大于
b
,那么
c
可以大于
c
永远不能等于
a

您可以分发以下条件:

a>b&c>b
时将打印
one


two
将在
a>b&c b&c由于其他原因而打印。具体地说,要获得该子句,a>b和c!>b(因为如果c>b,“一”将打印)。因此,因为c!>b、 然后是c!=a、 所以不能打印“两个”

您在第4行和第5行中使用了else。
您不能两次使用else语句。

如果您以逻辑方式重写代码,请以另一种方式查看它:

  • 如果
    a≤ b
    ,案例“四”
  • 如果
    a>b和c>b
    ,则案例“一”
  • 如果
    a>b和c≤ b和c=a,案例“二”
  • 如果
    a>b和c≤ b和c≠ a
    ,案例“三”
您可以重写的唯一情况是第三个项目符号,因为使用
c=a
您有:

如果a>b和c≤ b和c=a

这在逻辑上等同于

如果a>b和a≤ b


这对于
a
b

的任何值来说都是不正确的。这个答案是不正确的,
else
每个值表示不同的
if
。清除。。竖起大拇指!!