C语言问题
以下变量x,y,z均为double型而且已经正确赋值,不能正确表示数学式子的C语言表达式是:
A.x/y*z B.x*(1/(y*z)) C.x/y*1/z D.x/y/z
答案为什么是A 请给予说明
参考答案:/和*是同级运算,所以从左到右依次计算,过程如下:
A
temp = x / y;
表达式结果 = temp * z;
而其它三个的运算过程如下
B
temp1 = y*z;
temp2 = 1/temp1;
表达式结果 = x * temp2;
C
temp1 = x/y;;
temp2 = temp*1;
表达式结果 = temp1/z;
D
temp = x/y
表达式结果 = temp / z;
显然A的结果不同
(注:上面的运行过程是在没有优化的情况下计算的,如果不懂优化, 这句话可以不看)