鱼C论坛

 找回密码
 立即注册
查看: 897|回复: 5

[已解决]计算问题

[复制链接]
发表于 2021-12-27 21:38:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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?
最佳答案
2021-12-27 21:56:37
本帖最后由 小亦003 于 2021-12-27 21:57 编辑

整型int,在计算时编译器会自动删去小数点后的数字
因为a定义为整型,所以 a/2 = 4 ,1/2 = 0, z = 14
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-27 21:56:37 | 显示全部楼层    本楼为最佳答案   
本帖最后由 小亦003 于 2021-12-27 21:57 编辑

整型int,在计算时编译器会自动删去小数点后的数字
因为a定义为整型,所以 a/2 = 4 ,1/2 = 0, z = 14
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-27 21:57:40 | 显示全部楼层
z=a/2.0+b*x/y+1.0/2;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 类 ...

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-27 22:06:35 | 显示全部楼层

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 02:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表