请解释这个简单的C程序的输出

时间:2015-06-29 14:55:15

标签: c associativity

int i = 2, j = 3, k, l ;
float a, b ;
k = i / j * j ;
l = j / i * i ;
a = i / j * j ;
b = j / i * i ;
printf( "%d %d %f %f", k, l, a, b ) ;
}

这是来自yashwant kanetkar的一个简单的c程序,但我无法与答案联系起来。 如果我们编译这个程序,我得到的输出是

0 2 0.00000 2.00000

这是一个非常简单的程序,但我无法解释输出可能是我与关联性混淆。 两个/和*具有L到R的关联性,并且只有/具有明确的左操作数(L到R关联性的必要条件)它更早地执行。但在这种情况下答案是不同的。

1 个答案:

答案 0 :(得分:1)

这是simple associativity of the operators,没什么复杂的。

我认为"integer division"属性让你感到困惑。

  1. k = i / j * j ;回答0,因为首先是整数除法(i / j == 0)。
  2. l = j / i * i ;回答2,因为首先是整数除法。 (j / i == 1)
  3. a = i / j * j ;回答0,(提升为float)因为我先前提到过整数除法。
  4. b = j / i * i ;,回答2,(提升为float),因为首先是整数除法,alo先前提到过。
  5. 注意:A gentle version of what Mr. Haccks said:请避免提及该特定图书。