LukaDoncicY77 发表于 2021-12-27 21:38:09

计算问题

#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:56:37

本帖最后由 小亦003 于 2021-12-27 21:57 编辑

整型int,在计算时编译器会自动删去小数点后的数字
因为a定义为整型,所以 a/2 = 4 ,1/2 = 0, z = 14

傻眼貓咪 发表于 2021-12-27 21:57:40

z=a/2.0+b*x/y+1.0/2;

wananzuiqingfen 发表于 2021-12-27 22:04:14

表达式的优先级为: 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 类型

LukaDoncicY77 发表于 2021-12-27 22:05:46

wananzuiqingfen 发表于 2021-12-27 22:04
表达式的优先级为: z = (a / 2) + ((b * x) / y) + (1 / 2);

a / 2 = 9 / 2 = 4 (在 C 语言中对 int 类 ...

感谢

LukaDoncicY77 发表于 2021-12-27 22:06:35

傻眼貓咪 发表于 2021-12-27 21:57
z=a/2.0+b*x/y+1.0/2;

感谢
页: [1]
查看完整版本: 计算问题