Switch分支语句case

这个程序的运行结果为什么是 @#&

#include<stdio.h>

int main ( )

{  

    int a=2,b=7,c=5;

    switch (a>0)

    {

       case 1: switch (b<0)

                {

                    case 0: printf("@"); break ;

                    case 1: printf("!"); break ;

                  }

       case 0: switch (c==5)

                   {

                     case 0: printf("*") ; break ;

                     case 1: printf("#") ; break ;

                     default : printf("#") ; break ;

                   }

       default : printf("&");

     }

    printf("\n");

    return 0;

}



break只对它直接上层switch有效,无break的case会依次往下执行。表达式为真对应int值为1,假为0。
第9行值1
第13行值0
第17行输出@,break
第23行(因为第13行case未break)值为1
第29行输出#,break
第35行(因为第23行case未break)输出&