首页 > 解决方案 > 正在做一个练习测试,并遇到了这个。z的值是多少?

问题描述

int z = 5, x = 44; 

switch (x) 
{ 
  case 45: 
    z = z + 15; 
    break; 

  case 46: 
    z = z - 5; 
    break;

  default: 
    z = z * 3; 
} 

标签: pseudocode

解决方案


Switch陈述可以被认为是某种特殊的If陈述。用一件小事。如果案例主体不包含break语句,则继续进行案例检查。

至于 ,default case当没有其他案例检查为真时,它会被击中。

话虽如此,您的 switch 语句可以写成:

if(x == 45)
{
  z = z + 15;
} else if(x == 46)
{
  z = z - 5;
} else 
{
  z = z * 3;
}

当给定 x 和 z 值 44 和 5 时,z 值将是显而易见的。

而且,没有 break 语句的案例主体是没有 else 的 if:

if(x == 45)
{
  z = z + 15;
}

if(x == 46)
{
  z = z - 5;
}

z = z * 3;

因此,当您不间断地运行 switch 时,所有情况都会受到影响。

为了进一步检查,请考虑以下代码:

if(x == 44)
{
  z = z / 5;
  x = x + 1;
} else if(x == 45)
{
  z = z + 15;
  x = x + 1;
} else if(x == 46)
{
  z = z - 5;
  x = x + 1;
} else 
{
  z = z * 3;
}

和这段代码

if(x == 44)
{
  z = z / 5;
  x = x + 1;
} 

if(x == 45)
{
  z = z + 15;
  x = x + 1;
}

if(x == 46)
{
  z = z - 5;
  x = x + 1;
}

z = z * 3;

具有相同的给定值 x = 44 和 z = 5。如您所见,我实际上将x = x + 1;语句添加到相同switch on xcases 和一个新的情况下,在 z 赋值之后的所有位置,有和没有breaks。在第一个示例中,即使 x 值递增到等于 45,z 值也会变为 1;但是检查停止了,因为它从未到达 else 块。但在第二个示例中,所有块都被命中,z 值产生等于 33。


推荐阅读