(2)对于 || 运算,(条件1)&&(条件2);执行判断条件 1是否成立,再执行判断条件2是否成立 ,若1 和2 都为“假”,则整个表达式的值为0; 若执行判断条件1的时候,得到条件1为 “真" 的结果,则跳过条件2的判断 ,直接返回1 .
(3)顺便说下运算符的优先级由大到小的顺序为:后置++,前置++,!=,&&,||
第一题:
{
int i=1,j=2,k=3; (你这写的时候是不是掉了一个 i )
if(i++==1&&(++j==3||k++==3))
printf("%d%d%d\n,i,j,k);
}
你if 语句里面的 条件1 是 i++==1 ,先执行 i ++,i++的值为1,i自加1 变为2 ,正确,再判断(++j==3||k++==3) ,同理先判断 ++j==3 是否成立,j自加1变为3,显然++j 值为3是正确的,所以跳过 k++==3的判断,得到(++j==3||k++==3) 的值为1,因此没有执行k++,k的值不变.
第二题
{int a=1,b=2,c=3,d=0;
if(a==1&&b++==2)
if(b!=2||c--!=2)
printf("%d,%d,%d\n",a,b,c);
else printf("%d,%d,%d\n",a,b,c);
else printf("%d,%d,%d\n",a,b,c);
}
你 if,else语句的缩进不合理,导致你程序难以读懂,可将其改为:
if(a==1&&b++==2)
if(b!=2||c--!=2) printf("%d,%d,%d\n",a,b,c);
else printf("%d,%d,%d\n",a,b,c);
else printf("%d,%d,%d\n",a,b,c);
理解清楚你的else和if的匹配,哪个if 和哪个else 匹配要搞清楚,然后按照上面讲解的 && ,++,- -,!= 运算法则自己慢慢理解
第三题,
说一下 if(a>b>c)
执行 a>b>c时,先 判断 a>b是否成立,显然成立,返回值1,再判断a>b返回的值是否大于c ,显然1 是小于c 的,最终 表达式 a>b>c 的值 为0 ; 其它部分参考 第一题和第二题 的讲解
!谢谢你的回答啊,别的都挺明白的。但是我第二题的c的值还是不明白。b!=2只为0,c--!=2值为1,它俩或为1,然后输出c的时候就不是跳过了,c--是3,那c不应该是2了吗?最终结果不应该是2吗?#include