C语言求解 欧拉和鸡蛋 我这段程序不能执行if 为什么,是不是因为 float类型精确度的原因。请详细解答

2025-04-26 00:15:39
推荐回答(2个)
回答1:

是的,因为float的精度问题。

还有另外一个问题就是salary2 = 32/x;被作为整数除法,丢掉了小数部分。


建议

if(x*salary1==y*salary2)

改成

if(x*salary1-y*salary2<1e-6 && x*salary1-y*salary2>-1e-6 )


建议

salary2 = 32/x;

改成

salary2 = 32.0/x;

#include 
void main()
{
int x,y;//我的鸡蛋个数和她的鸡蛋个数
float salary1,salary2;//我鸡蛋单价和她的鸡蛋单价

for(x=1;x<=150;x++)
{
y=150-x;
salary1 = 24.5/y;
salary2 = 32.0/x;
//if(x*salary1==y*salary2)
if(x*salary1-y*salary2<1e-6 && x*salary1-y*salary2>-1e-6 )
printf("我有%d个鸡蛋,她有%d个鸡蛋",x,y); 
}  
}

回答2:

//修改如下
#include 
main()
{
int x,y;//我的鸡蛋个数和她的鸡蛋个数

for(x=1;x<150;x++)
{
 y=150-x;
 if((float)x*24.5/y==(float)y*32/x)
 printf("我有%d个鸡蛋,她有%d个鸡蛋",x,y); 
}  
}