#include
int main()
{
int x=10,y=20,t=0;
if(x==y) t=x;x=y;y=t;
printf("%d %d\n",x,y);
return 0';
}
这个为什么答案是200,为什么答案不是10,20?
#include
int main()
{
int 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("#");
}
}
return 0;
}
这个为什么答案是*#,不是到*就break跳出了吗?
第一个
if结构是 if(表达式) { 语句块} 没有用{} 所以语句块只有一句t=x;
后面两句都不在if成立后执行的范围内 因为x和不相等 所以执行后两句 x变成20 y变成0
所以输出结果就是 20 0
第二个
第一个switch开关 中值是x 也就是0 跳到第二个switch
第二个开关中值是y==2 也就是1 跳到case1 打印空(此处应该你代码传的有问题是 打印*吧)字符跳出本开关 由于第一个switch 的case0后面无break 所以下一个case也会执行
到了下一个开关 switch 里面值是z 而z等于3 本开关中没有3 执行default语句 打印 #
先将代码排版改为严格一行一条语句
然后在IDE中单步执行
第一题,缩进格式就看出来了:
#include<stdio.h>
int main()
{
int x = 10, y = 20, t = 0;
if (x == y) t = x; //这句未被执行
x = y; //x = 20
y = t; //y = 0;
printf("%d %d\n", x, y); //20 0
return 0;
}
第二题,见注释:
#include<stdio.h>
int main()
{
int x = 0, y = 2, z = 3;
switch (x) // x = 0
{
case 0: //这条被选中
switch (y == 2) //判断 y 是否等于 2 ,条件成立得到逻辑值 1
{
case 1: // 1 被选中
printf(" "); //输出空格
break; //跳出 switch(y == 2)
case 2:
printf("%");
break;
}
case 1: //依次执行这条
switch (z) // z=3
{
case 1:
printf("$");
case 2:
printf(" ");
break;
default: //以上两条不符合条件,这条默认执行
printf("#");//输出 ‘#’
}
}
return 0;
}