全部问题 > 当前问题

x==0为假,结束执行,y没有赋值。因此选D。

为什么结束而不是到下面的else所以是3呢

匿名课官 2015-8-31 11:14:12

共 4 个回答

嘿嘿大人 2015-8-31 11:24:13

因为如果if(x==0)成立,才会执行 if (x) y+=2;   else y+=3;最后的一个else时候其上面那个if是一对,if(x==0)是没有else与其一对的,如果写明白就是

else if(x==0)
    {

    if (x) y+=2;
    else y+=3;

    }
  printf("%d\n",y);
}

. 2015-8-31 11:25:21

就近原则   下面的else是与上面的if(x)y+=2;相匹配的。   然后if(x==0)为真才进行下面的if,else.x==0为假,所以下面的都不执行。所以y=0.

祁老师 2015-8-31 11:26:25

流程是这样的  x=1 y=0 执行 !x为假 执行x==0为假 不成立 结果。

 int x=1,y=0;
  if(!x) y++;
  else if(x==0)
        if (x) y+=2;
        else y+=3;
  printf("%d\n",y);   这样看起来比较直观

山理 2015-8-31 11:28:01

又多个循环嵌套,用大括号层层整理可得到答案,可参考标准if语句

问题来自: 嵌套的if语句
有以下程序
#include <stdio.h>
main()
{ int x=1,y=0;
  if(!x) y++;
  else if(x==0)
    if (x) y+=2;
    else y+=3;
  printf("%d\n",y);
}
程序运行后的输出结果是 ______ 。
A. 3
B. 2
C. 1
D. 0
答案:D
解析:这道题目if嵌套的很混乱,根据else的就近原则,我先把格式给大家复原调整一下。 if(!x) y++; else { if(x==0) { if(x) y+=2; else y+=3; } } 由于x=1,因此!x为假,进入else。x==0为假,结束执行,y没有赋值。因此选D。