如此题,在switch的括号中出现的是一个判断语句,要做对此题需明晰以下内容:
若switch()语句的括号中是一个判断语句eg.(a!=3)(b<7)(c==2)此类时,
后面的case关键看有没有0和1,故而分为以下两种情况:
- 如若有0和1,则0表达的意思是错误,1表达的意思是正确,若判断语句正确就执行1的语句,若判断语句错误就执行0的语句,若有0但是1不存在,则错误的话依旧执行0的语句,正确的话因为1不存在,无可执行,此时有default就执行default,没有default则无输出。若有1而不含0,则正确时依旧执行1的语句,错误时,无可执行,此时有default就执行default,没有default无输出。
- 即不含0也不含1,则可以理解为既无正确的输出按钮也无错误的输出按钮,无可执行,此时有default就执行default,没有default无输出。
了解上述内容后让我们来完成此题:
此题将a=2代入外层switch函数的判断语句中,发现判断结果2>0为正确,故开始执行外层switch函数的case 1的语句,遇到了内嵌的switch函数,将b=7带入内嵌switch函数的判断语句中,发现7<0为错误,但并无case 0存在,也无default存在,故此语句中无任何输出值。
因外层switch语句的case 1与case 0语句中无break存在,故继续执行case 0的情况,带入c=5于case 0的内嵌switch函数的判断语句中,发现5==5为正确,故执行此内嵌switch语句中case 1的操作:打印出*,后遇到break,此内嵌的switch流程结束,再度回到外层的switch中,因外层函数还是没有break存在,继续执行default中的操作:打印出&,最后,外层switch也结束。执行最后的换行操作,最终结果为:*&
动手修改几个值,自己试一试吧!
#include "stdafx.h"
#include "stdio.h"
void main()
{
int a=2,b=7,c=5;
switch (a>0)
{
case 1: switch (b<0)
{
case 1: printf("@");
break;
case 2: printf("!");
break ;
}
case 0: switch (c==5)
{
case 1: printf("*") ;
break ;
case 2: printf("#") ;
break ;
default : printf("#") ;
break ;
}
default : printf("&");
}
printf("\n");
}