求解一道比较简单的C语言题目

来源:百度知道 编辑:UC知道 时间:2024/06/04 08:32:44
#include<stdio.h>
main()
{ int i=16,j,x=6,y,z;
j=i+++1; printf(“1:%d\n”,j);
x*=i=j; printf(“2:%d\n”,x);
x=1;y=2;z=3;
x+=y+=z;
printf(“3:%d\n”,z+=x>y?x:y);
x=y=z=-1;
++x||++y&&++z;
printf(“5:%d,%d,%d\n”,x,y,z);
}

麻烦讲解一下~~ 谢谢!!

#include<stdio.h>
main()
{
int i=16,j,x=6,y,z;

j=i+++1; //相当于 (i++) + 1,由于i++当句i不变,还是等于i+1 = 17
printf("1:%d\n",j); //上句执行完,i的值加1那个操作就生效了,i成了17

x*=i=j; //i和j都为17 乘以x结果为102付给x,所以x为102
printf("2:%d\n",x);

x=1;y=2;z=3;
x+=y+=z; // y+=z; y变成了5. x+=y,x成了5+1 = 6
printf("3:%d\n",z+=x>y?x:y); //相当于z+=(x>y?:x:y)=> z+=x, z为 6+3 =9

x=y=z=-1;
++x||++y&&++z; //先计算++x,结果为0,继续算__y还是0,因为++y的结果已经是0,++z将不被计算,z为-1,这符合短路求值
printf("5:%d,%d,%d\n",x,y,z);
}