12.
a=5,a-->5是比较a>5不成立,结果为0,然后a--,a=4。
此时!(a-->5), 为(!(0)),即(1),while循环条件成立。
a=4,执行a+=4,a=8.由于后面没有break,所以还会执行a+=5.a=13.
然后break。
此时a-->5,13>5成立,结果为1,然后a=12.
而(!1)=(0),while循环条件不成立。结束循环。
输出a,即12.
结果是12
a-->5,按照符号的优先等级表示的是a--大于5,显然a--是4,所以!(a-->5)为真。运行switch。
switch(a),a现在为4,跳到case 4,a+=4表示a=a+4就是等于8,然后执行case 5:,a+=5等于13.然后break跳出switch。回到while。
!(a-->5)显然为非真,跳出while,前面运行了a--,所以a最终等于12.
#include
main()
{ int a=5; //a的初值是5,
while(!(a-->5)) //当a小于等于5时
{ switch(a)
{ case 1:a++; //当a=1时,从这一句执行到break
case 4:a+=4; //当a=4时,从这一句执行到break
case 5:a+=5; ////当a=5时,从这一句执行到break
break;
defalut:a-=5; 当a不等于1,4,5时执行
}
}
printf("%d\n",a);
}
a=5,经过while后a=4,从case 5执行a+=5(即a=a+5),所以a=,9.
a=9,不满足while语句,退出循环,
执行输出,a=9.