计算问题
#include <stdio.h>int main()
{
int a=9,b=2;double z;
float x=5.5;
float y=1.1;
z=a/2+b*x/y+1/2;
printf("%5.2f\n",z);
return 0;
}
为什么 运行结果 是14? 而不是 15? 本帖最后由 小亦003 于 2021-12-27 21:57 编辑
整型int,在计算时编译器会自动删去小数点后的数字
因为a定义为整型,所以 a/2 = 4 ,1/2 = 0, z = 14 z=a/2.0+b*x/y+1.0/2; 表达式的优先级为: z = (a / 2) + ((b * x) / y) + (1 / 2);
a / 2 = 9 / 2 = 4 (在 C 语言中对 int 类型进行除法运算,小数部位会被截断)
((b * x) / y) = ((2 * 5.5) / 1.1) =(11 / 1.1)int 类型和 float 类型进行运算时, 结果为 float 类型,运算结果为 10 (float 类型进行除法运算不会截断)
1 / 2 = 0(int 被截断)
因此结果为 float 类型的 14.000000(浮点数默认保留6位小数)
赋值给 z 会将 float 类型强制转换为 double 类型 wananzuiqingfen 发表于 2021-12-27 22:04
表达式的优先级为: z = (a / 2) + ((b * x) / y) + (1 / 2);
a / 2 = 9 / 2 = 4 (在 C 语言中对 int 类 ...
感谢 傻眼貓咪 发表于 2021-12-27 21:57
z=a/2.0+b*x/y+1.0/2;
感谢
页:
[1]