赛尔号精灵画画图片:一个关于c的小问题 送100分

来源:百度文库 编辑:高考问答 时间:2024/05/09 06:57:16
x=0;y=2;z=3;
swith(x)
{case 0 :swith(y==2)
{case 1 : printf("*");break;
case 2 : printf("%d");break;
}
case 1 : swith(z)
{case 1 : printf("$");
case 2 : printf("*");break;
default: printf("#");
}
}
输出结果是什么???
请告诉我详细的解题过程

如果程序能编译通过的话输出结果应该是:*#
理由:
swith(x) 中,x=0,所以应该执行case 0:swith(y==2) ,y为2,所以y==2的值为1.由于里面嵌套swith,所以执行case 1 : printf("*");break; 先输出*,然后break跳出这一个swith。
由于第一个swith(x)执行了case 0,但没有break语句,所以会继续向下执行case 1: swith(z),z=3,所以执行default: printf("#"); ,输出#。

答案是 *#
   你得把优先分析清楚

x=0;y=2;z=3;
swith(x)
 {
    case 0 :switch(y==2) //首先执行这里
    {
       case 1 : printf("*");break; //由于(y==2)是一bool型为真所以值为1,显示“*”
       case 2 : printf("%d");break;
        }
         case 1 : switch(z) //由于x为case 0 处没有 break 继续执行
    {
        case 1 : printf("$");
        case 2 : printf("*");break;
        default: printf("#"); //由于z=3 执行默认 显示"#"
      }
}

如果程序能编译通过的话输出结果应该是:*#
理由:
swith(x) 中,x=0,所以应该执行case 0:swith(y==2) ,y为2,所以y==2的值为1.由于里面嵌套swith,所以执行case 1 : printf("*");break; 先输出*,然后break跳出这一个swith。
由于第一个swith(x)执行了case 0,但没有break语句,所以会继续向下执行case 1: swith(z),z=3,所以执行default: printf("#"); ,输出#。
==========
同意这个

int x=0,y=2,z=3;
switch(x)
{
case 0 :
switch(y==2)
{
case 1 : printf("*");break;
case 2 : printf("%d");break;
}
case 1 :
switch(z)
{
case 1 : printf("$");
case 2 : printf("*");break;
default:printf("#");
}
}

是*#
不过 switch switch switch