第一题:应该这样看
if(a>c)
b=a;
a=c;
c=b;
如果你明白可追问
第二题:
首先,在 switch(x) {} 中,case 0与case 1之间没有break;所以执行完case 0后面的内容后还会执行case 1后面的内容,这就是为什么会输出 #,因为执行了default : printf ("#");
其次,* 这个是得不到的,除非把switch (y=2)改成switch (y==2)才能得到printf("*");
最后,你觉得应该得出%,其实即使满足条件,执行了printf("%");也是得不到%,因为%和\一样,具有转义的作用,要想打印%,应该是printf("%%");
if(a>c)因为a不大于c所以if后的语句b=a;不执行。由于if之后没有大括号,所以只有b=a;这一条语句归if管,后两条语句a=c;和c=b;不受if影响。所以最后的结果是a=3,c=2,b依然为原值2。
case 2,所以得出%,但是并没有退出外面的SWITCH语句,所以继续执行case 1:
Z=3;所以输出了#;所以答案为*#
问题1:if(a>c)因为a不大于c所以if后的语句b=a;不执行。由于if之后没有大括号,所以只有b=a;这一条语句归if管,后两条语句a=c;和c=b;不受if影响。所以最后的结果是a=3,c=2,b依然为原值2。
源程序相当于if(a>c)
{
b=a;
}
a=c;
c=b;
问题2:输出结果为:*#因为switch(x),其中x=0,跳到case0,执行switch(y=2),因为y=2是正确的,所以switch括号内为1(另外是switch(y==2)吧,表判断),所以执行case 1,输出’*‘,break跳出当前switch语句到switch(z)处,z=3,执行default输出‘#’
问题1:当a=1,b=2,c=3时,以下if语句执行后,a、b、c中的值分别为
if(a>c)
b=a;a=c;c=b;
选择不成立,直接进行;a=c;c=b;然后就是 a=3 c=2 b=b=2
后面的
switch(y=2)里面的y=2是一个赋值语句,因此其实y=2这个式子所代表的意思是 1.因此进行到下面的case1.而后在跳出到下面一个case1;因为前面的break 只用来跳出switch (y=2) 并没有跳出switch(x),因此会继续下面的case1.如果
x=0;y=2;z=3;
switch(x)
{ case 0: switch (y=2)
{ case 1 : printf("*");break;
case 2 : printf("%");break;
}
break;
case 1:switch (z)
{ case 1: printf ("$");
case 2: printf("*");break;
default : printf ("#");
}
}
如果这样。 则会输出*
如果讲y=2 改成y==2 则还是输出*
问题一:
if (a > c) {
b = a;
}
a = c;
c = b;
这样就清晰多了,答案是a=3,b=2,c=2
问题二:switch(x)中case 0执行完没有break所以会继续进入case 1执行default,还有printf("%")中%后面没有匹配的东西所以打印不出任何东西的,可以改一下printf("%%")就可以看到%了
这个问题很有想象力啊,强烈建议先思考一个小时,然后编写代码运行一下子;
谢谢