c语言简单习题

17. 若有以下程序:
#include "stdio.h"
main()
{
int k=2,i=2,m;
m=(k+=i*=k);printf("%d,%d\n",m,i);
}

执行后的输出结果是
6.4
看着就晕。。。。但是还是想知道为什么。。求详解

m=(k+=i*=k);
//语句从右向左执行,等于m=(k+=(i*=k));
i*=k 就是i=i*k=2*2=4,所以i=4
k+=i*=k, 就是k=k+i=2+4=6,赋值给m 所以m=6
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-04
m=(k+=i*=k)这句话是这样子运行的
首先:是i*=k;即i=i*k,可得i=4.

然后:原式即为m=(k+=i);

括号内是k+=i;

即是k=k+i(注意此时i=4);得k=6.

所以m=6,i=4.

执行后输出的结果为6,4

其实这个程序主要就是要知道“i+=k”类型的运算和等号是先计算等号右边的再将右边表达式的值赋给左边变量的。
第2个回答  2010-11-04
运算符的优先级参看:http://baike.baidu.com/view/262524.htm
表达式相当于i*=k;
k+=i;
m=k;
首先赋值表达式的值是赋值表达式中的左值或右值。
i*=k相当于i=i*k=2*2=4;那么赋值表达式的值也就是计算后的i或计算前的i*k也就是4
同理
k+=i相当于k=k+i=2+4=6;那么赋值表达式的值也就是6;
m=k = 6
第3个回答  2010-11-04
先看括号里面(k+=i*=k)其实是两个赋值表达式
=符号的结合性是由右至左所以等价于一下两个表达式
i*=k ; i=4
k+=i ; k=6
赋值表达式的值是最左边的值。所以,m=k.

过程是这样的
i=k*i
k=i+k
m=k

仔细看看赋值那块内容,很容易可以明白。
第4个回答  2010-11-04
个人分析:注意等号的结合性,从右至左计算

m=(k+=i*=k)等价于以下三步:
i*=k;k+=i;m=k;
=================
i*=k即i=i*k;此时i=4,k=2
k+=i即k=k+i;此时k=6,i=4
m=k;此时m=6,k=6
==========

因此,输出m和i时输出6 4
第5个回答  2010-11-04
没事找事,用括号不就行了,所有的都一清二楚。
相似回答
大家正在搜