#include <stdio.h> void main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d%d%d\n",i,j

#include<stdio.h> main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)); printf("%d%d%d\n",i,j,k);

|| && \u8fd9\u4e24\u4e2a\u8fd0\u7b97\u7b26\u4e0d\u540c\u4e8e| &\u8fd9\u4e24\u4e2a\u8fd0\u7b97\u7b26\u4e4b\u5904\u5728\u4e8e\uff1a
A||B \u4e00\u65e6\u524d\u9762A\u4e3a\u771f\uff0c\u5219B\u4e0d\u6267\u884c\uff1b
A|B A\u4e3a\u771f\uff0c\u8fd8\u8981\u6267\u884cB;
\u5bf9\u4e8e&& \u548c& \u4e5f\u662f\u7c7b\u4f3c\u3002
A&&B \u4e00\u65e6\u524d\u9762A\u4e3a\u5047\uff0c\u5219B\u4e0d\u6267\u884c\uff1b
A&B A\u4e3a\u5047\uff0c\u8fd8\u8981\u6267\u884cB\u3002
\u5e0c\u671b\u5bf9\u4f60\u6709\u6240\u5e2e\u52a9\u3002

\u7b54\u6848\uff1a2 3 3 #include void main() { int i=1,j=2,k=3; if( i++==1 &&( ++j==3 || k++==3 )) printf("%d %d %d\n",i,j,k); } if\u8bed\u53e5\u91cc\u9762\u7684\u5224\u65ad\u4e3a\u4e24\u5927\u90e8\u5206\uff1a 1\u3001i++ == 1; 2\u3001++j == 3 || k++ == 3; i\u7684\u521d\u59cb\u503c\u4e3a1\uff0ci++\u662f\u5148\u5224\u65adi==1\uff0c\u7136\u540e\u518di=i+1\uff0c\u6240\u4ee5\u8fd9\u90e8\u5206\u7ed3\u679c\u4e3atrue\uff1b j\u7684\u521d\u59cb\u503c\u4e3a2\uff0c++j\u662f\u5148\u6267\u884cj=j+1=3\uff0c\u7136\u540e\u518d\u5224\u65adj==3\uff0c\u7b2c2\u90e8\u5206\u7684\u524d\u534a\u90e8\u5206\u4e5f\u662ftrue\u7684\uff0c\u6839\u636e\u201c\u77ed\u8def\u201d\uff08\u7269\u7406\u7535\u8def\u4e0a\u7684\u540d\u8bcd\uff09\u539f\u5219\uff0c\u8fd9\u90e8\u5206\u6574\u4f53\u7684\u7ed3\u679c\u4e5f\u662f\u4e3atrue\u7684 \u4e24\u4e2a\u771f\u503c\u76f8\u4e0e\u7684\u7ed3\u679c\u4e5f\u4e3a\u6b63\uff0c\u6240\u4ee5if\u6761\u4ef6\u662f\u6210\u7acb\u7684\uff0c\u7136\u540e\u6267\u884c\u8f93\u51fa\u8bed\u53e5\uff1a i=2; j=3; k=3; //k++\u6ca1\u6709\u6267\u884c\u5230

#include <stdio.h>
void main()
{
int i=1,j=2,k=3;
//这样换行格式不太好,但解说方便
if(i++==1 //先使用i的值,再给i+1,也就是先判断i==1(true),然后i+1变为2
&&
(++j==3 //先给j+1,再判断 j==3,此值为true,j变为3 此小括号内表达式为true
||k++==3) ) //由于此表达式与前一个外层有小括号,而它们是用 || 连接,前一式子为true,此处不执行,k仍然为3
printf("%d%d%d\n",i, j, k); //我补全了,是这样吧。if后表达式为true,此处执行,输出
}
此处只要考察
i++ //先使用i的值再加1 ,看加号的位置,很好记
++i //先加1再使用i的值
以及 || 当第一个表达式为真时,后面的表达式不运算;&&同理。

首先 ()的优先级是第一级,因此先执行(++j==3||k++==3)。因为++j==3为真即1(j=3).所以k++==3不用计算(k不变)。然后计算i++==1(i=2),得出也为真即1.
综上所述,1&&1为真,所以i=2,j=3,k=3

X++ 本次操作不自增,操作后自增1
即i++==1时,i是1,而printf时 i 就是2了
++X,本次操作是就自增1
即++J==3时,j已经变成3了
至于k不变就涉及if的规则了
if函数是从左至右判断,i++==1为真,会判断第二句,++j==3为真,而后一个运算符是或,不论真假()的结果均为真,k++==3 这句不会运行
总体结果为真,
会printf结果。。。

这是因为 i在下次调用时候已经做了自加的操作 就是说在判断的时候i值变成2了 同样 j值变成了三 你程序买写全 我只看到了输出时候有i 后面两个没看到是什么 不过道理就是这样了

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网