已经定义:x=0;y=2;z=3;输出的结果是?switch(x){case 0:switch(y==2){case 1:printf("*");break;case 2:printf("%");break;}case 1:switch(z){case 1:printf("$");case 2:printf("*");break;default:printf("#");}} 我想问下y==2的结果为什么是1,
来源:学生作业帮助网 编辑:作业帮 时间:2024/09/14 12:26:50
已经定义:x=0;y=2;z=3;输出的结果是?switch(x){case 0:switch(y==2){case 1:printf("*");break;case 2:printf("%");break;}case 1:switch(z){case 1:printf("$");case 2:printf("*");break;default:printf("#");}} 我想问下y==2的结果为什么是1,
已经定义:x=0;y=2;z=3;输出的结果是?
switch(x)
{case 0:switch(y==2)
{case 1:printf("*");break;
case 2:printf("%");break;
}
case 1:switch(z)
{case 1:printf("$");
case 2:printf("*");break;
default:printf("#");
}
}
我想问下y==2的结果为什么是1,如果改成y==3,那这个表达式的结果是1 还是0?我在vc上操作后发现,如果y本身的值与等号后面的值不相同,程序会跳过这里,也就是说输出结果成为#,而不是*#,这是为什么?
已经定义:x=0;y=2;z=3;输出的结果是?switch(x){case 0:switch(y==2){case 1:printf("*");break;case 2:printf("%");break;}case 1:switch(z){case 1:printf("$");case 2:printf("*");break;default:printf("#");}} 我想问下y==2的结果为什么是1,
y == 2是一个布尔(判断)表达式,在你的程序中,因为y确实等于2,所以这个表达式的结果为True.在C++中,布尔值存储的形式就是0和1,1就是True,所以y == 2的结果为1.同理,如果改成y == 3,则结果为0(False).
另外,我看你的代码,发现你对switch的用法还不太了解(有很多不规范的地方),我可以简单介绍一下:
switch用作在一个整型变量的值为不同情况时,选择执行不同分支的代码;如果不满足任何情况,则执行default分支;如果没有default分支,则跳过这一块.switch后面跟的是要判断的变量名,case后面跟的才是不同情况下变量的值.
例如:
switch(a) //注意不是a=1或者类似的判断
{
case 1:a = 2; break;
case 2:a = 5; break;
default:a = 100;
}
当a等于1时,程序使a变为2;当a等于2时,程序使a变为5;如果都不满足,a变为100.
注意default分支要放最后.除了最后一分支外,其他分支都要加break语句.
为什么要break?
switch执行的流程为顺序判断,先判断a是否等于1,再判断a是否等于2,最后执行默认分支.然而,正确使用的switch语句应该只会执行其中的一个分支,这就需要break.
break可以让程序跳出switch语句块,如果没有break,程序会继续执行.本例中,这样的错误将导致当a等于1时,a会先变为2再变为5最后变为100.这显然不是期望的结果.虽然有人以此实现高级功能,但是不同的编译器会对这种不规范的代码编译出不同效果的程序,其结果是不可预料的.有的编译器编译的程序甚至会对后来的分支不加选择地执行,程序就会失控.
所以建议你按照标准规规矩矩去用,switch后面的括号里只写变量名,而且不要漏掉一个break(你的代码漏掉了很多).