main() {intx,y,z; x=y=1; z=x++,y++,++y; printf("%d,%d,%d\n",x,y,z);} 请高手详细解答为什么

就是请高手详细解答一下为什么答案是2,3,1

x=y=1; <=等价=> x=1;y=1;
z=x++,y++,y++; <=等价=> z=x++;y++;++y; <=等价=> z=x;x++;y++;++y;
z=x++,y++,++y;是一个逗号表达式;逗号的运算优先级是最低的,所以先运算z=x++;
而逗号运算式是从左向右算的也就是说z=x++,y++,++y;这个整体表达式其实就是++y当然与本题无关
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-18
x=y=1;  //x=1,y=1
z=x++,y++,++y;  //逗号运算符的结合性是从左至右,因此先将x的值赋值给z,z=1,然后x自增
//x的值变为2,然后y++,++y,y自增了2次,所以y的值变为了3.
//因此,最终x=2,y=3,z=1。

本回答被网友采纳
第2个回答  2012-07-24
x=y=1; x=1,y=1
z=x++, z=2
y++, y=2
++y; y=3
所以 x=2,y=3,z=1
x++的意思就是 x=x+1 先用后加
++y的意思也是y=y+1 但是先加后用,
你这里没有区别,如果有循环的话有会看出区别了本回答被提问者采纳
第3个回答  2012-07-24
X++了一次
Y++了两次

...main() { int x,y,z; x=y=1; z=x++,y++,++y; printf("%d,%d,%d...
main(){ int x,y,z;x=y=1;z=x++,y++,++y;printf("%d,%d,%d\\n",x,y,z); } 其中x++是表明在执行完z=x后x才会自动加一,z=x++这条语句执行完后z=1,x=2 y++也是在这条语句结束后才会加一,这时y=2;++y,是在这条语句执行前y自动加一,这时y=3 所以结果会是2,3,1 给...

...{ int x,y,z; x=y=1;z=x++,y++,++y; printf ("%d%d%d",x,y,z...
所以这个语句:z=x++,y++,++y;实际上等于:(z=x++),(y++),(++y);这样写的话相信楼主就知道为什么z=1了吧 楼主认为z应该是3的原因应该是把z=x++,y++,++y;当成z=(x++,y++,++y);了

...main() { int x,y,z;x=y=1;z=(++x)+(++y)+(x++);printf("%d,%d,%d...
原式相当于z=n1+n2+n3 先执行n1=++x 执行后,x=2,n1=2 再执行n2=++y 执行后,y=2,n2=2 然后是n3=x++ 执行后,n3=2,x=3 最后为z=2+2+2 得z=6

...main( ) { int x,y,z; x=y=1; z=x++,y++; printf("%d,%d",x,y...
然后z=x,x进行自加1,也就是此时的x=2 再过来y自加1,即y=2 最后把x、y的结果以十进制的形式打印出来,即 2,2

逗号表达式的例题
逗号表达式本身不难,常常与赋值运算符一起考,考查学生对这两个知识点的理解和考生观察是否细心。如下题:题目:以下程序的输出结果是: main(){int x,y,z;x=y=1;z=x++,y++,++y;printf(%d,%d,%d\\n,x,y,z);} [A]2,3,3 [B]2,3,2 [C]2,3,1 [D]1,1,1解析:x和...

...{int x,y,z; x=y=1; z=x++;y=z++,x=y++; printf("%d%d%d\\n",x,y...
x=y=1; 使得变量x和y的内容都为1 z=x++; 表达式的计算结果使z的内容为x的初始值,即z的内容为1, 同时x的内容变为2 y=z++; 表达式的计算结果使y的内容为z的初始值,即y的内容为1,同时z的内容变为2 x=y++;表达式的计算结果使x的内容为y的初始值,即x的内容为1,同时y的...

main() { int x,y,z; x=y=z=1; if(++x||++y&&++z) printf("%d,%d,%d...
++x先用x 然后再自加 初始x=1,即为真,所以||后面的条件不执行 优先级从左到右,所以&&无效 0为假,非0为真,与是不是算式无关

...main() {int x,y,z; x=y=1; z=(++x)+(++y)+(x++); printf("%d,%d...
z=(++x)+(++y)+(x++)我们拆开写,++x此时x=2 ++y此时y=2 x++运行时这个表达式已经是2了,运行结束后x=3 所以z = 2 + 2 + 2 = 6 所以结果是3,2,6

int x,y,z; x=y=1; z=x++,y++,++y; printf("%d%d%d\\n",x,y,z);
x=y=1;x,y先被赋初值为1 z=x++;x先将值1赋给z,然后x自增变为2 y++;y自增变为2 ++y;y自增变为3

int x,y,z; x=y=1; z=x+y,y++,++y; printf(%d,%d,%d\\n,x,y,z);
是1,3,2

相似回答