C基础这题答案到底是什么?

来源:百度知道 编辑:UC知道 时间:2024/09/21 06:30:26
#include <stdio.h>
main()
{
int w=3,x=10,z=7;
printf("%d",x>10?x+100:x-10);
printf("%d",w++||z++);
printf("%d",!w>z);
printf("%d\n",w&&z);
}
我在TC上运行后得到这个程序结果是:0101, 但是书上的答案却是0111,
请问这到底是怎么回事,希望有耐心的学者帮我做出分析,可以的话最好带上程序注释.谢谢

0101 书上答案错了,不要老是相信课本。
!w>z !的运算级别相当的高 先算 !w, w=4 ;!w=0 ;z=8 ; !w>z 等价于0>8? 结果 为假 当然 输出0
所以答案是0101

printf("%d",x>10?x+100:x-10); //x>10 不成立 所以得:x-10 输出0
printf("%d",w++||z++);//w++和z++都成立了 输出1
printf("%d",!(w>z)); //w>z 错误,输出0,再看!w>z,错误的取反 就是正确 输出1
printf("%d\n",w&&z);//都成立 输出1

最有争议的是 第三个 我加个括号了 因为 !的优先级高于>,因该是书上写错了,或者打错了
即输出:0111

0101

0101

对,就是0101