c语言程序在不同环境下运行景况不同
c语言程序在不同环境下运行情况不同
我在dev-c++下和VC6.0分别都是输入同样的代码(VC6.0下在retnrn 0;前有加上getch();)
为什么dev-cpp下没结果显示出来(不是窗口一闪而过,而是黑窗口,但没结果输出),而VC6.0下则输出 11 30 ?请大神指导,谢谢
#include
int main()
{
int i,j;
float a;
for(i=1;i<=100;i++)
{
for(j=1;j<=100;j++)
{
a=2.3*i+1.9*j;
if(a==82.3&&i<j)printf("%d %d\n",i,j);
}
}
return 0;
}
------解决方案--------------------
a==82.3
深坑慎入
------解决方案--------------------
float型,由于精度的问题,一般不直接使用==进行比较
------解决方案--------------------
一般用if(abs(a-b)<=delta)来判断,delta的值取决于你想要的精度
------解决方案--------------------
------解决方案--------------------
这个题目的浮点数精度问题,完全可以把价格换算成角或者分来做嘛。
至于dev-c++下不输出结果,是不是dev-c++和VC++6.0的printf函数有点不同?
------解决方案--------------------
就VC 6这种垃圾,把两个浮点数比较成相等,也不太奇怪。
------解决方案--------------------
同意8楼做法
以角或分为单位,化为整形不但不会出错,性能可能提升(只是可能,但好像有的arm没有浮点指令,会发生质的变化)
------解决方案--------------------
说实在,新人凡是遇到浮点数的问题统统绕道吧,纠结float没有任何意义。
------解决方案--------------------
这个是精度问题,你可以这么改改 82.3-a < 1e-6,或者把价格都乘10倍,这样就都是整数了。能得出正确结果。浮点数类型不要直接做相等的判断。
------解决方案--------------------
赶紧给分,别磨唧!
我在dev-c++下和VC6.0分别都是输入同样的代码(VC6.0下在retnrn 0;前有加上getch();)
为什么dev-cpp下没结果显示出来(不是窗口一闪而过,而是黑窗口,但没结果输出),而VC6.0下则输出 11 30 ?请大神指导,谢谢
#include
int main()
{
int i,j;
float a;
for(i=1;i<=100;i++)
{
for(j=1;j<=100;j++)
{
a=2.3*i+1.9*j;
if(a==82.3&&i<j)printf("%d %d\n",i,j);
}
}
return 0;
}
------解决方案--------------------
a==82.3
深坑慎入
------解决方案--------------------
float型,由于精度的问题,一般不直接使用==进行比较
------解决方案--------------------
一般用if(abs(a-b)<=delta)来判断,delta的值取决于你想要的精度
------解决方案--------------------
float型,由于精度的问题,一般不直接使用==进行比较
题目是这样的:啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。
我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
那请问按你的看法,应该怎样修改?
for (int px = 0; px<823/19; px++)
for (int yx = 0; yx <823/19; yx ++)
if (23*px + 19*yx == 823 && px < yx) printf("%d,%d\n", px, yx);
------解决方案--------------------
这个题目的浮点数精度问题,完全可以把价格换算成角或者分来做嘛。
至于dev-c++下不输出结果,是不是dev-c++和VC++6.0的printf函数有点不同?
------解决方案--------------------
这个题目的浮点数精度问题,完全可以把价格换算成角或者分来做嘛。
至于dev-c++下不输出结果,是不是dev-c++和VC++6.0的printf函数有点不同?
就VC 6这种垃圾,把两个浮点数比较成相等,也不太奇怪。
------解决方案--------------------
题目是这样的:啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。
我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
那请问按你们的看法,应该怎样修改?
同意8楼做法
以角或分为单位,化为整形不但不会出错,性能可能提升(只是可能,但好像有的arm没有浮点指令,会发生质的变化)
------解决方案--------------------
我在dev-c++下和VC6.0分别都是输入同样的代码(VC6.0下在retnrn 0;前有加上getch();)
为什么dev-cpp下没结果显示出来(不是窗口一闪而过,而是黑窗口,但没结果输出),而VC6.0下则输出 11 30 ?请大神指导,谢谢
#include
int main()
{
int i,j;
float a;
for(i=1;i<=100;i++)
{
for(j=1;j<=100;j++)
{
a=2.3*i+1.9*j;
if(a==82.3&&i<j)printf("%d %d\n",i,j);
}
}
return 0;
}
说实在,新人凡是遇到浮点数的问题统统绕道吧,纠结float没有任何意义。
------解决方案--------------------
这个是精度问题,你可以这么改改 82.3-a < 1e-6,或者把价格都乘10倍,这样就都是整数了。能得出正确结果。浮点数类型不要直接做相等的判断。
------解决方案--------------------
//朕之解一:
for (int px = 0; px<823/19; px++)
for (int yx = 0; yx <823/19; yx ++)
if (23*px + 19*yx == 823 && px < yx) printf("%d,%d\n", px, yx);
//朕之解二:
for (int px = 0; px<823/19; px++)
for (int yx = 0; yx <823/19; yx ++)
if (2.3*px + 1.9*yx <= 82.3 && 2.3*px + 1.9*yx >= 82.3 && px < yx) printf("%d,%d\n", px, yx);
赶紧给分,别磨唧!