永发信息网

c语言计算问题:y+=i-=j*=++x 已知y+5.0 i=3 j=5 x=2.5

答案:4  悬赏:20  手机版
解决时间 2021-03-02 08:22
  • 提问者网友:呐年旧曙光
  • 2021-03-01 11:41
c语言计算问题:y+=i-=j*=++x 已知y+5.0 i=3 j=5 x=2.5
最佳答案
  • 五星知识达人网友:蕴藏春秋
  • 2021-03-01 12:46
求什么 求Y吗?
如果是我说的

++X = 2.5+1 = 3.5

J*= ++X
则 J = J * X = 5 * 3.5 = 17.5

i-=J
则 i = i - J = 3- 17.5 =-14.5

Y += i
则 Y = Y + i = 5 + (-14.5) = -9.5追问书上答案是9.0-9.0是不是和题目有关?题目更具体点是“int i=3 ,j=5;float x=2.5;double y=5.0”追答第一步没有变化
x++
x=3.5
第二步计算 有类型转换
int型的j 参与运算
所以答案会强制转换为int型
所以j = 5 *3.5 = (int)17.5 所以转换后 j=17 (强制取整数位)
后面依次正常计算
i=i-j = 3-17 = -14
最后一步又涉及类型转换
y=y+i = 5.0 + (double)-14 = -9.0
全部回答
  • 1楼网友:青尢
  • 2021-03-01 16:19
GUN G++ 4.4.7 版本 编译 结果为 -9追问为什么我算的是-9.5追答呵呵,你肯定是j*=++x这一步错了,编译器会把这个拆成:
float temp = j * (++x);
j = temp;
显然temp = 17.5 ; 关键在与把float的temp 赋给int j 的时候,会把小数截断:
j = 17 ;
  • 2楼网友:神鬼未生
  • 2021-03-01 14:42
可以这么来想,
y=y+i;
i=i-j
j=j*++x;
要求y,则先求j,
j=5*3.5=17.5
i=3-17.5=-14.5
y=5+(-14.5)=-9.5

欢迎追问追问书上答案是9.0-9.0是不是和题目有关?题目更具体点是“int i=3 ,j=5;float x=2.5;double y=5.0”
  • 3楼网友:封刀令
  • 2021-03-01 13:56
这是优先级的问题吧。原题可表示为
y+=(i-=(j*=(++x))),答案自己动手啊亲
注:“+="“-=”“*=”优先级从右至左,++x优先级很高
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯