#define SQR(X)X*X Main(){ int a=10,b=5, c=3; a/= SQR(b+c)/SQR(b+c); print f(“%d\n”,a); }

 我来答
溪赤丝1M
2012-12-14
知道答主
回答量:16
采纳率:0%
帮助的人:13.6万
展开全部
这个问题可以这样来分析:
a/= SQR(b+c)/SQR(b+c) 通过宏展开等于是
a=a/(b+c*b+c/b+c*b+c) 代值以后等于是
a=10/(5+3*5+3/5+3*5+3)
=10/(5+15+0+15+3)
=10/38
=0
因此 最终的输出是0

这有2点值得注意:
1) 宏展开 #define SQR(X) X*X和#define SQR(X) (X*X)是非常不同的 区别就在有括号没有
由于你的定义没括号 所以展开之后的运算优先级如上面所写 而不是一般初学者认为的
a=a/((b+c)*(b+c)/(b+c)*(b+c))
2) 在上面的运算中3/5和10/38都都等于0 这和我们一般的认识不同
原因在于变量a,b,c都是整型的 而整型的除法结果还是整型 所以结果是截位取整
比如3/5=0.6 但小数部分自动不要了 结果就是0 10/38也是一样的
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式