c语言if判断运算求解

为什么最后z不等于0
# include<stdio.h>
void main ( )
{ int x = 1 , y = - 1 , z = 3 ;
  if  ( x < y )
     if  ( y < 0 )  z = 0 ;
  else  z = z + 1 ;
  printf ( " %d \n ", z );
}


这样看,if(y<0)是在if(x<y)里面的,但是x<y不成立,所以就不往下执行了,z还是3

这道题相当于:

# include<stdio.h>
void main ( )
{ int x = 1 , y = - 1 , z = 3 ;
  if  ( x < y ){
     if  ( y < 0 )  {  
         z = 0 ; 
     }else  {
         z = z + 1 ;
     } 
  }
  printf ( " %d \n ", z );
}

  1. if后面如果不跟大括号,只会执行后面的第一条语句(代码块),所以if ( x < y )和他后面的一个代码块组成了一个if判断
  2. 因为else有个规则:就是它一定匹配到与其最近的且无 else 子句匹配的 if 语句(必须在同一个语句块层次)。所以,if ( y < 0 ) z = 0 和else z = z + 1 是个整体,组成了一个if判断
  3. 带入数据运算,z = 3

如有帮助,望采纳 ^.^ 谢谢啦~

img