在做练习题的时候,看到了这个。z的值是多少?

问题描述 投票:0回答:1
int z = 5, x = 44; 

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

  case 46: 
    z = z - 5; 
    break;

  default: 
    z = z * 3; 
} 
pseudocode
1个回答
1
投票

Switch 语句可以被认为是某种特殊的 If 语句。有一件小事。如果case body没有包含一个 break 语句,然后继续检查case。

至于 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语句的case体是ifs没有els。

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

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

z = z * 3;

所以当你运行一个没有break语句的switch时,所有的case都会被击中。

为了进一步检查,请考虑这段代码。

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 x 一样 cases和一种新的情况,在所有的情况下,在z赋值后,有和没有 breaks. 在第一个例子中,z值为1,甚至x值也被递增到等于45;但是检查停止了,因为它从来没有到过 else块。但在第二个例子中,所有的块都被击中,z值产生等于33。

© www.soinside.com 2019 - 2024. All rights reserved.